2013-01-07 70 views
2

我期望按鈕向下移動200px(從0,0到0,200) 和1秒後,再次向上移動到原始位置。AnimationSet中的TranslateAnimation不是從0開始的,爲什麼?

但下面的代碼就像從(0,200)開始(0,400)如果我把一個動畫到AnimationSet,而不是從(0,0)

啓動,它工作正常。但是,如果我在AnimationSet中放置兩個以上的動畫,這很奇怪。

有什麼問題?

public class MainActivity extends Activity { 
    private static final int DISTANCE = 200; 
    private static final long DURATION = 1000; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Button btn = (Button) findViewById(R.id.button1); 

     TranslateAnimation aniMove = new TranslateAnimation(0, 0, 0, DISTANCE); 
     aniMove.setDuration(DURATION); 

     TranslateAnimation aniMoveBack = new TranslateAnimation(0, 0, DISTANCE, 0); 
     aniMoveBack.setDuration(DURATION); 
     aniMoveBack.setStartOffset(DURATION + 1000); 

     AnimationSet aniSet = new AnimationSet(true); 
     aniSet.addAnimation(aniMove); 
     aniSet.addAnimation(aniMoveBack); 
     btn.startAnimation(aniSet); 
    } 
} 

下面是XML

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:padding="0dp" > 

    <Button 
     android:id="@+id/button1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Button" /> 
</LinearLayout> 

回答

1

AnimationSet代表一組動畫的應進行再現在一起。將每個單獨的動畫的變換組合在一起形成一個單一的變換,即 。

AnimationSet不能用於這種方式,它可以結合多動畫的特點。使用AnimationSet,您可以同時執行alpha和旋轉動畫。

如果要按順序播放2個動畫,則應該在第一個動畫的onAnimationEnd()中開始第二個動畫。

1

我找到了解決方案。 TranslateAnimation()參數中的座標不是絕對的。 因爲我調用了setStartOffset(N),aniMoveBack動畫將從aniMove座標的末尾開始。 它是相對位置。

所以,代碼應該是固定的這樣的..

TranslateAnimation aniMoveBack = new TranslateAnimation(0, 0, 0, -DISTANCE); 
相關問題