我想为ImageView创建一个动画,它旋转图像,同时从 100% 缩放到 0% 并从不透明淡入透明(SET 1),然后反转动画(SET 2)。两个动画集如果一个一个就可以工作,但是如果我把它们放在一起我什么都看不到,因为动画集 2 的起始值会立即应用,即使它的子动画集的 startOffset 设置为在动画集之后开始1已完成。我想我已经理解应该使用fadeAfter和fadeBefore来避免在动画集 2 开始之前应用它的开始值,但它对我不起作用。我也试过fadeAfter在 SET 1 中设置为 true,删除 SET 2,看看它是否有效,即 SET 1 的转换是否在结束后持续存在,但它再次不起作用.. 那么,是否有可能产生我想要的结果下面的动画,也许使用了 fadeAfter、fadeBefore和fillEnabled属性?它应该与ImageView视图一起使用吗?
动画 XML
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false" >
<!-- SET 1 -->
<set
android:interpolator="@android:anim/decelerate_interpolator"
android:shareInterpolator="true" >
<alpha android:fromAlpha="1"
android:toAlpha="0"
android:duration="1000"
android:startOffset="500"/>
<rotate
android:duration="1000"
android:fromDegrees="0"
android:pivotX="50%"
android:pivotY="50%"
android:startOffset="500"
android:toDegrees="720" />
<scale
android:duration="1000"
android:fromXScale="100%"
android:fromYScale="100%"
android:pivotX="50%"
android:pivotY="50%"
android:startOffset="500"
android:toXScale="0%"
android:toYScale="0%" />
</set>
<!-- SET 2 -->
<set
android:interpolator="@android:anim/accelerate_interpolator"
android:shareInterpolator="true">
<alpha android:fromAlpha="0"
android:toAlpha="1"
android:duration="1000"
android:startOffset="1500"/>
<rotate
android:duration="1000"
android:fromDegrees="0"
android:pivotX="50%"
android:pivotY="50%"
android:toDegrees="720"
android:startOffset="1500" />
<scale
android:duration="1000"
android:fromXScale="0%"
android:fromYScale="0%"
android:pivotX="50%"
android:pivotY="50%"
android:toXScale="100%"
android:toYScale="100%"
android:startOffset="1500" />
</set>
</set>
动画开始在 JAVA 代码中
ImageView iv = (ImageView) findViewById(R.id.image_view);
Animation animation = AnimationUtils.loadAnimation(this, R.anim.test_animation);
iv.startAnimation(animation);
动画重复测试
我也尝试删除 SET 2 并在startAnimation之前添加以下代码,但动画不会以相反的顺序重复(我也可以指定 RESTART 和 X 重复周期,但它不起作用)。有什么想法或建议吗?!
animation.setRepeatCount(1);
animation.setRepeatMode(Animation.REVERSE);