滑动冲突的解决主要有外部拦截法和内部拦截法
一:外部拦截法
父View中处理:
public boolean onInterceptTouchEvent(MotionEvent ev) {
if ( condition ) {
return true;
}
return false;
}
二:内部拦截法
子View中处理:
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
int action = event.getAction();
if (action == MotionEvent.ACTION_DOWN) {
return false;
} else {
return true;
}
}
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
switch (ev.getAction()){
case MotionEvent.ACTION_DOWN:
//通知父容器不要拦截事件
parent.requestDisallowInterceptTouchEvent(true);
break;
case MotionEvent.ACTION_MOVE:
if ( <condition> ){
//通知父容器拦截此事件
parent.requestDisallowInterceptTouchEvent(false);
}
break;
case MotionEvent.ACTION_UP:
parent.requestDisallowInterceptTouchEvent(false);
break;
default:
break;
}
return super.dispatchTouchEvent(ev);
}
本文详细介绍了在Android开发中常见的滑动冲突问题及其解决方案。主要分为外部拦截法和内部拦截法两种,通过在父View和子View中分别处理触摸事件,有效避免了滑动冲突,确保了用户操作的流畅性和准确性。
1229

被折叠的 条评论
为什么被折叠?



