2012-08-10 14 views
7

Potrzebuję animacji z dwoma interpolatorami, na przykład animacja ma 1 sekundę trwania przez 0 sekund do 0,5 sekundy używa interpolatora przyspieszającego ans przez 0,5 do 1 sekundy używa interpolatora odbitego.animacja z dwoma interpolatorami

Czy masz sposób to zrobić?

+0

Dla niestandardowych interpolatorami w 3 prostych krokach .. http://stackoverflow.com/a/39125948/2219600 – amalBit

Odpowiedz

10

Można spróbować czegoś takiego:

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

ta wykorzystuje dwa interpolators, z których pierwszy jest bounce, który porusza się widok na drugą połowę. Drugim numerem interpolator jest przyspieszanie interpolator, które przesuwa widok w prawo po przejściu połowy o sekundę na czas jednej sekundy. Dlatego przy całkowitym czasie animacji wynoszącym 1 sekundę. Nadzieja, która pomaga.

+0

mają tutaj dwa interpolatory, ale mają za dużo animacji, to działa, ale jeśli to tylko jedna animacja, to może być trochę lepiej – ademar111190

10

zrobić z jednym tylko animacji:

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

a klasa 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

Witam w tym przykładzie nie jest porażką dla anonimowego klasy.

jego nie tak: pointerAnimation.setInterpolator(new CustomInterpolator(500));

to jest to: pointerAnimation.setInterpolator(new CustomBounceInterpolator(500));

wielkie dzięki i tak bardzo mi pomogło

+0

Dziękuję. Naprawiłem to. – ademar111190