首页 > 系统 > Android > 正文

Android中Viewpager禁止滑动的实现

2019-12-12 02:54:00
字体:
来源:转载
供稿:网友

前言

现在很多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; }}

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对武林网的支持。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表