我有一个自动动画的自定义视图。它使用AnimatorSet
调用Animator.start()
中的onAnimationEnd()
以便无休止地重复。创建视图时会自动启动。
这些视图用于ListAdapter
(实际上是SackOfViewsAdapter
,因此无法进行回收)。因此,管理何时取消(或暂停)动画非常重要。
也许动画师应该在适配器中注册,然后Activity
应该调用该适配器上的某些方法取消任何动画?
另一个想法是在onAnimationEnd()
中检查是否View
isShowing()
(即如果没有显示则不重新启动动画)但是这会在{{1}时出现问题回到视野中。
这对我来说似乎有些苛刻,所以如果有更好的解决方案,我很感兴趣。
此外,如果动画师暂停会发生什么?我想它不会被垃圾收集?
答案 0 :(得分:0)
如果您使用简单的ListAdapter
,则只需在适配器的getView
中启动动画并删除其他所有内容。当一个新的单元格出现在屏幕上时,它将显示一个刚刚开始的动画,并且当重新使用单元格时,不需要取消屏幕上出去的单元格上的动画。
答案 1 :(得分:0)
注意:感谢pskink's comment显示方式。
看起来View#onWindowVisibilityChanged
和View#onDetachedFromWindow
是最好的方式。在前者中,暂停/恢复动画师(根据可见性是否为View#VISIBLE
)。在后者中,取消动画师。
根据您的使用情况,也许也会在View#onAttachedToWindow
启动动画师。
如果有人有更好的解决方案,我不会将此标记为已接受。
答案 2 :(得分:0)
@Override
public void onVisibilityAggregated(boolean isVisible) {
super.onVisibilityAggregated(isVisible);
if (isVisible) {} //Animator.start()
else {} //Animator.cancel()