onTouchEvent
我了解 Views 可以通过在传递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
. 我猜是因为它没有找到合适的孩子来转发意见。