# WindowInsetsAnimationCompat.Callback

Artifact: [androidx.core:core](https://developer.android.com/jetpack/androidx/releases/core) [View Source](https://cs.android.com/search?q=file:androidx/core/view/WindowInsetsAnimationCompat.java+class:androidx.core.view.WindowInsetsAnimationCompat.Callback) Added in [1.5.0](https://developer.android.com/jetpack/androidx/releases/core#1.5.0)

*** ** * ** ***


```
public abstract class WindowInsetsAnimationCompat.Callback
```

<br />

*** ** * ** ***

Interface that allows the application to listen to animation events for windows that cause insets.

## Summary

| ### Constants |
|---|---|
| `static final int` | `https://developer.android.com/reference/androidx/core/view/WindowInsetsAnimationCompat.Callback#DISPATCH_MODE_CONTINUE_ON_SUBTREE() = 1` Return value for `https://developer.android.com/reference/androidx/core/view/WindowInsetsAnimationCompat.Callback#getDispatchMode()`: Dispatching of animation events should continue in the view hierarchy. |
| `static final int` | `https://developer.android.com/reference/androidx/core/view/WindowInsetsAnimationCompat.Callback#DISPATCH_MODE_STOP() = 0` Return value for `https://developer.android.com/reference/androidx/core/view/WindowInsetsAnimationCompat.Callback#getDispatchMode()`: Dispatching of animation events should stop at this level in the view hierarchy, and no animation events should be dispatch to the subtree of the view hierarchy. |

| ### Public constructors |
|---|
| `https://developer.android.com/reference/androidx/core/view/WindowInsetsAnimationCompat.Callback#Callback(int)(int dispatchMode)` Creates a new `https://developer.android.com/reference/androidx/core/view/WindowInsetsAnimationCompat` callback with the given `https://developer.android.com/reference/androidx/core/view/WindowInsetsAnimationCompat.Callback#getDispatchMode()`. |

| ### Public methods |
|---|---|
| `final int` | `https://developer.android.com/reference/androidx/core/view/WindowInsetsAnimationCompat.Callback#getDispatchMode()()` Retrieves the dispatch mode of this listener. |
| `void` | `https://developer.android.com/reference/androidx/core/view/WindowInsetsAnimationCompat.Callback#onEnd(androidx.core.view.WindowInsetsAnimationCompat)(@https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html https://developer.android.com/reference/androidx/core/view/WindowInsetsAnimationCompat animation)` Called when an insets animation has ended. |
| `void` | `https://developer.android.com/reference/androidx/core/view/WindowInsetsAnimationCompat.Callback#onPrepare(androidx.core.view.WindowInsetsAnimationCompat)(@https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html https://developer.android.com/reference/androidx/core/view/WindowInsetsAnimationCompat animation)` Called when an insets animation is about to start and before the views have been re-laid out due to an animation. |
| `abstract @https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html https://developer.android.com/reference/androidx/core/view/WindowInsetsCompat` | `https://developer.android.com/reference/androidx/core/view/WindowInsetsAnimationCompat.Callback#onProgress(androidx.core.view.WindowInsetsCompat,java.util.List<androidx.core.view.WindowInsetsAnimationCompat>)( @https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html https://developer.android.com/reference/androidx/core/view/WindowInsetsCompat insets, @https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html https://developer.android.com/reference/java/util/List.html<https://developer.android.com/reference/androidx/core/view/WindowInsetsAnimationCompat> runningAnimations )` Called when the insets change as part of running an animation. |
| `@https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html https://developer.android.com/reference/androidx/core/view/WindowInsetsAnimationCompat.BoundsCompat` | `https://developer.android.com/reference/androidx/core/view/WindowInsetsAnimationCompat.Callback#onStart(androidx.core.view.WindowInsetsAnimationCompat,androidx.core.view.WindowInsetsAnimationCompat.BoundsCompat)( @https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html https://developer.android.com/reference/androidx/core/view/WindowInsetsAnimationCompat animation, @https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html https://developer.android.com/reference/androidx/core/view/WindowInsetsAnimationCompat.BoundsCompat bounds )` Called when an insets animation gets started. |

## Constants

### DISPATCH_MODE_CONTINUE_ON_SUBTREE

Added in [1.5.0](https://developer.android.com/jetpack/androidx/releases/core#1.5.0)

```
public static final int DISPATCH_MODE_CONTINUE_ON_SUBTREE = 1
```

Return value for `https://developer.android.com/reference/androidx/core/view/WindowInsetsAnimationCompat.Callback#getDispatchMode()`: Dispatching of animation events should continue in the view hierarchy.

### DISPATCH_MODE_STOP

Added in [1.5.0](https://developer.android.com/jetpack/androidx/releases/core#1.5.0)

```
public static final int DISPATCH_MODE_STOP = 0
```

Return value for `https://developer.android.com/reference/androidx/core/view/WindowInsetsAnimationCompat.Callback#getDispatchMode()`: Dispatching of animation events should stop at this level in the view hierarchy, and no animation events should be dispatch to the subtree of the view hierarchy.

## Public constructors

### Callback

Added in [1.5.0](https://developer.android.com/jetpack/androidx/releases/core#1.5.0)

```
public Callback(int dispatchMode)
```

Creates a new `https://developer.android.com/reference/androidx/core/view/WindowInsetsAnimationCompat` callback with the given `https://developer.android.com/reference/androidx/core/view/WindowInsetsAnimationCompat.Callback#getDispatchMode()`.

| Parameters |
|---|---|
| `int dispatchMode` | The dispatch mode for this callback. See `https://developer.android.com/reference/androidx/core/view/WindowInsetsAnimationCompat.Callback#getDispatchMode()`. |

## Public methods

### getDispatchMode

Added in [1.5.0](https://developer.android.com/jetpack/androidx/releases/core#1.5.0)

```
public final int getDispatchMode()
```

Retrieves the dispatch mode of this listener. Dispatch of the all animation events is hierarchical: It will starts at the root of the view hierarchy and then traverse it and invoke the callback of the specific `https://developer.android.com/reference/android/view/View.html` that is being traversed. The method may return either `https://developer.android.com/reference/androidx/core/view/WindowInsetsAnimationCompat.Callback#DISPATCH_MODE_CONTINUE_ON_SUBTREE()` to indicate that animation events should be propagated to the subtree of the view hierarchy, or `https://developer.android.com/reference/androidx/core/view/WindowInsetsAnimationCompat.Callback#DISPATCH_MODE_STOP()` to stop dispatching. In that case, all animation callbacks related to the animation passed in will be stopped from propagating to the subtree of the hierarchy.

Also note that `https://developer.android.com/reference/androidx/core/view/WindowInsetsAnimationCompat.Callback#DISPATCH_MODE_STOP()` behaves the same way as returning `https://developer.android.com/reference/androidx/core/view/WindowInsetsCompat#CONSUMED()` during the regular insets dispatch in `https://developer.android.com/reference/android/view/View.html#onApplyWindowInsets(android.view.WindowInsets)`.

| Returns |
|---|---|
| `int` | Either `https://developer.android.com/reference/androidx/core/view/WindowInsetsAnimationCompat.Callback#DISPATCH_MODE_CONTINUE_ON_SUBTREE()` to indicate that dispatching of animation events will continue to the subtree of the view hierarchy, or `https://developer.android.com/reference/androidx/core/view/WindowInsetsAnimationCompat.Callback#DISPATCH_MODE_STOP()` to indicate that animation events will stop dispatching. |

### onEnd

Added in [1.5.0](https://developer.android.com/jetpack/androidx/releases/core#1.5.0)

```
public void onEnd(@NonNull WindowInsetsAnimationCompat animation)
```

Called when an insets animation has ended.

| Parameters |
|---|---|
| `@https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html https://developer.android.com/reference/androidx/core/view/WindowInsetsAnimationCompat animation` | The animation that has ended. This will be the same instance as passed into `https://developer.android.com/reference/androidx/core/view/WindowInsetsAnimationCompat.Callback#onStart(androidx.core.view.WindowInsetsAnimationCompat,androidx.core.view.WindowInsetsAnimationCompat.BoundsCompat)` |

### onPrepare

Added in [1.5.0](https://developer.android.com/jetpack/androidx/releases/core#1.5.0)

```
public void onPrepare(@NonNull WindowInsetsAnimationCompat animation)
```

Called when an insets animation is about to start and before the views have been re-laid out due to an animation.

This ordering allows the application to inspect the end state after the animation has finished, and then revert to the starting state of the animation in the first `https://developer.android.com/reference/androidx/core/view/WindowInsetsAnimationCompat.Callback#onProgress(androidx.core.view.WindowInsetsCompat,java.util.List<androidx.core.view.WindowInsetsAnimationCompat>)` callback by using post-layout view properties like `https://developer.android.com/reference/android/view/View.html#setX(float)` and related methods.

The ordering of events during an insets animation is the following:

- Application calls `https://developer.android.com/reference/androidx/core/view/WindowInsetsControllerCompat#hide(int)`, `https://developer.android.com/reference/androidx/core/view/WindowInsetsControllerCompat#show(int)`, `https://developer.android.com/reference/androidx/core/view/WindowInsetsControllerCompat#controlWindowInsetsAnimation(int,long,android.view.animation.Interpolator,android.os.CancellationSignal,androidx.core.view.WindowInsetsAnimationControlListenerCompat)`
- onPrepare is called on the view hierarchy listeners
- `https://developer.android.com/reference/android/view/View.html#onApplyWindowInsets(android.view.WindowInsets)` will be called with the end state of the animation
- View hierarchy gets laid out according to the changes the application has requested due to the new insets being dispatched
- `https://developer.android.com/reference/androidx/core/view/WindowInsetsAnimationCompat.Callback#onStart(androidx.core.view.WindowInsetsAnimationCompat,androidx.core.view.WindowInsetsAnimationCompat.BoundsCompat)` is called *before* the view hierarchy gets drawn in the new laid out state
- `https://developer.android.com/reference/androidx/core/view/WindowInsetsAnimationCompat.Callback#onProgress(androidx.core.view.WindowInsetsCompat,java.util.List<androidx.core.view.WindowInsetsAnimationCompat>)` is called immediately after with the animation start state
- The frame gets drawn.

Note: If the animation is application controlled by using `https://developer.android.com/reference/androidx/core/view/WindowInsetsControllerCompat#controlWindowInsetsAnimation(int,long,android.view.animation.Interpolator,android.os.CancellationSignal,androidx.core.view.WindowInsetsAnimationControlListenerCompat)`, the end state of the animation is undefined as the application may decide on the end state only by passing in `shown` parameter when calling `https://developer.android.com/reference/androidx/core/view/WindowInsetsAnimationControllerCompat#finish(boolean)`. In this situation, the system will dispatch the insets in the opposite visibility state before the animation starts. Example: When controlling the input method with `https://developer.android.com/reference/androidx/core/view/WindowInsetsControllerCompat#controlWindowInsetsAnimation(int,long,android.view.animation.Interpolator,android.os.CancellationSignal,androidx.core.view.WindowInsetsAnimationControlListenerCompat)` and the input method is currently showing, `https://developer.android.com/reference/android/view/View.html#onApplyWindowInsets(android.view.WindowInsets)` will receive a `https://developer.android.com/reference/androidx/core/view/WindowInsetsCompat` instance for which `https://developer.android.com/reference/androidx/core/view/WindowInsetsCompat#isVisible(int)` will return `false` for `https://developer.android.com/reference/androidx/core/view/WindowInsetsCompat.Type#ime()`.

| Parameters |
|---|---|
| `@https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html https://developer.android.com/reference/androidx/core/view/WindowInsetsAnimationCompat animation` | The animation that is about to start. |

### onProgress

Added in [1.5.0](https://developer.android.com/jetpack/androidx/releases/core#1.5.0)

```
public abstract @NonNull WindowInsetsCompat onProgress(
    @NonNull WindowInsetsCompat insets,
    @NonNull List<WindowInsetsAnimationCompat> runningAnimations
)
```

Called when the insets change as part of running an animation. Note that even if multiple animations for different types are running, there will only be one progress callback per frame. The `insets` passed as an argument represents the overall state and will include all types, regardless of whether they are animating or not.

Note that insets dispatch is hierarchical: It will start at the root of the view hierarchy, and then traverse it and invoke the callback of the specific `https://developer.android.com/reference/android/view/View.html` being traversed. The method may return a modified instance by calling `https://developer.android.com/reference/androidx/core/view/WindowInsetsCompat#inset(int,int,int,int)` to indicate that a part of the insets have been used to offset or clip its children, and the children shouldn't worry about that part anymore. Furthermore, if `https://developer.android.com/reference/androidx/core/view/WindowInsetsAnimationCompat.Callback#getDispatchMode()` returns `https://developer.android.com/reference/androidx/core/view/WindowInsetsAnimationCompat.Callback#DISPATCH_MODE_STOP()`, children of this view will not receive the callback anymore.

| Parameters |
|---|---|
| `@https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html https://developer.android.com/reference/androidx/core/view/WindowInsetsCompat insets` | The current insets. |
| `@https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html https://developer.android.com/reference/java/util/List.html<https://developer.android.com/reference/androidx/core/view/WindowInsetsAnimationCompat> runningAnimations` | The currently running animations. |

| Returns |
|---|---|
| `@https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html https://developer.android.com/reference/androidx/core/view/WindowInsetsCompat` | The insets to dispatch to the subtree of the hierarchy. |

### onStart

Added in [1.5.0](https://developer.android.com/jetpack/androidx/releases/core#1.5.0)

```
public @NonNull WindowInsetsAnimationCompat.BoundsCompat onStart(
    @NonNull WindowInsetsAnimationCompat animation,
    @NonNull WindowInsetsAnimationCompat.BoundsCompat bounds
)
```

Called when an insets animation gets started.

This ordering allows the application to inspect the end state after the animation has finished, and then revert to the starting state of the animation in the first `https://developer.android.com/reference/androidx/core/view/WindowInsetsAnimationCompat.Callback#onProgress(androidx.core.view.WindowInsetsCompat,java.util.List<androidx.core.view.WindowInsetsAnimationCompat>)` callback by using post-layout view properties like `https://developer.android.com/reference/android/view/View.html#setX(float)` and related methods.

The ordering of events during an insets animation is the following:

- Application calls `https://developer.android.com/reference/androidx/core/view/WindowInsetsControllerCompat#hide(int)`, `https://developer.android.com/reference/androidx/core/view/WindowInsetsControllerCompat#show(int)`, `https://developer.android.com/reference/androidx/core/view/WindowInsetsControllerCompat#controlWindowInsetsAnimation(int,long,android.view.animation.Interpolator,android.os.CancellationSignal,androidx.core.view.WindowInsetsAnimationControlListenerCompat)`
- onPrepare is called on the view hierarchy listeners
- `https://developer.android.com/reference/android/view/View.html#onApplyWindowInsets(android.view.WindowInsets)` will be called with the end state of the animation
- View hierarchy gets laid out according to the changes the application has requested due to the new insets being dispatched
- `https://developer.android.com/reference/androidx/core/view/WindowInsetsAnimationCompat.Callback#onStart(androidx.core.view.WindowInsetsAnimationCompat,androidx.core.view.WindowInsetsAnimationCompat.BoundsCompat)` is called *before* the view hierarchy gets drawn in the new laid out state
- `https://developer.android.com/reference/androidx/core/view/WindowInsetsAnimationCompat.Callback#onProgress(androidx.core.view.WindowInsetsCompat,java.util.List<androidx.core.view.WindowInsetsAnimationCompat>)` is called immediately after with the animation start state
- The frame gets drawn.

Note that, like `https://developer.android.com/reference/androidx/core/view/WindowInsetsAnimationCompat.Callback#onProgress(androidx.core.view.WindowInsetsCompat,java.util.List<androidx.core.view.WindowInsetsAnimationCompat>)`, dispatch of the animation start event is hierarchical: It will starts at the root of the view hierarchy and then traverse it and invoke the callback of the specific `https://developer.android.com/reference/android/view/View.html` that is being traversed. The method may return a modified instance of the bounds by calling `https://developer.android.com/reference/androidx/core/view/WindowInsetsAnimationCompat.BoundsCompat#inset(androidx.core.graphics.Insets)` to indicate that a part of the insets have been used to offset or clip its children, and the children shouldn't worry about that part anymore. Furthermore, if `https://developer.android.com/reference/androidx/core/view/WindowInsetsAnimationCompat.Callback#getDispatchMode()` returns `https://developer.android.com/reference/androidx/core/view/WindowInsetsAnimationCompat.Callback#DISPATCH_MODE_STOP()`, children of this view will not receive the callback anymore.

| Parameters |
|---|---|
| `@https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html https://developer.android.com/reference/androidx/core/view/WindowInsetsAnimationCompat animation` | The animation that is about to start. |
| `@https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html https://developer.android.com/reference/androidx/core/view/WindowInsetsAnimationCompat.BoundsCompat bounds` | The bounds in which animation happens. |

| Returns |
|---|---|
| `@https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html https://developer.android.com/reference/androidx/core/view/WindowInsetsAnimationCompat.BoundsCompat` | The animation bounds representing the part of the insets that should be dispatched to the subtree of the hierarchy. |