Android: обнаружение жестов броска

В моем приложении я пытаюсь получить событие броска на представлении (a ScrollView быть точным, но попробованный LinearLayout также).

Путем установки точек останова I видят что MotionEvents произойдите правильно до такой степени, когда onFling() должен стрелять.

Поток события следующие:

  1. Представление onTouchEvent
  2. OnGestureListener's onDown
  3. OnGestureListener's onShowPress
  4. OnGestureListener's onLongPress

Я в замешательстве о том, как продолжить пытаться отладить что-то как этот, и поиск Google не поднимается очень. Какие-либо указатели?

Я также присоединяю соответствующее представление, которое должно обработать жесты:

import android.content.Context;
import android.content.Intent;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.widget.ScrollView;

public class GestureScrollView extends ScrollView {
    private static int MAJOR_MOVE = 60;
    private GestureDetector gd;

    public GestureScrollView(final Context context) {
        super(context);
        gd = new GestureDetector(context,
                new GestureDetector.OnGestureListener() {

                    @Override
                    public boolean onSingleTapUp(MotionEvent e) {
                        // TODO Auto-generated method stub
                        return false;
                    }

                    @Override
                    public void onShowPress(MotionEvent e) {
                        // TODO Auto-generated method stub

                    }

                    @Override
                    public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
                            float distanceY) {
                        // TODO Auto-generated method stub
                        return false;
                    }

                    @Override
                    public void onLongPress(MotionEvent e) {
                        // TODO Auto-generated method stub

                    }

                    @Override
                    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
                            float velocityY) {
                        int dx = (int) (e2.getX() - e1.getX());
                        if (Math.abs(dx) > MAJOR_MOVE
                                && Math.abs(velocityX) > Math.abs(velocityY)) {
                            if (velocityX < 0) {
                                Intent intent = new Intent(context, Main.class);
                                context.startActivity(intent);
                            }
                        }
                        return false;
                    }

                    @Override
                    public boolean onDown(MotionEvent e) {
                        // TODO Auto-generated method stub
                        return false;
                    }
                });
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        return gd.onTouchEvent(event);
    }
}
11
задан Don Chakkappan 21 May 2015 в 11:41
поделиться

1 ответ

Возьмите MotionEvent из Activity, а не из вашего View. Когда ваш детектор жестов основан на MotionEvent, исходящем от Activity, вы получите событие onFling. Итак, вам нужно переместить onTouchEvent () из GestureScrollView в класс Activity. С уважением!

2
ответ дан 3 December 2019 в 12:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: