Конкуренция с обработчиками onTouchEvent?
Я понимаю, что Views может решить самостоятельно обрабатывать MotionEvent, возвращая true в onTouchEvent
когда проходит ACTION_DOWN
событие. Если они вернутся 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
, Я предполагаю, потому что это не нашло подходящего ребенка, чтобы передать Взгляды.
1 ответ
Для записи я закончил тем, что сделал это, переопределив ViewGroup.dispatchTouchEvent()
, Это немного громоздко, но выполнимо. Я могу поделиться кодом, если это необходимо.