我有一个从 GridView 子类化的自定义 View ,我使用它来显示一些自定义 3D 动画/效果。我这样做的方法是重写 dispatchDraw()
。
理想情况下,我想知道绘制时滚动的当前速度。目前,我使用 GestureDetector.OnGestureListener
并捕获 onScroll
事件,这工作得很好,只是它不会将 flings 检测为滚动事件。
我想到的一个想法是捕获 onFling
事件,然后自行进行后续处理,以便稍后检测速度。
有没有更好的方法来实现这个目标?有什么简单的方法可以查询 GridView 当前的滚动速度?
谢谢。
最佳答案
好吧,我希望你现在已经得到答案了,但我还是会发布一个,以供将来使用......
您需要覆盖 OnScrollListener
并自行计算速度。
来自运动学:距离/时间 = 速度
private class SpeedDetectorOnScrollListener implements OnScrollListener {
private long timeStamp;
private int prevFirstVisibleItem;
private int scrollingSpeed;
public SpeedDetectorOnScrollListener () {
timeStamp = System.currentTimeMillis();
lastFirstVisibleItem = 0;
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
long lastTime = System.currentTimeMillis();
timeStamp = lastTime;
lastFirstVisibleItem = firstVisibleItem;
scrollingSpeed = (firstVisibleItem - lastFirstVisibleItem)/(lastTime-timeStamp)
}
public int getSpeed()
{
return scrollingSpeed;
}
}
关于android - 检测 GridView 滚动速度 - Android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3307390/