在Android画布上执行实现

时间:2012-08-07 05:21:25

标签: android android-canvas gesture onfling

我有通常的手势检测器来检测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一起使用。

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

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

1 个答案:

答案 0 :(得分:4)

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

检查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,这样当用户滚动时,它们会得到精确的运动,但是在投掷时,实际的运动被放大了。

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

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

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

  • 用户轻轻滚动:移动是dx,dy。翻译(DX,DY)。
  • 用户flings:
    真实动作:dx =(e2.getX() - e1.getX()。dy =(e2.getY() - e1.getY()。 投掷因素:(自定义实施)。 修改后的动作:dxModified = dx * velocityX * F. dyModified = dy * velocityY * F. 最后:翻译(dxModified,dyModified)

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

    编辑:我没有意识到这个问题是从2012年开始的,希望这会对某人有所帮助。无论如何,了解最终的实施情况会很高兴。