android - 检测 GridView 滚动速度 - Android

标签 android

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

关于android - 检测 GridView 滚动速度 - Android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3307390/

相关文章:

android - 查看分页器2/回收器 View 崩溃的不一致

javascript - 如何处理 PhoneGap sql 存储结果?

android - 在 android 上禁用 setMovementMethod(LinkMovementMethod.getInstance())

android - getInputStream 抛出异常

android - 为什么所有属性都有前缀?

java - 如何让RecyclerView在每次将项目添加到列表时不滚动到底部

java - 每个 CollectionGroup 中的最新文档

java - 如何强制将应用程序附加到android market?

android - 引用 .jar 库时无法解决父类(super class)错误

android - Android 中的可扩展 ListView