Конкуренция с обработчиками 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(), Это немного громоздко, но выполнимо. Я могу поделиться кодом, если это необходимо.

Другие вопросы по тегам