2012-08-07 102 views
6

我有用于检测扫视通常的姿势检测器弗林实现方式中,它是一个SurfaceViewAndroid上帆布

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方法实现一跳?

似乎有很多关于检测投掷的问题,我的问题是在实施它。

回答

4

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

检查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)。因为这个投掷看起来更像是一个动态的手势,所以你可以决定投掷是指一个手势运动,并将一个放大因子应用到dx和dy上,这样当用户滚动时,他们会得到一个精确的动作,但是在投掷时,实际运动得到放大。

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

(不同的事情会动画的结果,我想这将取决于其他事情)。

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

  • 用户滚动轻声道:运动是DX,DY。翻译(DX,DY)。
  • 用户甩:
    真实运动:DX =(e2.getX() - e1.getX()DY =(e2.getY() - e1.getY() 弗林因子:(自定义实现) 。 修改议案:dxModified = DX * velocityX * F dyModified = DY * velocityY * F 最后:。翻译(dxModified,dyModified)

    希望这有助于在一定程度上

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