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

Xamarin Android中ImageView用AnimationSet实现淡入淡出动画失败原因咨询

为什么AnimationSet无法实现平滑的淡入淡出串行动画

核心原因

AnimationSet的设计目标是让多个动画并行作用于同一个控件,所有动画的计算都是基于控件的原始初始状态(这里是初始透明度1.0f),而非前一个动画结束后的状态。

当你把fadeOut(1f→0f,5秒)和fadeIn(0f→1f,5秒,StartOffset=5000ms)加入同一个AnimationSet时:

  • 0-5秒内:fadeOut执行,但AnimationSet会错误地将两个动画的最终状态合并,直接把ImageView的透明度设置为fadeOut的目标值0f,跳过渐变过程;
  • 5-10秒内:fadeIn启动,但它是基于原始的1.0f透明度计算,相当于从1f→1f,没有任何渐变效果,直到10秒动画结束后,fillAfter属性触发才将透明度切回1f,所以看起来是10秒后突然变回不透明。

而通过AnimationEnd事件触发fadeIn的方式,是让fadeOut完全执行完毕后,再基于它的结束状态(0f透明度)启动fadeIn,属于串行执行,因此能正常实现渐变效果。

替代实现方案(用属性动画实现串行动画)

如果想实现顺序执行的淡入淡出,推荐使用AnimatorSet(属性动画体系),它支持按顺序执行动画,且基于控件当前属性值计算,不会出现AnimationSet的问题:

// 创建淡出动画
var fadeOut = ObjectAnimator.OfFloat(yourImageView, "alpha", 1f, 0f);
fadeOut.SetDuration(5000);

// 创建淡入动画
var fadeIn = ObjectAnimator.OfFloat(yourImageView, "alpha", 0f, 1f);
fadeIn.SetDuration(5000);

// 按顺序执行两个动画
var animatorSet = new AnimatorSet();
animatorSet.PlaySequentially(fadeOut, fadeIn);
animatorSet.Start();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 18:36:24