我理解视图可以通过在传递onTouchEvent
事件时在ACTION_DOWN
中返回true来决定自己处理MotionEvent。如果他们返回true
,那么他们将收到所有后续MOVE/UP/CANCEL
个事件。这工作正常。
我想做的是将此决定推迟到ACTION_MOVE
事件。我有一个包含子项的ViewGroup,并且根据是否水平或垂直滚动,我希望ViewGroup或Child负责处理MotionEvents
类似的东西:
public class MyViewGroup extends ViewGroup{
public boolean onTouchEvent(MotionEvent event) {
int action = event.getActionMasked();
if (action == MotionEvent.ACTION_DOWN) {
mDownX = event.getX();
} else if (action == MotionEvent.ACTION_MOVE) {
if (Math.abs(event.getX() - mDownX) > THRESHOLD_X) {
// I want all the future events to be forwarded to this ViewGroup
return true;
}
}
return false;
}
}
public class MyChild extend View {
public boolean onTouchEvent(MotionEvent event) {
int action = event.getActionMasked();
if (action == MotionEvent.ACTION_DOWN) {
mDownY = event.getY();
} else if (action == MotionEvent.ACTION_MOVE) {
if (Math.abs(event.getY() - mDownY) > THRESHOLD_Y) {
// I want all the future events to be forwarded to this View
return true;
}
}
return false;
}
}
这可能吗?现在,只有ViewGroup才会收到MOVE/UP/CANCEL
。我猜是因为它没有找到合适的孩子来转发视图。
答案 0 :(得分:0)
为了记录,我最终通过覆盖ViewGroup.dispatchTouchEvent()
来做到这一点。这有点麻烦,但可行。如果需要,我可以分享代码。