Определить скорость прокрутки GridView - Android

У меня есть пользовательский вид подкласса из GridView, который я использую для отображения некоторой пользовательской 3D-анимации/эффекта. Способ, которым я это делаю, заключается в переопределении dispatchDraw().

В идеале, я хочу знать текущую скорость прокрутки при выполнении ничьей. В настоящее время я использую GestureDetector.OnGestureListener и захватываю onScroll события, и это работает очень хорошо, за исключением того, что он также не обнаруживает срабатывания в качестве прокрутки событий.

Одна идея, которая приходит на ум, состоит в том, чтобы захватить события onFling, а затем сделать будущую обработку самостоятельно, чтобы определить скорость в более позднее время.

Есть ли лучший способ добиться этого? Любой простой способ запросить текущую скорость прокрутки GridView?

Спасибо.

Ответ 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;
     }
 }