让ViewPager不能够滚动

关于ViewPager滚动的拦截 首先得知道他怎么就能够滚动了. 才有可能去拦截他,不让他滚动.继承

那么关于触摸事件,想固然的就会想到onInterceptTouchEvent方法和onTouchEvent方法.事件

当一个ViewGroup的onInterceptTouchEvent方法决定拦截事件了之后. 那么该viewgroup的onTouchEvent方法才会得以调用.io

在ViewPager中onInterceptTouchEvent源代码里有这样一行注释 /*event

  • This method JUST determines whether we want to intercept the motion.
  • If we return true, onMotionEvent will be called and we do the actual
  • scrolling there. */ 可见ViewPager的滚动是在onTouchEvent处理的. 可以进入onTouchEvent方法的前提是onInterceptTouchEvent决定要拦截event了.

那么若是我继承ViewPager而且在onInterceptTouchEvent方法中直接不拦截. 那么就不会进入onTouchEvent方法中相关控制滚动的逻辑.就不能够滚了应该是.scroll

实验结果是直接在onInterceptTouchEvent方法中返回false并不能致使ViewPager滚动不了? 可是为何? 若是我在onInterceptTouchEvent里返回false了是否是onTouchEvent方法就不会被调用.方法

实验结果是OnTouchEvent方法依然会被调用.因此并无致使ViewPager不滚动. 那么若是我重写onTouchEvent方法.随便返回一个boolean 只要不调用super的处理行为.应该就能拦截了.call

不重写onInterceptTouchEvent方法,而且重写onTouchEvent方法.直接返回true. 表现出来就是.ViewPager是不能滚动了.可是一开始仍是有一点点滚动.注释

尝试不重写onInterceptTouchEvent方法,而且重写onTouchEvent方法返回false呢. 仍是同样的结果.仍是会有一丢丢滚动.view

那么这一丢丢滚动是从哪里来的? 是从onInterceptTouchEvent方法里处理的? 若是是那么直接重写onInterceptTouchEvent方法返回false不拦截.而且onTouchEvent随便返回一个值,应该好使了.vi

实验说明onTouchEvent返回false.是好使的知足要求的. 那么onTouchEvent方法返回true会怎么样呢? 依然好使,没有什么影响.

缘由大概是这样.事件可以得以分发的child.若是child的onTouchEvent方法不消费掉事件的话, 也即child的onTouchEvent方法return false.那么该child的ViewGroup的onTouchEvent方法 就会被调用.因此这里要想ViewPager不滚动,必须重写onInterceptTouchEvent和onTouchEvent方法.干掉super的那些行为.

相关文章
相关标签/搜索