Android Animation.setFillAfter/Before-它们工作吗/它们的用途是什么?

Android Animation.setFillAfter/Before-它们工作吗/它们的用途是什么?,android,android-animation,Android,Android Animation,如我问题的标题所示,setFillBefore()和setFillAfter()方法应该做什么 我希望setFillAfter()能够在动画完成后将视图的更改永久化,但这是不正确的?答案是肯定的,它们确实有效,只是可能不符合您的预期-例如,setFillAfter(布尔fillAfter)的描述中说 如果fillAfter为true,则 这个动画的变换 执行时将持续执行 完成了 当设置为true时,它会执行此操作 但是,Android上的动画实际上并没有为视图本身设置动画,而是为视图的位图表示设

如我问题的标题所示,
setFillBefore()
setFillAfter()
方法应该做什么


我希望
setFillAfter()
能够在动画完成后将视图的更改永久化,但这是不正确的?

答案是肯定的,它们确实有效,只是可能不符合您的预期-例如,
setFillAfter(布尔fillAfter)
的描述中说

如果fillAfter为true,则 这个动画的变换 执行时将持续执行 完成了

当设置为true时,它会执行此操作

但是,Android上的动画实际上并没有为视图本身设置动画,而是为视图的位图表示设置动画

您可能遇到的问题是,在动画之后,视图会恢复到动画之前的状态-
setFillAfter
setFillBefore
无法帮助您做到这一点,因为在这种情况下,您真正想要做的是将视图的属性设置为与动画表示相同(它们是独立的内容),并且
setFillAfter
setFillBefore
仅适用于动画属性,而不适用于视图属性


它们存在的原因是为了链接动画。假设您有一个平移动画,然后是淡出。如果您没有在平移动画上设置
setFillAfter(true)
,则视图将进行平移,跳回其原始位置,然后淡出。使用
setFillAfter(true)
设置为“翻译动画”,视图将移动,然后在当前位置淡出。

谢谢Joseph!您的帖子在理解动画API方面帮了我很大的忙。android文档肯定缺少一些方面!请注意,3.0中的新动画系统正好解决了以前动画系统的这一方面(除其他外);我们已将属性添加到视图(alpha、translationX等),您可以创建动画(例如ObjectAnimator)这会对这些属性产生影响。因此,不仅因为动画的不同,视图的绘制也会有所不同……这是不同的,因为动画使用这些属性实际上会改变视图的属性。因此,希望随着人们采用新系统,这能减少混淆。@chethase是的,谢谢您介绍属性aNimination系统。对于那些以较低的最低API级别为目标的系统,请参阅NineodelDroids库()由传奇人物杰克·沃顿(Jake Wharton)开发,将新的动画系统移植到Android 1.0及以上版本。@Josepharl我在
按钮
视图上使用了一套淡入淡出、缩放和平移的动画,动画完成后我无法点击按钮。我启用了
setFillEnabled()
setFillAfter()
为true。Mu按钮缩小并保持在其位置,但当我单击它时,什么也没有发生。但当我单击按钮的原始位置,即动画开始工作之前的位置时。看起来原始按钮就在那里,而按钮是不可见的。顺便说一句,这些填充fla的神秘行为似乎值得记录下来gs更接近,所以我写了这篇文章来帮助解释什么是非常令人困惑的: