在Android画布上执行实现

Gau*_*tam 6 android gesture onfling android-canvas

我有通常的手势检测器来检测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;
        }
});
Run Code Online (Sandbox Code Playgroud)

我正在绘制很多复杂的东西canvas,我有一个translate(dx,dy) 与之配合使用的方法onScroll.

所以我的问题是如何使用该translate方法实现fling ?

关于检测fling似乎有很多问题,我的问题是实现它.

use*_*353 5

我不确定这会回答你的问题,我会试一试。

检查http://developer.android.com/reference/android/view/MotionEvent.html的 MotionEvent。

您可以在 onFling 方法上使用作为 e1 和 e2 接收的两个事件,并使用 e1.getX()、e2.getX()、e1.getY()、e2.getY()...计算坐标差。你可以将 dx 和 dy 与 translate(dx,dy) 一起使用。

由于fling 看起来更像是一种动态手势,您可以确定fling 意味着更大的运动,并对dx 和dy 应用放大系数,以便当用户滚动时,他们获得精确的运动,但在fling 时,实际运动被放大。

如果此因素取决于速度,则您对每个用户输入都有一个自定义响应。

(另一件事是动画结果,我想这将取决于其他事情)。

如果是我,我可能会尝试的一个例子:

  • 用户轻轻滚动:运动是 dx,dy。翻译(dx,dy)。
  • 用户甩动:
    真实运动:dx=(e2.getX()-e1.getX()。dy = (e2.getY()-e1.getY()。甩动因子:(自定义实现)。修改后的运动:dxModified = dx *velocityX*F.dyModified = dy*velocityY*F. 最后:translate (dxModified,dyModified)

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

    编辑:我没有意识到这个问题是从 2012 年开始的,希望这会对某人有所帮助。无论如何,知道最终实现会很好!