ViewTreeObserver

public final class ViewTreeObserver
extends Object

java.lang.Object
   ↳ android.view.ViewTreeObserver


A view tree observer is used to register listeners that can be notified of global changes in the view tree. Such global events include, but are not limited to, layout of the whole tree, beginning of the drawing pass, touch mode change.... A ViewTreeObserver should never be instantiated by applications as it is provided by the views hierarchy. Refer to View.getViewTreeObserver() for more information.

Summary

Nested classes

interface ViewTreeObserver.OnDrawListener

Interface definition for a callback to be invoked when the view tree is about to be drawn. 

interface ViewTreeObserver.OnGlobalFocusChangeListener

Interface definition for a callback to be invoked when the focus state within the view tree changes. 

interface ViewTreeObserver.OnGlobalLayoutListener

Interface definition for a callback to be invoked when the global layout state or the visibility of views within the view tree changes. 

interface ViewTreeObserver.OnPreDrawListener

Interface definition for a callback to be invoked when the view tree is about to be drawn. 

interface ViewTreeObserver.OnScrollChangedListener

Interface definition for a callback to be invoked when something in the view tree has been scrolled. 

interface ViewTreeObserver.OnTouchModeChangeListener

Interface definition for a callback to be invoked when the touch mode changes. 

interface ViewTreeObserver.OnWindowAttachListener

Interface definition for a callback to be invoked when the view hierarchy is attached to and detached from its window. 

interface ViewTreeObserver.OnWindowFocusChangeListener

Interface definition for a callback to be invoked when the view hierarchy's window focus state changes. 

interface ViewTreeObserver.OnWindowVisibilityChangeListener

Interface definition for a callback to be invoked when the view hierarchy's window visibility changes. 

Public methods

void addOnDrawListener(ViewTreeObserver.OnDrawListener listener)

Register a callback to be invoked when the view tree is about to be drawn.

void addOnGlobalFocusChangeListener(ViewTreeObserver.OnGlobalFocusChangeListener listener)
void addOnGlobalLayoutListener(ViewTreeObserver.OnGlobalLayoutListener listener)

Register a callback to be invoked when the global layout state or the visibility of views within the view tree changes

void addOnPreDrawListener(ViewTreeObserver.OnPreDrawListener listener)

Register a callback to be invoked when the view tree is about to be drawn

void addOnScrollChangedListener(ViewTreeObserver.OnScrollChangedListener listener)

Register a callback to be invoked when a view has been scrolled.

void addOnSystemGestureExclusionRectsChangedListener(Consumer<List<Rect>> listener)

Add a listener to be notified when the tree's transformed gesture exclusion rects change.

void addOnTouchModeChangeListener(ViewTreeObserver.OnTouchModeChangeListener listener)

Register a callback to be invoked when the invoked when the touch mode changes.

void addOnWindowAttachListener(ViewTreeObserver.OnWindowAttachListener listener)

Register a callback to be invoked when the view hierarchy is attached to a window.

void addOnWindowFocusChangeListener(ViewTreeObserver.OnWindowFocusChangeListener listener)

Register a callback to be invoked when the window focus state within the view tree changes.

void addOnWindowVisibilityChangeListener(ViewTreeObserver.OnWindowVisibilityChangeListener listener)

Register a callback to be invoked when the window visibility changes.

void dispatchOnDraw()

Notifies registered listeners that the drawing pass is about to start.

void dispatchOnGlobalLayout()

Notifies registered listeners that a global layout happened.

boolean dispatchOnPreDraw()

Notifies registered listeners that the drawing pass is about to start.

boolean isAlive()

Indicates whether this ViewTreeObserver is alive.

void registerFrameCommitCallback(Runnable callback)

Adds a frame commit callback.

void removeGlobalOnLayoutListener(ViewTreeObserver.OnGlobalLayoutListener victim)

This method was deprecated in API level 16. Use #removeOnGlobalLayoutListener instead

void removeOnDrawListener(ViewTreeObserver.OnDrawListener victim)

Remove a previously installed pre-draw callback.

void removeOnGlobalFocusChangeListener(ViewTreeObserver.OnGlobalFocusChangeListener victim)

Remove a previously installed focus change callback.

void removeOnGlobalLayoutListener(ViewTreeObserver.OnGlobalLayoutListener victim)

Remove a previously installed global layout callback

void removeOnPreDrawListener(ViewTreeObserver.OnPreDrawListener victim)

Remove a previously installed pre-draw callback

void removeOnScrollChangedListener(ViewTreeObserver.OnScrollChangedListener victim)

Remove a previously installed scroll-changed callback

void removeOnSystemGestureExclusionRectsChangedListener(Consumer<List<Rect>> listener)

Unsubscribe the given listener from gesture exclusion rect changes.

void removeOnTouchModeChangeListener(ViewTreeObserver.OnTouchModeChangeListener victim)

Remove a previously installed touch mode change callback

void removeOnWindowAttachListener(ViewTreeObserver.OnWindowAttachListener victim)

Remove a previously installed window attach callback.

