我希望按钮向下移动200px(从0,0到0,200)
1秒后,再次向上移动到原始位置。

但是以下代码的行为类似于从(0,200)到(0,400),而不是从(0,0)开始

如果我将一个动画放到AnimationSet中,效果很好。但是,如果我在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>

最佳答案

AnimationSet表示一组应该一起播放的动画。的
  每个动画的变换都组合成
  一次转换。


不能以这种方式使用AnimationSet,它可以组合多个动画的功能。使用AnimationSet可以同时执行Alpha和旋转动画。

如果要按顺序播放2个动画,则应在第一个动画的onAnimationEnd()中开始第二个动画。

08-18 19:21