Fling реализация на андроид холсте

У меня есть обычный детектор жестов для обнаружения броска, это атрибут экземпляра SurfaceView

GestureDetector flingDetector = new GestureDetector(getContext(),new SimpleOnGestureListener() {

        @Override
        public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
                    // Fling implementation
            return true;
        }
});

Я рисую много сложных вещей на canvas и у меня есть translate(dx,dy) метод, который я использую с onScroll,

Поэтому мой вопрос заключается в том, как я могу реализовать fling, используя translate метод?

Кажется, есть много вопросов по обнаружению броска, мой вопрос по его реализации.

1 ответ

Я не уверен, что это ответит на ваш вопрос, я попробую.

Проверьте http://developer.android.com/reference/android/view/MotionEvent.html для MotionEvent.

Вы можете использовать два события, полученные как e1 и e2 в методе onFling, и рассчитать разности координат с помощью e1.getX(), e2.getX(), e1.getY(), e2.getY().... При этом у вас есть dx и dy для использования с translate(dx,dy).

Поскольку бросание кажется более динамичным жестом, вы можете решить, что бросание означает более полное движение, и применить коэффициент усиления к dx и dy, чтобы при прокрутке пользователь получал точное движение, а при броске - фактическое движение усиливается.

Если этот фактор зависит от скорости, у вас есть пользовательский ответ для каждого пользовательского ввода.

(Анимация результата будет другой, что, я думаю, будет зависеть от других вещей).

Пример, который я мог бы попробовать, если бы это был я:

  • Пользователь плавно прокручивает: Движение - dx,dy. Перевести (Dx, Dy).
  • Пользователь бросает:
    Реальное движение: dx=(e2.getX()-e1.getX(). Dy = (e2.getY()-e1.getY(). Коэффициент бегства: (пользовательская реализация). Измененное движение: dxModified = dx* speedX*F. dyModified = dy* speedY*F. Наконец: перевод (dxModified,dyModified)

    Надеюсь, это поможет в некоторой степени.

    Изменить: я не понял, этот вопрос был с 2012 года, надеюсь, это поможет кому-то когда-нибудь. В любом случае, было бы неплохо узнать об окончательной реализации!

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