我有一个从GridView子类的自定义视图,我使用它来显示一些自定义的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; } }