Android中Viewpager禁止滑动的实现

前言

现在很多app,首页不允许滑动切换(因为页面加载吧),但是又用viewpage来管理frgament.因为方便嘛.

以前在网上找的例子:

public class NoScrollViewPager extends ViewPager {

public NoScrollViewPager(Context context, AttributeSet attrs) {

super(context, attrs);

}

public NoScrollViewPager(Context context) {

super(context);

}

@Override

public boolean dispatchTouchEvent(MotionEvent ev) {

//不拦截,否则子孩子都无法收到事件,一般这个自定义的时候都不作处理

return super.dispatchTouchEvent(ev);

}

@Override

public boolean onInterceptTouchEvent(MotionEvent ev) {

return super.onInterceptTouchEvent(ev);

}

@Override

public boolean onTouchEvent(MotionEvent ev) {

return true;

}

这个自定义如果继承的Viewpager是低版本的,那么是没问题的.

但是如果你编译时用是高版本的api,5.0以后吧.上面这个自定义就会失效,

你会发现,会有细微的滑动.还是能滑动的

判断老的还是新的,看setOnPageChangeListener就知道了

最新的Viewpager里面这个方法已经废弃了,改成addOnPageChangeListener()了.

由于之前改viewpager做懒加载.一直保留了一个老版本的Viewpager使用.直到最近才发现.

改进后

public class NoScrollViewPager extends ViewPager {

private boolean isScroll;

public NoScrollViewPager(Context context,AttributeSetattrs{

super(context, attrs);

}

public NoScrollViewPager(Context context) {

super(context);

}

/**

* 1.dispatchTouchEvent一般情况不做处理

*,如果修改了默认的返回值,子孩子都无法收到事件

*/

@Override

public boolean dispatchTouchEvent(MotionEvent ev) {

return super.dispatchTouchEvent(ev); // return true;不行

}

/**

* 是否拦截

* 拦截:会走到自己的onTouchEvent方法里面来

* 不拦截:事件传递给子孩子

*/

@Override

public boolean onInterceptTouchEvent(MotionEvent ev) {

// return false;//可行,不拦截事件,

// return true;//不行,孩子无法处理事件

//return super.onInterceptTouchEvent(ev);//不行,会有细微移动

if (isScroll){

return super.onInterceptTouchEvent(ev);

}else{

return false;

}

}

/**

* 是否消费事件

* 消费:事件就结束

* 不消费:往父控件传

*/

@Override

public boolean onTouchEvent(MotionEvent ev) {

//return false;// 可行,不消费,传给父控件

//return true;// 可行,消费,拦截事件

//super.onTouchEvent(ev); //不行,

//虽然onInterceptTouchEvent中拦截了,

//但是如果viewpage里面子控件不是viewgroup,还是会调用这个方法.

if (isScroll){

return super.onTouchEvent(ev);

}else {

return true;// 可行,消费,拦截事件

}

}

public void setScroll(boolean scroll) {

isScroll = scroll;

}

}

总结

以上是 Android中Viewpager禁止滑动的实现 的全部内容, 来源链接: utcz.com/z/313946.html

回到顶部