Android中先淡出后淡入的AnimationSet动画不生效问题
Android 先淡出再淡入动画集不生效的解决办法
嘿,我帮你梳理下问题根源,再给你靠谱的解决方案:
首先,你的动画XML里只写了淡出的动画片段,完全没有淡入的代码,这肯定看不到后续的淡入效果呀。另外,就算你补上淡入动画,AnimationSet默认是让所有动画同时执行的,所以还得调整执行顺序,同时要确保动画能正确启动。
解决方案1:用AnimationSet的顺序执行属性
先修改你的动画XML文件(比如命名为fade_in_out.xml),补上淡入动画,并设置android:ordering="sequential"让动画按顺序执行:
<set xmlns:android="http://schemas.android.com/apk/res/android" android:ordering="sequential"> <!-- 关键:设置动画按顺序执行 --> <!-- 淡出动画,时长2秒 --> <alpha android:duration="2000" android:fromAlpha="1.0" android:toAlpha="0.0" /> <!-- 淡出完成后自动执行淡入动画,时长2秒 --> <alpha android:duration="2000" android:fromAlpha="0.0" android:toAlpha="1.0" /> </set>
然后调整Java代码,用startAnimation()替代setAnimation()——因为setAnimation()只是给View绑定动画,但不会自动启动,startAnimation()会直接触发动画:
TextView tv_1 = findViewById(R.id.tv_1); AnimationSet animSet = (AnimationSet) AnimationUtils.loadAnimation(this, R.anim.fade_in_out); tv_1.startAnimation(animSet);
解决方案2:用startOffset控制动画延迟
如果你不想设置ordering属性,也可以给淡入动画加startOffset,让它在淡出动画完成后再启动:
<set xmlns:android="http://schemas.android.com/apk/res/android"> <alpha android:duration="2000" android:fromAlpha="1.0" android:toAlpha="0.0" /> <!-- 延迟2秒(和淡出时长一致)后执行淡入 --> <alpha android:duration="2000" android:fromAlpha="0.0" android:toAlpha="1.0" android:startOffset="2000" /> </set>
Java代码和上面一样,用startAnimation()启动即可。
关键注意点
- 必须确保动画集里包含淡出和淡入两个动画片段
- 控制动画执行顺序:要么用
android:ordering="sequential",要么给后续动画加startOffset - 用
startAnimation()启动动画,而不是仅用setAnimation()
内容的提问来源于stack exchange,提问作者Guo




