ViewTreeObserver类监听ViewTree
ViewTreeObserver,顾名思义,是一个Observer,主要用来监听ViewTree的变化 ViewTreeObserver不应该被应用程序实例化,因为他是由views hierarchy提供的,我们要使用view.getViewTreeObserver()
方法来获取它的实例。 它提供了一些方法和接口,用来让我们来监听view视图的变化。 使用步骤:
获取ViewTreeObserver实例
ViewTreeObserver observer = view.getViewTreeObserver()
给observer添加监听:
observer.setXXXListener()
,使用observer.removeXXXListener()
移除监听,以防多次调用。
这样便可以监听ViewTree的一些状态了。
ViewTreeObserver提供了以下接口(注意OnPreDrawListener和OnDrawListener的区别):
isAlive()
:判断ViewTreeObserver是否处于活动状态,如果不处于,调用除了这个方法外的其他方法都会抛出异常,所以如果想让ViewTreeObserver保持长期的活动,那么在使用它时先调用此方法判断其是否活动
final void dispatchOnDraw()
通知已经注册的Listener,绘制要开始了 final boolean dispatchOnPreDraw()
通知已经注册的Listener,绘制要开始了 final void dispatchOnGlobalLayout()
通知已经注册的Listener,布局要开始了
dispatchOnDraw()源码如下:
所以由源码可知,该方法用于主动触发监听。
最后更新于
这有帮助吗?