SimpleOnGestureListener onFling速度和方向问题

4
我在这个Android应用程序中实现了SimpleOnGestureListener,这是基本的实现方式,一切都按照预期工作:
该类实现了OnTouchListener,并将其设置为正确视图的触摸监听器,在触摸事件上,我调用了我的SimpleOnGestureListener实例。
@Override
public boolean onTouch(View v, MotionEvent event) {
   return gestureDetector.onTouchEvent(event);
}

在我的 fling 回调函数中,我记录了 velocityY(应用正在使用一些向下滑动的手势)。
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY){
   Log.d(TAG, "velocityY = " + velocityY);

  ... some code ...
}

该方法被调用后,我可以在我的日志上看到值。
问题在于对于Nexus 4和Nexus 10来说,向下滑动的velocityY是正值,而对于Nexus 7来说,它是负值。
我知道有人会建议使用 e2.getY - e1.getY(或原始值),但它们并不完全可靠,因为愚蠢的用户可能(也会)将视图向下拖动,然后将其向上扔,但差异仍将是正值。
所以问题是:有没有一种方法可以查询系统这个方向的内容?

你真的确定吗?Velocity 直接从 VelocityTracker 中获取,因此如果 VT 返回不同的值,它将会影响任何直接或间接使用 VT 的应用程序。 - pskink
好的,正如您所看到的,这是一个非常简单和直接的测试,是的,N7上的每个向下滑动都会给我负值。 - Budius
1个回答

1

我找到了问题的原因,并很快会发布一个新问题,可能会有解决方法。

问题在于我使用onScroll()来使用View.offsetTopAndBottom将视图上下移动屏幕,随着位置的变化,VelocityTracker变得完全疯狂。

我会继续学习,看看是否可以尝试调整VT或者自己编写解决方法,但是,是的,这就是为什么!


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