[Android] 在可滑动控件中使用自定义控件时的触摸事件处理
在ScrollView嵌套自定义控件时发现当ScrollView滑动时自定义控件将失去触摸事件,现记录下解决方法:
@Override
public boolean onTouchEvent(MotionEvent event) {
boolean isNeedToEatEvent = false;
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
isNeedToEatEvent = true;
attemptClaimDrag();
mTouchX = event.getX();
invalidate();
break;
case MotionEvent.ACTION_MOVE:
isNeedToEatEvent = true;
attemptClaimDrag();
mTouchX = event.getX();
invalidate();
break;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL:
// TODO 处理ACTION_UP事件
mTouchX = -1;
invalidate();
isNeedToEatEvent = true;
break;
default:
break;
}
return isNeedToEatEvent;
}
private void attemptClaimDrag() {
ViewParent parent = getParent();
if (parent != null) {
// 如果控件有父控件,那么请求父控件不要劫取事件
// 以便此控件正常处理所有触摸事件
// 而不是被父控件传入ACTION_CANCEL去截断事件
parent.requestDisallowInterceptTouchEvent(true);
}
}