2

ボタンが 200px (0,0 から 0, 200 まで) 下に移動し、1 秒後に元の位置に再び上に移動することを期待しています。

ただし、次のコードは (0,0) からではなく、(0,200) から (0,400) から開始するように動作します。

1 つのアニメーションを AnimationSet に入れると、正常に動作します。しかし、AnimationSet に 2 つ以上のアニメーションを入れると、うまくいきません。

どうしたの?

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

2 に答える 2

1

AnimationSet は、一緒に再生する必要があるアニメーションのグループを表します。個々のアニメーションの変換は、1 つの変換にまとめられます。

AnimationSet をこのように使用することはできません。複数のアニメーションの機能を組み合わせることができます。AnimationSet を使用すると、アルファと回転アニメーションを同時に実行できます。

2 つのアニメーションを順番に再生する場合は、最初のアニメーションの onAnimationEnd() で 2 番目のアニメーションを開始する必要があります。

于 2013-01-07T09:53:19.787 に答える
1

解決策を見つけました。TranslateAnimation() パラメータの座標は絶対座標ではありません。setStartOffset(N) を呼び出したので、aniMoveBack アニメーションは aniMove 座標の最後から開始されます。相対位置です。

したがって、コードは次のように修正する必要があります..

TranslateAnimation aniMoveBack = new TranslateAnimation(0, 0, 0, -DISTANCE);
于 2013-01-08T04:35:31.833 に答える