我有一个自定义的GridView子视图,我用它来显示一些自定义的3D动画/效果.我这样做的方法是重写dispatchDraw().
理想情况下,我想知道绘制时滚动的当前速度.目前,我使用GestureDetector.OnGestureListener和捕获onScroll事件,这非常有效,除了它不会将flings检测为滚动事件.
我想到的一个想法是捕获onFling事件,然后自己进行未来的处理,以便在以后检测速度.
有没有更好的方法来实现这一目标?有什么简单的方法可以查询GridView的当前滚动速度吗?
谢谢.
好吧,我希望你现在已经得到答案,但我仍然会发布一个,以供将来使用......
您需要OnScrollListener自己重写并计算速度。从运动学来看:Distance/Time = Speed
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;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2181 次 |
| 最近记录: |