Animate Alpha ImageView淡入淡出异常:仅首次显示图片求助
问题解决方法
核心问题分析
- 第一次动画结束后,ImageView的
alpha停留在0,且未将visibility重置为GONE,后续调用时虽然设置了VISIBLE,但初始alpha为0,动画效果被干扰。 - 连续调用
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
相关产品推荐
相关产品推荐

