requestDisallowInterceptTouchEvent

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

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

1 requestDisallowInterceptTouchEvent(true)

代碼一般如下:

複製代碼
 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 }
複製代碼

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章