我有通常的手势检测器来检测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似乎有很多问题,我的问题是实现它。
答案 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,这样当用户滚动时,它们会得到精确的运动,但是在投掷时,实际的运动被放大了。
如果此因素取决于速度,则每个用户输入都有自定义响应。
(另一件事是动画结果,我想这取决于其他事情。)
如果是我,我可能会尝试一个例子:
用户flings:
真实动作:dx =(e2.getX() - e1.getX()。dy =(e2.getY() - e1.getY()。
投掷因素:(自定义实施)。
修改后的动作:dxModified = dx * velocityX * F. dyModified = dy * velocityY * F.
最后:翻译(dxModified,dyModified)
希望这在某种程度上有所帮助。
编辑:我没有意识到这个问题是从2012年开始的,希望这会对某人有所帮助。无论如何,了解最终的实施情况会很高兴。