检测GridView滚动速度 - Android

时间:2010-07-22 09:25:03

标签: android

我有一个自定义的GridView子视图,我用它来显示一些自定义的3D动画/效果。我这样做的方法是覆盖dispatchDraw()

理想情况下,我想知道当前绘制时滚动的当前速度。目前,我使用GestureDetector.OnGestureListener并捕获onScroll个事件,这非常有效,只是它不会将flings检测为滚动事件。

我想到的一个想法是捕获onFling个事件,然后自己进行后续处理,以便在以后检测速度。

有没有更好的方法来实现这一目标?查询GridView的当前滚动速度的任何简单方法?

感谢。

1 个答案:

答案 0 :(得分:1)

嗯,我希望你现在得到你的答案,但我仍然会发一个,以备将来使用......

您需要覆盖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;
     }
 }