Animation.setFillAfter/Before - 它们起作用吗?它们有什么作用?

52

就我提出的问题标题而言,setFillBefore()setFillAfter()这两个方法分别是用来做什么的?

我原本希望setFillAfter()可以在动画完成后使变化保持不变,但这是错误的吗?

1个回答

129
答案是肯定的,它们确实起作用,只是可能不是您期望的方式 - 例如,setFillAfter(boolean fillAfter)的描述说:
如果fillAfter为true,则完成动画后此动画执行的转换将持续存在。
当设置为true时,它确实做到了这一点。但是,在Android上,动画实际上并没有动画化View本身,而是动画化View的位图表示形式,这一点很令人费解。
您可能遇到的问题是,在动画之后,View返回到动画之前的状态 - setFillAftersetFillBefore无法帮助您解决此问题,因为在这种情况下,您真正想要做的是将View的属性设置为动画表示(它们是分开的事物),而setFillAftersetFillBefore仅适用于动画属性,而不适用于View属性。
它们存在的原因是为了链接动画。假设您有一个平移动画,然后是淡出动画。如果您没有在平移动画上设置setFillAfter(true),则View将平移,跳回其原始位置,然后淡出。如果在平移动画上设置了setFillAfter(true),则View将在当前位置移动,然后淡出。

12
谢谢Joseph!你的帖子对我理解动画API有很大帮助。安卓文档确实存在一些不足之处! - D-Dᴙum
19
请注意,3.0中的新动画系统正好解决了先前动画系统的这一方面(以及其他问题);我们已经为View添加了属性(alpha、translationX等),您可以创建作用于这些属性的动画(例如ObjectAnimator)。因此,不仅是因为动画而使View的绘制方式不同,而是因为动画实际上通过使用这些属性来改变View的属性。因此,希望随着人们采用新系统,这个问题会变得不那么令人困惑。 - Chet Haase
1
@ChetHaase 是的,谢谢您介绍属性动画系统。对于那些针对较低最小API级别的开发者,请查看由传奇人物Jake Wharton开发的NineOldAndroids库(http://nineoldandroids.com/),该库将新的动画系统移植到Android 1.0及以上版本中。 - Joseph Earl
4
顺便说一下,这些“fill flags”的神秘行为似乎值得更详细地进行记录,因此我写了这篇文章来帮助解释这可能非常令人困惑的问题:http://graphics-geek.blogspot.com/2011/08/mysterious-behavior-of-fillbefore.html。 - Chet Haase
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Bron Davies
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接