Android画布上的抛掷实现

7

我有一个常规的手势检测器,用于检测快速滑动,它是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功能。

我的问题是如何使用translate方法来实现快速滑动(fling)?

似乎有很多关于检测快速滑动的问题,但我的问题是如何实现它。

1个回答

5
我不确定这是否能回答您的问题,但我会尝试一下。
请查看MotionEvent的文档http://developer.android.com/reference/android/view/MotionEvent.html。在onFling方法中,您可以使用接收到的两个事件作为e1和e2,并使用e1.getX(),e2.getX(),e1.getY(),e2.getY()计算坐标差异...。这样,您就可以获得dx和dy并将其与translate(dx,dy)一起使用。
由于快速滑动似乎是一种动态手势,因此您可以决定fling表示更广泛的移动,并对dx和dy应用放大系数,以便当用户滚动时,他们可以得到精确的移动,但在fling时,实际移动会被放大。
如果该系数取决于速度,则对于每个用户输入都有自定义响应。
(另一件事是动画结果,这可能取决于其他事情)。
如果是我的话,我可能会尝试以下示例:
  • 用户轻轻滚动:移动是dx,dy。Translate(dx,dy)。
  • 用户flings:
    实际运动:dx=(e2.getX()-e1.getX())。dy = (e2.getY()-e1.getY())。 Fling系数:(自定义实现)。 修改后的运动:dxModified = dx * velocityX * F。dyModified = dy * velocityY * F。 最后:translate(dxModified,dyModified)

    希望这在某种程度上有所帮助。

    编辑:我没有意识到这个问题是来自2012年的,但希望这能帮助某些人。无论如何,了解最终实现情况将是很好的事情!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接