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);在这两种情况下都使用。

更新

奇怪的是,如果我取消 alpha 动画的 setFillAfter,

滑动过渡最后保持正常。怎么来的?这是两个不同的过渡对象。

4

1 回答 1

0

据我了解,您一次只需要一个补间动画。您也应该能够在 xml 中表达 alpha 动画。这将解决您的问题;在所有 android 版本中都应该是可靠的(我不确定您当前的解决方案是否总是正确的);并简化代码。

于 2013-10-30T11:36:12.177 回答