动画无法按预期工作

时间:2016-01-06 07:21:41

标签: android android-animation

我试图执行淡出,然后在动画中面对,但视图在动画持续时间内变得不可见,然后重新出现。

fade_out_in.xml

<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:fillEnabled="true"
    >
    <alpha
        android:interpolator="@android:interpolator/linear"
        android:fromAlpha="1"
        android:toAlpha="0"
        android:duration="200" />
    <alpha
        android:interpolator="@android:interpolator/linear"
        android:fillAfter="true"
        android:fromAlpha="0"
        android:toAlpha="1"
        android:duration="200"
        android:startOffset="200" />
</set>

代码:

    Animation animation = AnimationUtils.loadAnimation(this, R.anim.fade_out_in);
    mImageView.startAnimation(animation);

2 个答案:

答案 0 :(得分:2)

我无法准确地告诉你为什么这不起作用,但似乎多个alpha动画不适用于XML&lt;设置&gt; 。你可以将它们组合成一个像这样的alpha:

<set xmlns:android="http://schemas.android.com/apk/res/android">

    <alpha
        android:duration="200"
        android:fromAlpha="1"
        android:toAlpha="0"
        android:startOffset="500"
        android:interpolator="@android:interpolator/linear"
        android:repeatCount="1"
        android:repeatMode="reverse" />
</set>

或剪切xml并使用像Rubin的答案中的AnimationSet一样。 另一种可能性是使用ViewPropertyAnimator

    final LinearInterpolator interpolator = new LinearInterpolator();

    mImageView.animate()
            .alpha(0)
            .setDuration(200)
            .setStartDelay(500)
            .setInterpolator(interpolator)
            .withEndAction(new Runnable() {
                @Override
                public void run() {
                    mImageView.animate()
                        .alpha(1)
                        .setDuration(200)
                        .setInterpolator(interpolator);
                }
            });

请注意.withEndAction()调用需要MIN API 16。

答案 1 :(得分:1)

请尝试该代码

 Animation fadeOut = new AlphaAnimation(1, 0);
    fadeOut.setInterpolator(new AccelerateInterpolator());
    fadeOut.setStartOffset(1000);
    fadeOut.setDuration(1000);

    Animation fadeIn = new AlphaAnimation(0, 1);
    fadeIn.setInterpolator(new DecelerateInterpolator());
    fadeIn.setDuration(1000);


    AnimationSet animation = new AnimationSet(false);
    animation.addAnimation(fadeIn);
    animation.addAnimation(fadeOut);
    this.setAnimation(animation);