我有一个自定义的Android视图,它覆盖了onTouchEvent(MotionEvent)以处理视图内内容的水平滚动。然而,当包含此视图的ScrollView垂直滚动时,自定义视图停止接收触摸事件。理想情况下,我希望自定义视图继续接收事件,以便可以处理自己的水平滚动,而包含的视图层次结构处理垂直滚动。
是否有任何方法在滚动时继续接收这些运动事件?如果没有,是否还有其他获取所需触摸事件的方法?
我有一个自定义的Android视图,它覆盖了onTouchEvent(MotionEvent)以处理视图内内容的水平滚动。然而,当包含此视图的ScrollView垂直滚动时,自定义视图停止接收触摸事件。理想情况下,我希望自定义视图继续接收事件,以便可以处理自己的水平滚动,而包含的视图层次结构处理垂直滚动。
是否有任何方法在滚动时继续接收这些运动事件?如果没有,是否还有其他获取所需触摸事件的方法?
如果您想继续进行水平滚动并防止垂直滚动,请在子视图中使用requestDisallowInterceptTouchEvent(true),然后在完成后将其重置。
private float downXpos = 0;
private float downYpos = 0;
private boolean touchcaptured = false;
@Override
public boolean onTouchEvent(MotionEvent event) {
switch(event.getAction()) {
case MotionEvent.ACTION_DOWN:
downXpos = event.getX();
downYpos = event.getY();
touchcaptured = false;
break;
case MotionEvent.ACTION_UP:
requestDisallowInterceptTouchEvent(false);
break;
case MotionEvent.ACTION_MOVE:
float xdisplacement = Math.abs(event.getX() - downXpos);
float ydisplacement = Math.abs(event.getY() - downYpos);
if( !touchcaptured && xdisplacement > ydisplacement && xdisplacement > 10) {
requestDisallowInterceptTouchEvent(true);
touchcaptured = true;
}
break;
}
super.onTouchEvent(event);
return true;
}