編輯:關於Android編程
首先,我們假設這樣一個場景:一個ViewPager裡面嵌套一個ViewPager,內部滑動方向和外部滑動方向一樣時,該怎麼解決這一沖突呢?
針對滑動沖突這裡給出兩種解決方案:外部攔截法,內部攔截法。
外部攔截法
外部攔截法是指點擊事件都先經過父容器的攔截處理,如果父容器需要此攔截事件,就攔截,不需要就不攔截,這種方法比較符合點擊事件的分發機制。這種方法代碼如下:
@Override public boolean onInterceptTouchEvent(MotionEvent ev) { ... boolean intercepted=false; switch (action) { case MotionEvent.ACTION_MOVE: intercepted=false; break; case MotionEvent.ACTION_MOVE: if(父容器需要處理此事件) intercepted=true; else intercepted=false; break; case MotionEvent.ACTION_UP: { intercepted=false; break; } ... return intercepted; }
上述代碼是外部攔截的典型邏輯,只需要重寫onInterceptTouchEvent()方法,修改父容器當前需要的事件即可。
內部攔截法
內部攔截法是指:父容器不攔截任何事件,所有事件都傳遞給子元素,如果子元素需要此事件就直接消耗掉,否則就交由父容器處理。這種方法與Android中的事件分發機制不一致,需要配合 requestDisallowInterceptTouchEvent()方法才能正常工作。我們需要重寫子元素的,代碼如下:
public boolean dispatchTouchEvent(MotionEvent event) { ... switch (action) { case MotionEvent.ACTION_MOVE: getParent().requestDisallowInterceptTouchEvent(true); break; case MotionEvent.ACTION_MOVE: if(子元素需要處理此事件) getParent().requestDisallowInterceptTouchEvent(true); break; case MotionEvent.ACTION_UP: { break; } ... return super.dispatchTouchEvent(event); ; }
當然,還需要修改父容器的onInterceptTouchEvent()方法,代碼如下:
@Override public boolean onInterceptTouchEvent(MotionEvent ev) { int action=ev.getAction(); if(action==MotionEvent.ACTION_DOWN){ return false; }else { return true; } }
以上就是兩種解決滑動沖突的解決方案,希望對大家的學習有所幫助。
在Eclipse完成上一個APP,決定轉到Studio2.0來。 這次主要進行的設置是 1、代碼區背景顏色的更改 2、注釋、代碼自動補全快捷鍵設定 3、工具欄自定
(一).前言:今天我們的項目繼續更新,今天我們主要講解MVP開發模式以及具體實例。 (二).簡介:MVP(Model ViewPrese
Android手勢密碼LockPatternView、LockPasswordUtils、LockPatternUtils在使用別人寫的這個手勢密碼的時候,我們通常是有自
ListView是Android中經常會使用的東西,綁定數據對於初學者來說,尤其是剛接觸編程的人來說,往往會覺得很難理解,我上大二的時候學的java,但是基本上相當於沒有