這是一個外層的控件,它是一個viewPager,在它的里面有個listView,listView每一個item被點擊會彈出內(nèi)容,這里要講解的是ViewPager子View滑動事件沖突的解決,安卓系統(tǒng)提供給我們關(guān)于觸摸傳遞事件有三個方法:
它們分別是:
1、public boolean dispatchTouchEvent(MotionEvent ev)? 這個方法用來分發(fā)TouchEvent
2、public boolean onInterceptTouchEvent(MotionEvent ev) 這個方法用來攔截TouchEvent
3、public boolean onTouchEvent(MotionEvent ev) 這個方法用來處理TouchEvent
當條目被點擊,首先Activity將TouchEvent事件通過dispatchTouchEvent方法傳遞給ViewGroup,
ViewGroup通過dispatchTouchEvent方法傳遞給interceptTouchEvent,這個時候,如果返回true ,則交給這個ViewGroup的onTouchEvent處理;如果返回false,則交給子View的dispatchTouchEvent方法處理。
當事件傳遞到子view 的dispatchTouchEvent方法中時,通過方法傳遞到當前View的onTouchEvent方法中,這個時候如果返回true,那么這個事件就會止于該view;如果返回 false ,那么這個事件會從這個子view 往上傳遞,而且都是傳遞到父View的onTouchEvent 來接收。
當傳遞到ViewGroup的 onTouchEvent 最后也返回 false 的話,它將繼續(xù)傳遞到Activity的onTouchEvent中,還是返回false的話,這個事件就會“消失“;事件向上傳到中間的任何onTouchEvent方法中,如果返回true,則代表事件被消費,就不會再傳遞。
下附圖給予參考,觸摸傳遞:

