Android滑動事件沖突詳解(一)
首先,我們假設(shè)這樣一個場景:一個ViewPager里面嵌套一個ViewPager,內(nèi)部滑動方向和外部滑動方向一樣時,該怎么解決這一沖突呢?
針對滑動沖突這里給出兩種解決方案:外部攔截法,內(nèi)部攔截法。
外部攔截法
外部攔截法是指點擊事件都先經(jīng)過父容器的攔截處理,如果父容器需要此攔截事件,就攔截,不需要就不攔截,這種方法比較符合點擊事件的分發(fā)機制。這種方法代碼如下:
@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()方法,修改父容器當前需要的事件即可。
內(nèi)部攔截法
內(nèi)部攔截法是指:父容器不攔截任何事件,所有事件都傳遞給子元素,如果子元素需要此事件就直接消耗掉,否則就交由父容器處理。這種方法與Android中的事件分發(fā)機制不一致,需要配合 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;
}
}
更多關(guān)于滑動功能的文章,請點擊專題: 《Android滑動功能》
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Android 1.5 1.6 2.0 2.1 2.2 的區(qū)別詳解
本篇文章是對Android 1.5 1.6 2.0 2.1 2.2 版本之間的區(qū)別進行了詳細的分析介紹,需要的朋友參考下2013-06-06
Android 使用Vibrator服務(wù)實現(xiàn)點擊按鈕帶有震動效果
這篇文章主要介紹了Android 使用Vibrator服務(wù)實現(xiàn)點擊按鈕帶有震動效果,,本文通過實例圖文相結(jié)合給大家介紹的非常詳細,對大家的學習火鍋工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-06-06
Jetpack Compose 雙指拖拽實現(xiàn)詳解
這篇文章主要為大家介紹了Jetpack Compose 雙指拖拽實現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-11-11
Android編程操作嵌入式關(guān)系型SQLite數(shù)據(jù)庫實例詳解
這篇文章主要介紹了Android編程操作嵌入式關(guān)系型SQLite數(shù)據(jù)庫的方法,結(jié)合實例形式較為詳細的分析了Android操作SQLite數(shù)據(jù)庫的基本技巧與相關(guān)注意事項,需要的朋友可以參考下2016-01-01
Android Compose自定義TextField實現(xiàn)自定義的輸入框
眾所周知Compose中默認的TextField和OutlineTextField樣式并不能滿足所有的使用場景,所以自定義TextField就成了必備技能。本文將自定義TextField實現(xiàn)自定義的輸入框,感興趣的可以了解一下2022-03-03
Android編程中activity啟動時出現(xiàn)白屏、黑屏問題的解決方法
這篇文章主要介紹了Android編程中activity啟動時出現(xiàn)白屏、黑屏問題的解決方法,涉及Android針對activity啟動設(shè)置的技巧,需要的朋友可以參考下2015-12-12

