You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android中如何依次执行多个动画?Alpha动画顺序执行失败求助

解决Alpha动画顺序执行的问题

嘿,我看你遇到了动画顺序执行的坑——想让TextView先从完全显示淡出到透明,再从透明淡回完全显示,但直接用AnimationSet的话两个动画会同时跑,根本达不到你要的先后效果对吧?

这是因为AnimationSet默认会让所有子动画同时启动,咱们得手动指定执行顺序,给你两种靠谱的解决方法:

方法一:修改XML动画文件,给第二个动画加启动延迟

直接在你的alpha_set.xml里给第二个alpha动画加上startOffset属性,让它等第一个动画结束后再启动:

<set xmlns:android="http://schemas.android.com/apk/res/android" 
     android:fillAfter="true">
    <!-- 第一步:从1到0,淡出动画,时长2000ms -->
    <alpha
        android:duration="2000"
        android:fromAlpha="1.0"
        android:toAlpha="0.0" />
    <!-- 第二步:从0到1,淡入动画,等第一个动画结束再启动(延迟2000ms) -->
    <alpha
        android:duration="2000"
        android:fromAlpha="0.0"
        android:toAlpha="1.0"
        android:startOffset="2000" />
</set>

这里的startOffset值要和第一个动画的duration完全一致,这样两个动画就能无缝衔接,按你想要的顺序执行啦。

方法二:用AnimationListener链式触发动画(更灵活)

如果之后你需要在动画前后加一些自定义逻辑,用代码监听动画结束事件,再手动启动下一个动画会更灵活:

TextView tv_1 = findViewById(R.id.tv_1);

// 创建淡出动画:1.0(完全显示)→0.0(透明)
Animation fadeOut = new AlphaAnimation(1.0f, 0.0f);
fadeOut.setDuration(2000);
fadeOut.setFillAfter(true); // 保持动画结束后的状态

// 创建淡入动画:0.0(透明)→1.0(完全显示)
Animation fadeIn = new AlphaAnimation(0.0f, 1.0f);
fadeIn.setDuration(2000);
fadeIn.setFillAfter(true);

// 给淡出动画加监听,结束后启动淡入动画
fadeOut.setAnimationListener(new Animation.AnimationListener() {
    @Override
    public void onAnimationStart(Animation animation) {
        // 动画启动时的操作(可选)
    }

    @Override
    public void onAnimationEnd(Animation animation) {
        // 淡出结束,立刻启动淡入
        tv_1.startAnimation(fadeIn);
    }

    @Override
    public void onAnimationRepeat(Animation animation) {
        // 动画重复时的操作(可选)
    }
});

// 先启动淡出动画
tv_1.startAnimation(fadeOut);

小提醒

不管用哪种方法,都要确保设置了fillAfter="true"(代码里是setFillAfter(true)),不然动画结束后TextView会立刻跳回原来的透明度状态,白忙活一场~

内容的提问来源于stack exchange,提问作者Guo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 11:11:54