2012-08-10 17 views
7

我需要用兩個插補器進行動畫,例如動畫有1秒的持續時間爲0秒到0.5秒,使用加速插補和0.5到1秒的跳動插補器。帶兩個插補器的動畫

有辦法做到這一點?

+0

對於自定義插值在3個簡單步驟.. http://stackoverflow.com/a/39125948/2219600 – amalBit 2016-08-24 14:40:02

回答

10

你可以嘗試這樣的事情:

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

此使用兩個interpolators,第一個是移動的減半第二景色的反彈。第二個interpolator是加速interpolator,在秒數減半後,將視圖向右移動一秒。因此總動畫時間爲1秒。希望有所幫助。

+0

這裏有兩個內插器,但有兩個動畫,這是有效的,但如果它只是一個動畫,它可能會好一點 – ademar111190 2012-08-13 13:22:50

10

我做一個只有動畫:

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

和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

你好的例子,只有一個匿名類的故障。

它不是這樣的:pointerAnimation.setInterpolator(new CustomInterpolator(500));

它是這樣的:pointerAnimation.setInterpolator(new CustomBounceInterpolator(500));

許多還是謝謝你幫了我很多

+0

謝謝。我修好了它。 – ademar111190 2016-06-22 14:07:43