2012-08-10 6 views
7

Ich brauche eine Animation mit zwei Interpolatoren, zum Beispiel die Animation haben 1 Sekunden Dauer für 0 Sekunden bis 0,5 Sekunden verwendet beschleunigen Interpolator und für 0,5 bis 1 Sekunden verwenden Bounce-Interpolator.Animation mit zwei Interpolatoren

haben Sie eine Möglichkeit, dies zu tun? so etwas wie dieses

+0

Für benutzerdefinierte Interpolatoren in 3 einfachen Schritten .. http://stackoverflow.com/a/39125948/2219600 – amalBit

Antwort

10

Sie können versuchen:

<?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> 

Diese verwendet zwei interpolators, die erste ist ein Bounce, das eine Ansicht bewegt, um eine zweite zu halbieren. Und die zweite interpolator ist eine Beschleunigung interpolator, die für eine Dauer von einer Sekunde eine Ansicht nach rechts bewegt, nachdem eine halbe Sekunde vergangen ist. Daher mit einer Gesamtanimationszeit von 1 Sekunde. Ich hoffe, das hilft.

+0

hier haben zwei Interpolatoren, aber haben zu zwei Animationen, es funktioniert, aber wenn es nur eine Animation war, könnte es ein wenig besser sein – ademar111190

10

ich mit einer nur Animation:

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

und die CustomInterpolator Klasse:

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

Hallo im Beispiel ein Fehler für die anonyme Klasse ist.

seine nicht so: pointerAnimation.setInterpolator(new CustomInterpolator(500));

es ist dies: pointerAnimation.setInterpolator(new CustomBounceInterpolator(500));

vielen Dank mir trotzdem hat mir sehr geholfen

+0

Vielen Dank. Ich habe es repariert. – ademar111190