0

onTouchEventイベントが渡されたときにtrue を返すことにより、ビューが MotionEvent 自体を処理することを決定できることを理解してい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. ビューを転送する適切な子が見つからなかったためだと思います。

4

1 に答える 1