2012-05-16 13 views
22

Deseo moverme suavemente a la siguiente posición de desplazamiento en mi vista personalizada (al presionar un botón o evento). ¿Cómo implementar esto? En primer lugar, no puedo ver la clase de animación de desplazamiento (solo alfa, rotar, escalar y traducir). En segundo lugar, al tener una clase de animación, no puedo ver una iterativa (por ejemplo, desplazar los derechos de 100 píxeles en cualquier posición que tengamos) solo absoluta (es decir, para animar de un valor constante a otro).Cómo animar la posición de desplazamiento? Cómo desplazarse sin problemas?

Respuesta

35

Suponiendo que está utilizando un ScrollView, ¿funciona smoothScrollTo (...) para usted?

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

+0

¿Debo usar 'ScrollView'? Estoy usando 'MyClass extends View' ahora. –

+0

Creo que depende de lo que esté haciendo, si ScrollView funciona para usted, entonces definitivamente lo usa. –

+0

He intentado extender 'ScrollView' pero encontré que' onScrollChanged() 'no llama en el caso. Necesito llamar a este método ya que calculo algunos parámetros en él. Es decir. 'smoothScroll' no funciona para mí. –

0

ver el código view_cache_demo muestra para ver cómo hacer el desplazamiento de animación. Funciona en 2D, dibuja complejos en caché y también maneja gestos de fling, pero puedes simplificar todo lo que sea necesario.

1

Animación de desplazamiento se realiza a través de una combinación del uso de desplazador/OverScroller (para calcular el tiempo de los valores interpolados de sus compensaciones de desplazamiento), GestureDetectors (para iniciar el objeto rueda de desplazamiento) y el método onComputeScroll de una vista (que implícitamente es tu ciclo de animación).

Los documentos oficiales de Android ahora tienen un tutorial detallado sobre precisamente este tema. http://developer.android.com/training/gestures/scroll.html

22

Usando ObjectAnimator, esta es una muestra para desplazarse hacia arriba:

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

muy bueno, funciona muchas gracias. – Karoly

+0

¡Funciona excelente! – ventura8

+0

¡La animación suave funciona como un encanto! –

Cuestiones relacionadas