从自定义列表适配器的自定义视图中管理Animator生命周期

时间:2016-06-06 03:58:15

标签: android android-animation android-custom-view

我有一个自动动画的自定义视图。它使用AnimatorSet调用Animator.start()中的onAnimationEnd()以便无休止地重复。创建视图时会自动启动。

这些视图用于ListAdapter(实际上是SackOfViewsAdapter,因此无法进行回收)。因此,管理何时取消(或暂停)动画非常重要。

也许动画师应该在适配器中注册,然后Activity应该调用该适配器上的某些方法取消任何动画?

另一个想法是在onAnimationEnd()中检查是否View isShowing()(即如果没有显示则不重新启动动画)但是这会在{{1}时出现问题回到视野中。

这对我来说似乎有些苛刻,所以如果有更好的解决方案,我很感兴趣。

此外,如果动画师暂停会发生什么?我想它不会被垃圾收集?

3 个答案:

答案 0 :(得分:0)

如果您使用简单的ListAdapter,则只需在适配器的getView中启动动画并删除其他所有内容。当一个新的单元格出现在屏幕上时,它将显示一个刚刚开始的动画,并且当重新使用单元格时,不需要取消屏幕上出去的单元格上的动画。

答案 1 :(得分:0)

注意:感谢pskink's comment显示方式。

看起来View#onWindowVisibilityChangedView#onDetachedFromWindow是最好的方式。在前者中,暂停/恢复动画师(根据可见性是否为View#VISIBLE)。在后者中,取消动画师。

根据您的使用情况,也许也会在View#onAttachedToWindow启动动画师。

如果有人有更好的解决方案,我不会将此标记为已接受。

答案 2 :(得分:0)

@Override
public void onVisibilityAggregated(boolean isVisible) {
    super.onVisibilityAggregated(isVisible);
    if (isVisible) {} //Animator.start() 
    else {} //Animator.cancel()