Ich verstehe Views können entscheiden, MotionEvent selbst zu behandeln, indem Sie in onTouchEvent
True zurückgeben, wenn ein ACTION_DOWN
Ereignis übergeben wird. Wenn sie true
zurückgeben, erhalten sie alle folgenden MOVE/UP/CANCEL
Ereignisse. Das funktioniert gut.Konkurrierende onTouchEvent-Handler?
Was ich tun möchte, ist diese Entscheidung auf das Ereignis ACTION_MOVE
zu verschieben. Ich habe ein Kind ein Viewgroup enthält, und je nachdem, ob horizontal oder vertikal scrollen, ich möchte das Viewgroup oder Kind zur Handhabung des MotionEvents
So etwas verantwortlich sein:
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;
}
}
Ist das möglich? Momentan erhält nur die ViewGroup die MOVE/UP/CANCEL
. Ich schätze, weil es kein geeignetes Kind gefunden hat, um die Ansichten weiterzuleiten.