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 года, надеюсь, это поможет кому-то когда-нибудь. В любом случае, было бы неплохо узнать об окончательной реализации!