關於ViewPager滾動的攔截 首先得知道他怎麼就能夠滾動了. 纔有可能去攔截他,不讓他滾動.繼承
那麼關於觸摸事件,想固然的就會想到onInterceptTouchEvent方法和onTouchEvent方法.事件
當一個ViewGroup的onInterceptTouchEvent方法決定攔截事件了之後. 那麼該viewgroup的onTouchEvent方法纔會得以調用.io
在ViewPager中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的那些行爲.