在自定义view中开启的动画,如果不做处理,在activity销毁后,依然会执行
占用资源。需要在不可见时,关闭动画;在可见时,开启动画
涉及到两个方法
- onWindowFocusChanged(hasWindowFocus: Boolean)
- onVisibilityChanged(changedView: View, visibility: Int)
- onWindowFocusChanged(hasWindowFocus: Boolean)
当包含此视图的窗口获得或失去焦点时调用
hasWindowFocus:true 获得焦点,开启动画;false 失去焦点,停止动画 - onVisibilityChanged(changedView: View, visibility: Int)
当view或view的父级view的可见性发生更改时调用
changedView:可见性发生变化的view。可能是本身,或者父级view
3.onDetachedFromWindow 在view所在界面finish时调用,自此处关闭动画
思路
- onWindowFocusChanged()中
hasWindowFocus为false时,暂停动画
hasWindowFocus为true时,开启动画 - onVisibilityChanged()中
visibility为INVISIBLE或GONE时,暂停动画
visibility为VISIBLE时,开启动画 - onDetachedFromWindow 中调用cancel()关闭动画
属性动画
animator.pause() 暂停动画
animator.resume() 继续动画
animator.cancel() 关闭动画
问题
发现AnimatorSet 的pause()无效
网友评论