我在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) {
}
});
答案 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) {
}
});