void removeOnWindowFocusChangeListener(ViewTreeObserver.OnWindowFocusChangeListener victim)

Remove a previously installed window focus change callback.

void removeOnWindowVisibilityChangeListener(ViewTreeObserver.OnWindowVisibilityChangeListener victim)

Remove a previously installed window visibility callback.

boolean unregisterFrameCommitCallback(Runnable callback)

Attempts to remove the given callback from the list of pending frame complete callbacks.

Inherited methods

Public methods

addOnDrawListener

Added in API level 16
public void addOnDrawListener (ViewTreeObserver.OnDrawListener listener)

Register a callback to be invoked when the view tree is about to be drawn.

Note: this method cannot be invoked from ViewTreeObserver.OnDrawListener.onDraw().

Parameters
listener ViewTreeObserver.OnDrawListener: The callback to add

Throws
IllegalStateException If isAlive() returns false

addOnGlobalFocusChangeListener

Added in API level 1
public void addOnGlobalFocusChangeListener (ViewTreeObserver.OnGlobalFocusChangeListener listener)

Parameters
listener ViewTreeObserver.OnGlobalFocusChangeListener

addOnGlobalLayoutListener

Added in API level 1
public void addOnGlobalLayoutListener (ViewTreeObserver.OnGlobalLayoutListener listener)

Register a callback to be invoked when the global layout state or the visibility of views within the view tree changes

Parameters
listener ViewTreeObserver.OnGlobalLayoutListener: The callback to add

Throws
IllegalStateException If isAlive() returns false

addOnPreDrawListener

Added in API level 1
public void addOnPreDrawListener (ViewTreeObserver.OnPreDrawListener listener)

Register a callback to be invoked when the view tree is about to be drawn

Parameters
listener ViewTreeObserver.OnPreDrawListener: The callback to add

Throws
IllegalStateException If isAlive() returns false

addOnScrollChangedListener

Added in API level 3
public void addOnScrollChangedListener (ViewTreeObserver.OnScrollChangedListener listener)

Register a callback to be invoked when a view has been scrolled.

Parameters
listener ViewTreeObserver.OnScrollChangedListener: The callback to add

Throws
IllegalStateException If isAlive() returns false

addOnSystemGestureExclusionRectsChangedListener

Added in API level 29
public void addOnSystemGestureExclusionRectsChangedListener (Consumer<List<Rect>> listener)

Add a listener to be notified when the tree's transformed gesture exclusion rects change. This could be the result of an animation or other layout change, or a view calling View#setSystemGestureExclusionRects(List).

Parameters
listener Consumer: listener to add This value cannot be null.

addOnTouchModeChangeListener

Added in API level 1
public void addOnTouchModeChangeListener (ViewTreeObserver.OnTouchModeChangeListener listener)

Register a callback to be invoked when the invoked when the touch mode changes.

Parameters
listener ViewTreeObserver.OnTouchModeChangeListener: The callback to add

Throws
IllegalStateException If isAlive() returns false

addOnWindowAttachListener

Added in API level 18
public void addOnWindowAttachListener (ViewTreeObserver.OnWindowAttachListener listener)

Register a callback to be invoked when the view hierarchy is attached to a window.

Parameters
listener ViewTreeObserver.OnWindowAttachListener: The callback to add

Throws
IllegalStateException If isAlive() returns false

addOnWindowFocusChangeListener

Added in API level 18
public void addOnWindowFocusChangeListener (ViewTreeObserver.OnWindowFocusChangeListener listener)

Register a callback to be invoked when the window focus state within the view tree changes.

Parameters
listener ViewTreeObserver.OnWindowFocusChangeListener: The callback to add

Throws
IllegalStateException If isAlive() returns false

addOnWindowVisibilityChangeListener

Added in API level 34
public void addOnWindowVisibilityChangeListener (ViewTreeObserver.OnWindowVisibilityChangeListener listener)

Register a callback to be invoked when the window visibility changes.

Parameters
listener ViewTreeObserver.OnWindowVisibilityChangeListener: The callback to add This value cannot be null.

Throws
IllegalStateException If isAlive() returns false

dispatchOnDraw

Added in API level 16
public void dispatchOnDraw ()

Notifies registered listeners that the drawing pass is about to start.

dispatchOnGlobalLayout

Added in API level 1
public void dispatchOnGlobalLayout ()

Notifies registered listeners that a global layout happened. This can be called manually if you are forcing a layout on a View or a hierarchy of Views that are not attached to a Window or in the GONE state.

dispatchOnPreDraw

Added in API level 1
public boolean dispatchOnPreDraw ()

Notifies registered listeners that the drawing pass is about to start. If a listener returns true, then the drawing pass is canceled and rescheduled. This can be called manually if you are forcing the drawing on a View or a hierarchy of Views that are not attached to a Window or in the GONE state.

Returns
boolean True if the current draw should be canceled and rescheduled, false otherwise.

isAlive

Added in API level 1
public boolean isAlive ()

Indicates whether this ViewTreeObserver is alive. When an observer is not alive, any call to a method (except this one) will throw an exception. If an application keeps a long-lived reference to this ViewTreeObserver, it should always check for the result of this method before calling any other method.

