Scroller类中的getDuration方法获取滚动的持续时间。
我们可以使用这种方法来获取投掷的持续时间吗?或者还有其他方法吗?
public final int getDuration ()
Returns how long the scroll event will take, in milliseconds.
Returns
The duration of the scroll in milliseconds.
答案 0 :(得分:1)
我们可以使用这种方法来获取投掷的持续时间吗?或者是 还有其他办法吗?
由于持续时间将在投掷开始时计算,因此在投掷期间使用该方法获得的持续时间无疑是投注的持续时间。
BTW,此持续时间取决于投掷的初始速度。以下是Scroller的代码片段,您可以看到它是如何计算的: /**
* Returns how long the scroll event will take, in milliseconds.
*
* @return The duration of the scroll in milliseconds.
*/
public final int getDuration() {
return mDuration;
}
// Code in the fling() method which will be called based on a fling gesture
mDuration = getSplineFlingDuration(velocity);
// The essential method.
private int getSplineFlingDuration(float velocity) {
final double l = getSplineDeceleration(velocity);
final double decelMinusOne = DECELERATION_RATE - 1.0;
return (int) (1000.0 * Math.exp(l / decelMinusOne));
}
private double getSplineDeceleration(float velocity) {
return Math.log(INFLEXION * Math.abs(velocity) / (mFlingFriction * mPhysicalCoeff));
}
<强>更新强>
如何在投掷开始时计算持续时间?
&#34;在开始时#34;表示当Scroller的用户检测到一个fling手势时。如果他想使用Scroller的fling函数,他应该使用适当的参数调用以下方法:
public void fling(int startX, int startY, int velocityX, int velocityY,
int minX, int maxX, int minY, int maxY)
持续时间在上方法内计算。它首先用velocityX和velocityY计算总速度,然后将速度传递给getSplineFlingDuration()方法以获得一个投掷持续时间。我最初粘贴该方法的代码,我认为这并不难你明白了。