Android动画重复

时间:2014-09-11 09:32:29

标签: android animation repeat

我在Android中遇到动画问题。在此动画的结束和开始之间,在屏幕上整个图像闪烁,没有alpha效果。动画以alpha 0开头,也以alpha 0结束。我有这段代码:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:fillAfter="true" >

<alpha
    android:duration="4000"
    android:fromAlpha="0.0"
    android:interpolator="@android:anim/linear_interpolator"
    android:toAlpha="1.0" />

<scale
    android:duration="12000"
    android:fromXScale="0.5"
    android:fromYScale="0.5"
    android:pivotX="50%"
    android:pivotY="10%"
    android:toXScale="3"
    android:toYScale="2"
    android:interpolator="@android:anim/linear_interpolator"/>

<alpha
    android:startOffset="10000"
    android:duration="1500"
    android:fromAlpha="1.0"
    android:interpolator="@android:anim/linear_interpolator"
    android:toAlpha="0" />
</set>

和java中的这段代码

imageView.startAnimation(animace);

animace.setAnimationListener(new Animation.AnimationListener() {
    @Override
    public void onAnimationStart(Animation animation) {
        imageView.setVisibility(View.VISIBLE);
    }

    @Override
    public void onAnimationEnd(Animation animation) {
        imageView.setVisibility(View.INVISIBLE);
        imageView.startAnimation(animace);
    }

    @Override
    public void onAnimationRepeat(Animation animation) {
    }
});

2 个答案:

答案 0 :(得分:1)

这是因为XML文件中的动画同时运行。你有一个动画,将Alpha从0更改为1,另一个从1更改为0.我假设你想按顺序运行它们,所以你应该将它们分成不同的文件。一种解决方案可能是这样的:(未经测试)

fade_in.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:fillAfter="true" >

<alpha
    android:duration="4000"
    android:fromAlpha="0.0"
    android:interpolator="@android:anim/linear_interpolator"
    android:toAlpha="1.0" />

</set>

fade_out.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:fillAfter="true" >

<alpha
    android:startOffset="10000"
    android:duration="1500"
    android:fromAlpha="1.0"
    android:interpolator="@android:anim/linear_interpolator"
    android:toAlpha="0" />

</set>

scale.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:fillAfter="true" >

<scale
    android:duration="12000"
    android:fromXScale="0.5"
    android:fromYScale="0.5"
    android:pivotX="50%"
    android:pivotY="10%"
    android:toXScale="3"
    android:toYScale="2"
    android:interpolator="@android:anim/linear_interpolator"/>

</set>

然后,在你的代码中,同时启动fade_in并缩放,并在fade_in完成后运行fade_out:

imageView.startAnimation(fadeInAnimation);
imageView.startAnimation(scaleAnimation);

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

    @Override
    public void onAnimationEnd(Animation animation) {
        imageView.startAnimation(fadeOutAnimation);
    }

    @Override
    public void onAnimationRepeat(Animation animation) { }
});

我不确定您需要在何处设置Visible和Invisible,但您可以为每个对象附加一个AnimationListener并根据您的需要放置它们。

希望这有助于:)

答案 1 :(得分:0)

这项工作:

    animace.setAnimationListener(new Animation.AnimationListener() {
        @Override
        public void onAnimationStart(Animation animation) {
            imageView.setAlpha(1f);
        }

        @Override
        public void onAnimationEnd(Animation animation) {
            imageView.setAlpha(0f);
            imageView.startAnimation(animace);
        }

        @Override
        public void onAnimationRepeat(Animation animation) {

        }
    });