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

Ker*_*rry 47 android android-animation

在我的问题标题中,有哪些方法setFillBefore()setFillAfter()应该做什么?

我希望setFillAfter()在动画完成后对View永久更改,但这是不正确的?

Jos*_*arl 121

答案是肯定的,它们确实有效,可能不符合您的期望 - 例如,说明的setFillAfter(boolean fillAfter)说明

如果fillAfter为true,则此动画执行的转换将在完成后保留.

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

然而,非直观的Android上的动画实际上并不动画View本身,而是动画View的位图表示.

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

它们存在的原因是链接动画.假设你有一个翻译动画,然后是淡出.如果您没有设置setFillAfter(true)翻译动画,则视图将翻译,跳回其原始位置然后淡出.通过setFillAfter(true)设置翻译动画,视图将移动,然后在其当前位置淡出.

  • 请注意,3.0中的新动画系统正好解决了前一个动画系统的这个方面(除此之外); 我们已经为View(alpha,translationX等)添加了属性,您可以创建对这些属性起作用的动画(例如,ObjectAnimator).因此,不仅因为动画而不同地绘制视图......它*是*不同的,因为它的属性实际上是由动画使用这些属性而改变的.所以希望随着人们采用新系统,这将变得更加混乱. (18认同)
  • 谢谢约瑟夫!您的帖子帮助我了解动画API.Android文档肯定缺乏领域! (10认同)
  • 顺便说一句,似乎值得更加密切地记录这些填充标志的神秘行为,所以我写了这篇文章来帮助解释可能非常令人困惑的内容:http://graphics-geek.blogspot.com/2011/08 /mysterious-behavior-of-fillbefore.html (4认同)