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

Animate Alpha ImageView淡入淡出异常:仅首次显示图片求助

问题解决方法

核心问题分析

  1. 第一次动画结束后,ImageView的alpha停留在0,且未将visibility重置为GONE,后续调用时虽然设置了VISIBLE,但初始alpha为0,动画效果被干扰。
  2. 连续调用animate()会叠加动画任务,旧动画未结束会打乱新动画的执行逻辑。

修正后的代码

// 先取消之前未完成的动画,避免冲突
imageView.animate().cancel();

// 重置ImageView初始状态
imageView.setAlpha(1f);
imageView.setVisibility(View.VISIBLE);

// 设置对应状态图标
if (!successful) {
    imageView.setImageDrawable(getResources().getDrawable(R.drawable.failed_img, getTheme()));
} else {
    imageView.setImageDrawable(getResources().getDrawable(R.drawable.success_img, getTheme()));
}

// 串联淡入+淡出动画,保证执行顺序
imageView.animate()
        .alpha(1)
        .setDuration(1000)
        .withEndAction(() -> {
            imageView.animate()
                    .alpha(0)
                    .setDuration(1500)
                    .setStartDelay(1000)
                    .withEndAction(() -> {
                        // 动画结束后隐藏并重置状态,为下一次调用做准备
                        imageView.setVisibility(View.GONE);
                        imageView.setAlpha(1f);
                    });
        });

关键修改点

  • 每次执行前调用animate().cancel(),清除未完成的动画任务,避免新旧动画冲突。
  • 动画开始前手动重置alpha为1,确保淡入动画从正确的初始状态启动。
  • 使用withEndAction()串联动画流程,避免并行执行导致的显示异常。
  • 淡出动画结束后将visibility设为GONE并重置alpha,保证下一次调用的初始状态正确。
  • 替换旧版getDrawable()调用为API21+兼容的重载方法,避免兼容性问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 02:45:09