2012-08-10 11 views
7

Necesito hacer una animación con dos interpoladores, por ejemplo, la animación tiene 1 segundo de duración durante 0 segundos a 0.5 segundos usa acelerador interpolador y durante 0.5 a 1 segundo utiliza el interpolador de rebote.animación con dos interpoladores

tienen una forma de hacer esto?

+0

Para interpoladores personalizados en 3 pasos simples .. http://stackoverflow.com/a/39125948/2219600 – amalBit

Respuesta

10

Usted puede intentar algo como esto:

<?xml version="1.0" encoding="utf-8"?> 
<set 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shareInterpolator="false"> 

<translate 
    android:interpolator="@android:anim/bounce_interpolator" 
    android:fromYDelta="0%p" 
    android:toYDelta="100" 
    android:duration="500"/> 

<translate 
    android:interpolator = "@android:anim/accelerate_interpolator" 
    android:fromYDelta="100" 
    android:toYDelta="100" 
    android:fromXDelta="0" 
    android:toXDelta="100" 
    android:startOffset="500" 
    android:duration="1000"/> 

</set> 

Este utiliza dos interpolators, el primero es un rebote que se mueve una vista para reducir a la mitad de un segundo. Y el segundo interpolator es un acelerador interpolator que mueve una vista hacia la derecha después de haber pasado un segundo, durante un segundo. Por lo tanto, con un tiempo total de animación de 1 segundo. Espero que ayude.

+0

aquí tiene dos interpoladores pero tiene también dos animaciones, funciona, pero si fuera solo una animación podría ser un poco mejor – ademar111190

10

que ver con una única animación:

Animation animation = new TranslateAnimation(0,100,0,0); 
animation.setDuration(1000); 
pointerAnimation.setInterpolator(new CustomBounceInterpolator(500)); 
view.startAnimation(animation); 

y de la Clase CustomInterpolator:

public class CustomBounceInterpolator implements Interpolator { 

private float timeDivider; 
private AccelerateInterpolator a; 
private BounceInterpolator b; 

public CustomBounceInterpolator(float timeDivider) { 
    a = new AccelerateInterpolator(); 
    b = new BounceInterpolator(); 
    this.timeDivider = timeDivider; 
} 

public float getInterpolation(float t) { 
    if (t < timeDivider) 
     return a.getInterpolation(t); 
    else 
     return b.getInterpolation(t); 
} 

} 
2

Hola en el ejemplo hay un fallo de la clase anónima.

no es esto: pointerAnimation.setInterpolator(new CustomInterpolator(500));

es esta: pointerAnimation.setInterpolator(new CustomBounceInterpolator(500));

muchas gracias de todos modos me ayudaron mucho

+0

Gracias. Lo arreglé. – ademar111190

Cuestiones relacionadas