2010-07-22 2 views
10

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

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

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

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

Спасибо.

+0

Большие вопросы, вы когда-нибудь решить эту проблему? – Noah

ответ

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; 
    } 
} 
Смежные вопросы