0

私は次のxmlを持っています:

<?xml version="1.0" encoding="utf-8"?>
<set
     xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/accelerate_interpolator">
    <translate
 android:fromXDelta="0%p"
     android:toXDelta="30%p"
     android:duration="600">

    </translate>
</set>

そしてこのクラス:

switch_bg.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                if (!isChecked) {

                    Animation animation = android.view.animation.AnimationUtils
                            .loadAnimation(AppService.getAppContext(),
                                    com.waze.R.anim.slide_to_right);

                    animation.setInterpolator(new AccelerateInterpolator());
                    animation.setFillAfter(true);
                    boxImage_left.startAnimation(animation);

                    AlphaAnimation alpha = new AlphaAnimation(1, 0);
                    alpha.setDuration(1000);

                    alpha.setInterpolator(new AccelerateInterpolator());
                    alpha.setFillAfter(true);
                    vImage_left.startAnimation(alpha);

                } else {
                    Animation animation = android.view.animation.AnimationUtils
                            .loadAnimation(AppService.getAppContext(),
                                    com.waze.R.anim.slide_to_left);

                    animation.setInterpolator(new AccelerateInterpolator());
                    animation.setFillAfter(true);
                    boxImage_left.startAnimation(animation);

                    AlphaAnimation alpha = new AlphaAnimation(0, 1);
                    alpha.setDuration(1000);

                    alpha.setInterpolator(new AccelerateInterpolator());
                    alpha.setFillAfter(true);
                    vImage_left.startAnimation(alpha);
                }

                TransitionDrawable transition = (TransitionDrawable) switch_bg
                        .getBackground();
                transition.reverseTransition(TRANSITION_TIME);

                isChecked = !isChecked;

            }
        });
    }

ボックスを右から左に移動すると、アニメーションの後もボックスがそのまま残ります。

ただし、左から右へのアニメーションの後、左側の元の位置に戻ります。

どうして?

私はalpha.setFillAfter(true);両方の場合に使用します。

アップデート

アルファアニメーションのsetFillAfterをキャンセルすると不思議なことに、

スライド遷移は最後に問題ありません。どうして?これらは 2 つの異なる遷移オブジェクトです。

4

1 に答える 1

0

私が理解しているように、ビューでは一度に 1 つのトゥイーン アニメーションしか必要ありません。xmlでもアルファアニメーションを表現できるはずです。これで問題は解決します。すべてのAndroidバージョンで信頼できるはずです(現在のソリューションが常に正しく見えるかどうかはわかりません)。コードを簡素化します。

于 2013-10-30T11:36:12.177 に答える