检测Fling距离android

gau*_*ain 7 android

我正在开发一个应用程序,它要求我手动处理fling过程而不是将其提供给框架.我想要实现的是基本上计算listview在收到fling动作时移动的像素数量.由于滚动方法已经提供了三角形的距离,我已经轻松处理了它.但是有没有办法获得投掷距离,因为在超级方法中只传递速度参数.

注意 - 我必须根据投掷距离移动另一个视图,所以我需要同时获取它,就像onScroll提供它一样.谢谢.

Adi*_*yev 4

已经过去3年了,但还没有答案。我找到了一些解决方法来实现它。

实际上这是一种高级主题,因为有很多细微差别,但基本上你可以参考 Android 源代码(特别是 OverScroller 类)并使用此方法。您需要将其复制到您的类中并使用它。

 private double getSplineFlingDistance(int velocity) {
     final double l = getSplineDeceleration(velocity);
     final double decelMinusOne = DECELERATION_RATE - 1.0;
     return mFlingFriction * PHYSICAL_COEF * Math.exp(DECELERATION_RATE / decelMinusOne * l);
 }
Run Code Online (Sandbox Code Playgroud)

其他方法和值可以从同一个类中获取。源代码链接:https://android.googlesource.com/platform/frameworks/base/+/jb-release/core/java/android/widget/OverScroller.java

请记住,在某些设备中,该值可能会有所不同(不会太大)。一些供应商根据自己的要求和硬件更改公式以使其更加平滑。