Передать событие swipe в кнопке родительскому элементу (и сохранить событие onClick) - PullRequest
0 голосов
/ 17 января 2019

У меня есть 3x3 TableLayout, с кнопкой в ​​каждой ячейке. TableLayout находится на ViewFlipper, поэтому, когда в ViewFlipper обнаружен жест смахивания, пользователю предоставляется другое представление (все добавляется программно, кроме ViewFlipper).

Проблема заключается в том, что, если провести пальцем по кнопке, происходит событие onClick, и в ViewFlipper не выполняется никакого пролистывания. Я хочу передать событие салфетки в ViewFlipper, если это салфетка, и поддерживать событие onClick на кнопке, если это щелчок. И, если это событие смахивания, не нажимайте кнопку.

Попробовал это:

btn.setOnTouchListener(new View.OnTouchListener() {
                    @Override
                    public boolean onTouch(View v, MotionEvent event) {
                        if(event.getAction()==MotionEvent.ACTION_MOVE){

                            vFlipper.onTouchEvent(event);
                            return false;
                        }
                        return false;
                    }

                });

Но OnTouch не запускается в ViewFlipper. Это OnTouchListener на ViewFlipper:

vFlipper.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            Log.i("TAG", "Intercepted");
            int action = event.getActionMasked();
            switch (action){
                case MotionEvent.ACTION_DOWN:
                    startX = event.getX();
                    break;
                case MotionEvent.ACTION_UP:
                    float endX = event.getX();
                    float endY = event.getY();

                    //swipe right
                    if (startX < endX) {
                        vFlipper.showNext();
                    }

                    //swipe left
                    if (startX > endX) {
                        vFlipper.showPrevious();
                    }

                    break;
            }
            return true;
        }
    });

Спасибо.

...