Android Animation的fillBefore fillAfter 以及fillEnable

这三个变量极易产生误解 这是Animation设计有问题的地方

为了能正常使用 需要仔细区分这三个变量

 

首先fillAfter是决定 动画结束之后 view最终的显示位置是不是动画的结束位置。需要注意的是fillEnable的值跟它完全无关。

代码在viewgroup的 

void finishAnimatingView(final View view, Animation animation)
if (animation != null && !animation.getFillAfter()) {
view.clearAnimation();
}


fileEnable参与决定在动画开始之前 view的位置 是不是动画起始位置(因为动画的开始位置可能离view的布局位置有一定偏差)。
可以使用setAnimation来提前设置 在动画开始之前的animation显示

如果fillEnable为true,动画可能不会立即开始(考虑到animation可能设置delay),不过如果
同时设置了fillBefore为true,那么此刻view的显示位置就变为动画的开始位置。(动画会立即开始(start的监听回调被调用)
如果fillBefore为false,一切照旧等待动画开始时动画运行(start的监听回调在动画开始时调用)。

如果fillEnable为false,不管动画有没有延迟,动画都会立刻开始.
此时fillBefore变量无用,view可能会在动画开始位置停留一段时间,然后动画正式运行。

总而言之,如果你没有为animation设置delay。fillEnable和fillBefore你无需关心,如果你设置了delay为1000ms,那么
如果你想在这1000ms期间view保持在原始位置(非动画开始位置),就设置fillEnable=true && fillBefore=false【必须设置】,否则
view的动画会在立刻开始。


posted @ 2018-06-22 01:42  lightverse  阅读(309)  评论(0编辑  收藏  举报