2010-07-22 146 views
10

我有一个自GridView的自定义视图子类,我用它来显示一些自定义3D动画/效果。我这样做的方式是覆盖dispatchDraw()检测GridView滚动速度 - Android

理想情况下,我想知道当进行绘制时滚动的当前速度。目前,我使用GestureDetector.OnGestureListener和捕获onScroll事件,这很好,除了它不检测滚动事件作为滚动事件。

想到的一个想法是捕获onFling事件,然后自己做未来的处理,以便稍后检测速度。

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

谢谢。

+0

大问题,你有没有解决这个问题? – Noah 2011-03-09 13:47:58

回答

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; 
    } 
}