You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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

火山引擎 最新活动