27

これらのレイアウトの両方で同時に2つの異なるアニメーションを実行したい2つの線形レイアウトがあります。

現在、順次動作しています。つまり、1 つを完了した後、別のものを開始します。

これが私のコードです。

    Animation inFromRight = new TranslateAnimation(
                    Animation.RELATIVE_TO_PARENT, +0.0f,
                    Animation.RELATIVE_TO_PARENT, 0.0f,
                    Animation.RELATIVE_TO_PARENT, 0.0f,
                    Animation.RELATIVE_TO_PARENT, 0.0f);
            inFromRight.setDuration(500);
            inFromRight.setInterpolator(new AccelerateInterpolator());

    Animation outtoLeft = new TranslateAnimation(
                    Animation.RELATIVE_TO_PARENT, 0.0f,
                    Animation.RELATIVE_TO_PARENT, -1.0f,
                    Animation.RELATIVE_TO_PARENT, 0.0f,
                    Animation.RELATIVE_TO_PARENT, 0.0f);
            outtoLeft.setDuration(500);
            outtoLeft.setInterpolator(new AccelerateInterpolator());

    @Override
        public void onClick(View v) {
            switch (v.getId()) {
            case R.id.menu:
                            mainLayout.startAnimation(outtoLeft);
                sideBar.startAnimation(inFromRight);                
                break;
            }
        }

outtoLeft.setAnimationListener(new AnimationListener() {
            @Override
            public void onAnimationStart(Animation animation) {
            }

            @Override
            public void onAnimationRepeat(Animation animation) {
            }

            @Override
            public void onAnimationEnd(Animation animation) {
                mainLayout
                        .setLayoutParams(new LayoutParams(
                                LayoutParams.FILL_PARENT,
                                LayoutParams.FILL_PARENT, 40));

            }
        });
4

4 に答える 4

13

を使用する必要があると思いますAnimationSet

ドキュメントから:

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

ここでは、がどのようにAnimationSetなっているのかを確認できます。

于 2012-05-15T18:38:47.373 に答える
1

この問題を解決する方法は、AnimatorオブジェクトでAnimatorSetを使用することです。下位互換性が心配な場合は、NineOldAndroidsライブラリを使用してAPIをAndroid1.0に戻すことができます。

于 2013-02-19T18:44:47.003 に答える
1

最初のアニメーションの onAnimationStart イベントで 2 番目のアニメーションを開始することを解決しました。左のレイアウトを右のレイアウトに置き換える私の例では、両方が同時に左に移動しています。API v.12以降で利用可能なビュークラスhttp://developer.android.com/reference/android/view/View.html#animate()のアニメーションプロパティを使用します

leftLayout.animate()
    .translationX(-leftLayout.getWidth()) // minus width
    .setDuration(300)
    .setListener(new AnimatorListenerAdapter() {
        @Override
        public void onAnimationStart(Animator animation) {
            rightLayout.animate()
                    .translationX(-leftLayout.getWidth()) // minus width
                    .setDuration(300)
                    .setListener(new AnimatorListenerAdapter() {
                        @Override
                        public void onAnimationEnd(Animator animation) {
                            leftLayout.setVisibility(View.GONE);
                            leftLayout.setTranslationX(0f); // discarding changes
                            rightLayout.setTranslationX(0f);
                        }
                    });
        }
});
于 2015-01-01T19:04:49.463 に答える