2012-05-16 27 views
22

Chciałbym przejść płynnie do następnego położenia przewijania w moim widoku niestandardowym (na przycisku lub zdarzenia). Jak to wdrożyć? Przede wszystkim nie widzę klasy animacji przewijania (tylko alfa, obracanie, skalowanie i tłumaczenie). Po drugie, mając klasę animacji, nie widzę sekwencji iteracyjnej (powiedzmy, aby przewijać prawa do pikseli równej dowolnej pozycji) tylko te bezwzględne (tj. Aby animować z jednej wartości stałej do drugiej).Jak animować pozycję przewijania? Jak płynnie przewijać?

Odpowiedz

35

Zakładając, że używasz ScrollView, czy funkcja smoothScrollTo (...) działa dla Ciebie?

http://developer.android.com/reference/android/widget/ScrollView.html#smoothScrollTo%28int,%20int%29

+0

powinienem używać 'ScrollView'? Używam teraz 'MyClass extends View'. –

+0

Myślę, że to zależy od tego, co robisz, jeśli ScrollView działa dla Ciebie, a następnie zdecydowanie go używać. –

+0

Próbowałem rozszerzania 'ScrollView', ale stwierdziłem, że' onScrollChanged() 'nie wywołał w przypadku. Potrzebuję tej metody do wywołania, ponieważ obliczyłem w niej pewne parametry. To znaczy. 'smoothScroll' nie działa dla mnie. –

0

Zobacz przykładowy kod view_cache_demo, aby zobaczyć, jak zrobić animowany przewijanie. Działa w 2D, buforuje złożony rysunek, a także obsługuje gesty rzucania, ale można uprościć wszystko, jeśli jest to konieczne.

1

Animowanie przewijania odbywa się poprzez połączenie za pomocą Scroller/OverScroller (aby obliczyć po raz interpolowane wartości swoich przesunięć przewijania), GestureDetectors (aby uruchomić obiekt scroller) oraz metodę widokiem onComputeScroll (która niejawnie jest twoją pętlą animacji).

Oficjalne dokumenty dla Androida mają teraz szczegółowy samouczek dotyczący właśnie tego tematu. http://developer.android.com/training/gestures/scroll.html

22

Korzystanie ObjectAnimator, to jest próbka do przewijania do góry:

public void scroolToTop() { 
      int x = 0; 
      int y = 0; 
    ObjectAnimator xTranslate = ObjectAnimator.ofInt(mScrollView, "scrollX", x); 
    ObjectAnimator yTranslate = ObjectAnimator.ofInt(mScrollView, "scrollY", y); 

    AnimatorSet animators = new AnimatorSet(); 
    animators.setDuration(1000L); 
    animators.playTogether(xTranslate, yTranslate); 
    animators.addListener(new AnimatorListener() { 

     @Override 
     public void onAnimationStart(Animator arg0) { 
      // TODO Auto-generated method stub 
     } 

     @Override 
     public void onAnimationRepeat(Animator arg0) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void onAnimationEnd(Animator arg0) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void onAnimationCancel(Animator arg0) { 
      // TODO Auto-generated method stub 

     } 
    }); 
    animators.start(); 
} 
+0

bardzo dobrze, dziękuje bardzo dziękuję. – Karoly

+0

Działa doskonale! – ventura8

+0

Płynna animacja działa jak urok! –

Powiązane problemy