代码之家  ›  专栏  ›  技术社区  ›  sttwister

检测GridView滚动速度-Android

  •  10
  • sttwister  · 技术社区  · 14 年前

    我有一个自定义视图子类从网格视图,我使用以显示一些自定义三维动画/效果。我这样做的方式是 dispatchDraw() .

    理想情况下,我想知道绘制时滚动的当前速度。目前,我使用 GestureDetector.OnGestureListener 捕捉 onScroll 事件和这是非常好的工作,除了它也没有检测到Fling作为滚动事件。

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

    有没有更好的方法来实现这个目标?有什么简单的方法可以查询当前的网格视图滚动速度吗?

    谢谢。

    1 回复  |  直到 12 年前
        1
  •  1
  •   Rotemmiz    12 年前

    好吧,我希望你现在得到你的答案,但我还是会发一个,以备将来使用…

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