Returns
boolean True if this object is alive and be used, false otherwise.

registerFrameCommitCallback

Added in API level 29
public void registerFrameCommitCallback (Runnable callback)

Adds a frame commit callback. This callback will be invoked when the current rendering content has been rendered into a frame and submitted to the swap chain. The frame may not currently be visible on the display when this is invoked, but it has been submitted. This callback is useful in combination with PixelCopy to capture the current rendered content of the UI reliably. Note: Only works with hardware rendering. Does nothing otherwise.

Parameters
callback Runnable: The callback to invoke when the frame is committed. This value cannot be null.

removeGlobalOnLayoutListener

Added in API level 1
Deprecated in API level 16
public void removeGlobalOnLayoutListener (ViewTreeObserver.OnGlobalLayoutListener victim)

This method was deprecated in API level 16.
Use #removeOnGlobalLayoutListener instead

Remove a previously installed global layout callback

Parameters
victim ViewTreeObserver.OnGlobalLayoutListener: The callback to remove

Throws
IllegalStateException If isAlive() returns false

removeOnDrawListener

Added in API level 16
public void removeOnDrawListener (ViewTreeObserver.OnDrawListener victim)

Remove a previously installed pre-draw callback.

Note: this method cannot be invoked from ViewTreeObserver.OnDrawListener.onDraw().

Parameters
victim ViewTreeObserver.OnDrawListener: The callback to remove

Throws
IllegalStateException If isAlive() returns false

removeOnGlobalFocusChangeListener

Added in API level 1
public void removeOnGlobalFocusChangeListener (ViewTreeObserver.OnGlobalFocusChangeListener victim)

Remove a previously installed focus change callback.

Parameters
victim ViewTreeObserver.OnGlobalFocusChangeListener: The callback to remove

Throws
IllegalStateException If isAlive() returns false

removeOnGlobalLayoutListener

Added in API level 16
public void removeOnGlobalLayoutListener (ViewTreeObserver.OnGlobalLayoutListener victim)

Remove a previously installed global layout callback

Parameters
victim ViewTreeObserver.OnGlobalLayoutListener: The callback to remove

Throws
IllegalStateException If isAlive() returns false

removeOnPreDrawListener

Added in API level 1
public void removeOnPreDrawListener (ViewTreeObserver.OnPreDrawListener victim)

Remove a previously installed pre-draw callback

Parameters
victim ViewTreeObserver.OnPreDrawListener: The callback to remove

Throws
IllegalStateException If isAlive() returns false

removeOnScrollChangedListener

Added in API level 3
public void removeOnScrollChangedListener (ViewTreeObserver.OnScrollChangedListener victim)

Remove a previously installed scroll-changed callback

Parameters
victim ViewTreeObserver.OnScrollChangedListener: The callback to remove

Throws
IllegalStateException If isAlive() returns false

removeOnSystemGestureExclusionRectsChangedListener

Added in API level 29
public void removeOnSystemGestureExclusionRectsChangedListener (Consumer<List<Rect>> listener)

Unsubscribe the given listener from gesture exclusion rect changes.

Parameters
listener Consumer: This value cannot be null.

removeOnTouchModeChangeListener

Added in API level 1
public void removeOnTouchModeChangeListener (ViewTreeObserver.OnTouchModeChangeListener victim)

Remove a previously installed touch mode change callback

Parameters
victim ViewTreeObserver.OnTouchModeChangeListener: The callback to remove

Throws
IllegalStateException If isAlive() returns false

removeOnWindowAttachListener

Added in API level 18
public void removeOnWindowAttachListener (ViewTreeObserver.OnWindowAttachListener victim)

Remove a previously installed window attach callback.

Parameters
victim ViewTreeObserver.OnWindowAttachListener: The callback to remove

Throws
IllegalStateException If isAlive() returns false

removeOnWindowFocusChangeListener

Added in API level 18
public void removeOnWindowFocusChangeListener (ViewTreeObserver.OnWindowFocusChangeListener victim)

Remove a previously installed window focus change callback.

Parameters
victim ViewTreeObserver.OnWindowFocusChangeListener: The callback to remove

Throws
IllegalStateException If isAlive() returns false

removeOnWindowVisibilityChangeListener

Added in API level 34
public void removeOnWindowVisibilityChangeListener (ViewTreeObserver.OnWindowVisibilityChangeListener victim)

Remove a previously installed window visibility callback.

Parameters
victim ViewTreeObserver.OnWindowVisibilityChangeListener: The callback to remove This value cannot be null.

Throws
IllegalStateException If isAlive() returns false

unregisterFrameCommitCallback

Added in API level 29
public boolean unregisterFrameCommitCallback (Runnable callback)

Attempts to remove the given callback from the list of pending frame complete callbacks.

Parameters
callback Runnable: The callback to remove This value cannot be null.

Returns
boolean Whether or not the callback was removed. If this returns true the callback will not be invoked. If false is returned then the callback was either never added or may already be pending execution and was unable to be removed