【Android】requestDisallowInterceptTouchEvent


ViewPager來實現左右滑動切換tab,如果tab的某一項中嵌入了水平可滑動的View就會讓你有些不爽,比如想滑動tab項中的可水平滑動的控件,卻導致tab切換。

因為Android事件機制是從父View傳向子View的,可以去檢測你當前子View是不是在有可滑動控件等,決定事件是否攔截,但是這個麻煩,而且並不能解決所有的問題(必須檢測觸摸點是否在這個控件上面),其實有比較簡單的方法,在你嵌套的控件中注入ViewPager實例(調用控件的getParent()方法),然后在onTouchEvent,onInterceptTouchEvent,dispatchTouchEvent里面告訴父View,也就是ViewPager不要攔截該控件上的觸摸事件。

1 requestDisallowInterceptTouchEvent(true)

調用該方法,一旦底層View收到touch的action后調用這個方法那么父層View就不會再調用onInterceptTouchEvent了,也無法截獲以后的action。代碼一般如下:

 1 public boolean onTouch(View v, MotionEvent event) {
 2     switch (event.getAction()) {
 3     case MotionEvent.ACTION_MOVE: 
 4         pager.requestDisallowInterceptTouchEvent(true);
 5         break;
 6     case MotionEvent.ACTION_UP:
 7     case MotionEvent.ACTION_CANCEL:
 8         pager.requestDisallowInterceptTouchEvent(false);
 9         break;
10     }
11 }

當用戶按下的時候,我們告訴父組件,不要攔截我的事件(這個時候子組件是可以正常響應事件的),拿起之后就會告訴父組件可以阻止。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM