# EdgeEffectCompat

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

*** ** * ** ***


```
public final class EdgeEffectCompat
```

<br />

*** ** * ** ***

Helper for accessing `https://developer.android.com/reference/android/widget/EdgeEffect.html`. This class is used to access `https://developer.android.com/reference/android/widget/EdgeEffect.html` on platform versions that support it. When running on older platforms it will result in no-ops. It should be used by views that wish to use the standard Android visual effects at the edges of scrolling containers.

## Summary

| ### Public constructors |
|---|
| `[EdgeEffectCompat](https://developer.android.com/reference/androidx/core/widget/EdgeEffectCompat#EdgeEffectCompat(android.content.Context))(https://developer.android.com/reference/android/content/Context.html context)` **This method is deprecated.** Use `https://developer.android.com/reference/android/widget/EdgeEffect.html` constructor directly or `https://developer.android.com/reference/androidx/core/widget/EdgeEffectCompat#create(android.content.Context,android.util.AttributeSet)`. <br /> |

| ### Public methods |
|---|---|
| `static @https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html https://developer.android.com/reference/android/widget/EdgeEffect.html` | `https://developer.android.com/reference/androidx/core/widget/EdgeEffectCompat#create(android.content.Context,android.util.AttributeSet)(@https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html https://developer.android.com/reference/android/content/Context.html context, @https://jspecify.dev/docs/api/org/jspecify/annotations/Nullable.html https://developer.android.com/reference/android/util/AttributeSet.html attrs)` Constructs and returns a new EdgeEffect themed using the given context, allowing support for the view attributes. |
| `boolean` | `[draw](https://developer.android.com/reference/androidx/core/widget/EdgeEffectCompat#draw(android.graphics.Canvas))(https://developer.android.com/reference/android/graphics/Canvas.html canvas)` **This method is deprecated.** Use `https://developer.android.com/reference/android/widget/EdgeEffect.html#draw(android.graphics.Canvas)` directly. <br /> |
| `void` | `[finish](https://developer.android.com/reference/androidx/core/widget/EdgeEffectCompat#finish())()` **This method is deprecated.** Use `https://developer.android.com/reference/android/widget/EdgeEffect.html#finish()` directly. <br /> |
| `static float` | `https://developer.android.com/reference/androidx/core/widget/EdgeEffectCompat#getDistance(android.widget.EdgeEffect)(@https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html https://developer.android.com/reference/android/widget/EdgeEffect.html edgeEffect)` Returns the pull distance needed to be released to remove the showing effect. |
| `boolean` | `[isFinished](https://developer.android.com/reference/androidx/core/widget/EdgeEffectCompat#isFinished())()` **This method is deprecated.** Use `https://developer.android.com/reference/android/widget/EdgeEffect.html#isFinished()` directly. <br /> |
| `boolean` | `[onAbsorb](https://developer.android.com/reference/androidx/core/widget/EdgeEffectCompat#onAbsorb(int))(int velocity)` **This method is deprecated.** Use `https://developer.android.com/reference/android/widget/EdgeEffect.html#onAbsorb(int)` directly. <br /> |
| `boolean` | `[onPull](https://developer.android.com/reference/androidx/core/widget/EdgeEffectCompat#onPull(float))(float deltaDistance)` **This method is deprecated.** Use `https://developer.android.com/reference/androidx/core/widget/EdgeEffectCompat#onPull(android.widget.EdgeEffect,float,float)`. <br /> |
| `boolean` | `[onPull](https://developer.android.com/reference/androidx/core/widget/EdgeEffectCompat#onPull(float,float))(float deltaDistance, float displacement)` **This method is deprecated.** Use `https://developer.android.com/reference/android/widget/EdgeEffect.html#onPull(float)` directly. <br /> |
| `static void` | `https://developer.android.com/reference/androidx/core/widget/EdgeEffectCompat#onPull(android.widget.EdgeEffect,float,float)( @https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html https://developer.android.com/reference/android/widget/EdgeEffect.html edgeEffect, float deltaDistance, float displacement )` A view should call this when content is pulled away from an edge by the user. |
| `static float` | `https://developer.android.com/reference/androidx/core/widget/EdgeEffectCompat#onPullDistance(android.widget.EdgeEffect,float,float)( @https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html https://developer.android.com/reference/android/widget/EdgeEffect.html edgeEffect, float deltaDistance, float displacement )` A view should call this when content is pulled away from an edge by the user. |
| `boolean` | `[onRelease](https://developer.android.com/reference/androidx/core/widget/EdgeEffectCompat#onRelease())()` **This method is deprecated.** Use `https://developer.android.com/reference/android/widget/EdgeEffect.html#onRelease()` directly. <br /> |
| `void` | `[setSize](https://developer.android.com/reference/androidx/core/widget/EdgeEffectCompat#setSize(int,int))(int width, int height)` **This method is deprecated.** Use `https://developer.android.com/reference/android/widget/EdgeEffect.html#setSize(int, int)` directly. <br /> |

## Public constructors

### EdgeEffectCompat

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

```
public [EdgeEffectCompat](https://developer.android.com/reference/androidx/core/widget/EdgeEffectCompat#EdgeEffectCompat(android.content.Context))(Context context)
```

> [!CAUTION]
> **This method is deprecated.**   
>
> Use `https://developer.android.com/reference/android/widget/EdgeEffect.html` constructor directly or `https://developer.android.com/reference/androidx/core/widget/EdgeEffectCompat#create(android.content.Context,android.util.AttributeSet)`.

Construct a new EdgeEffect themed using the given context.

Note: On platform versions that do not support EdgeEffect, all operations on the newly constructed object will be mocked/no-ops.

| Parameters |
|---|---|
| `https://developer.android.com/reference/android/content/Context.html context` | Context to use for theming the effect |

## Public methods

### create

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

```
public static @NonNull EdgeEffect create(@NonNull Context context, @Nullable AttributeSet attrs)
```

Constructs and returns a new EdgeEffect themed using the given context, allowing support for the view attributes.

| Parameters |
|---|---|
| `@https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html https://developer.android.com/reference/android/content/Context.html context` | Context to use for theming the effect |
| `@https://jspecify.dev/docs/api/org/jspecify/annotations/Nullable.html https://developer.android.com/reference/android/util/AttributeSet.html attrs` | The attributes of the XML tag that is inflating the view |

### draw

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

```
public boolean [draw](https://developer.android.com/reference/androidx/core/widget/EdgeEffectCompat#draw(android.graphics.Canvas))(Canvas canvas)
```

> [!CAUTION]
> **This method is deprecated.**   
>
> Use `https://developer.android.com/reference/android/widget/EdgeEffect.html#draw(android.graphics.Canvas)` directly.

Draw into the provided canvas. Assumes that the canvas has been rotated accordingly and the size has been set. The effect will be drawn the full width of X=0 to X=width, beginning from Y=0 and extending to some factor \<1.f of height.

| Parameters |
|---|---|
| `https://developer.android.com/reference/android/graphics/Canvas.html canvas` | Canvas to draw into |

| Returns |
|---|---|
| `boolean` | true if drawing should continue beyond this frame to continue the animation |

### finish

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

```
public void [finish](https://developer.android.com/reference/androidx/core/widget/EdgeEffectCompat#finish())()
```

> [!CAUTION]
> **This method is deprecated.**   
>
> Use `https://developer.android.com/reference/android/widget/EdgeEffect.html#finish()` directly.

Immediately finish the current animation. After this call `https://developer.android.com/reference/androidx/core/widget/EdgeEffectCompat#isFinished()` will return true.

### getDistance

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

```
public static float getDistance(@NonNull EdgeEffect edgeEffect)
```

Returns the pull distance needed to be released to remove the showing effect. It is determined by the `https://developer.android.com/reference/androidx/core/widget/EdgeEffectCompat#onPull(float,float)``deltaDistance` and any animating values, including from `https://developer.android.com/reference/androidx/core/widget/EdgeEffectCompat#onAbsorb(int)` and `https://developer.android.com/reference/androidx/core/widget/EdgeEffectCompat#onRelease()`. This can be used in conjunction with `https://developer.android.com/reference/androidx/core/widget/EdgeEffectCompat#onPullDistance(android.widget.EdgeEffect,float,float)` to release the currently showing effect. On API level 30 and earlier, this will return 0.

| Returns |
|---|---|
| `float` | The pull distance that must be released to remove the showing effect or 0 for API level 30 and earlier. |

### isFinished

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

```
public boolean [isFinished](https://developer.android.com/reference/androidx/core/widget/EdgeEffectCompat#isFinished())()
```

> [!CAUTION]
> **This method is deprecated.**   
>
> Use `https://developer.android.com/reference/android/widget/EdgeEffect.html#isFinished()` directly.

Reports if this EdgeEffectCompat's animation is finished. If this method returns false after a call to `https://developer.android.com/reference/androidx/core/widget/EdgeEffectCompat#draw(android.graphics.Canvas)` the host widget should schedule another drawing pass to continue the animation.

| Returns |
|---|---|
| `boolean` | true if animation is finished, false if drawing should continue on the next frame. |

### onAbsorb

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

```
public boolean [onAbsorb](https://developer.android.com/reference/androidx/core/widget/EdgeEffectCompat#onAbsorb(int))(int velocity)
```

> [!CAUTION]
> **This method is deprecated.**   
>
> Use `https://developer.android.com/reference/android/widget/EdgeEffect.html#onAbsorb(int)` directly.

Call when the effect absorbs an impact at the given velocity. Used when a fling reaches the scroll boundary.

When using a `https://developer.android.com/reference/android/widget/Scroller.html` or `https://developer.android.com/reference/android/widget/OverScroller.html`, the method `getCurrVelocity` will provide a reasonable approximation to use here.

| Parameters |
|---|---|
| `int velocity` | Velocity at impact in pixels per second. |

| Returns |
|---|---|
| `boolean` | true if the host view should invalidate, false if it should not. |

### onPull

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

```
public boolean [onPull](https://developer.android.com/reference/androidx/core/widget/EdgeEffectCompat#onPull(float))(float deltaDistance)
```

> [!CAUTION]
> **This method is deprecated.**   
>
> Use `https://developer.android.com/reference/androidx/core/widget/EdgeEffectCompat#onPull(android.widget.EdgeEffect,float,float)`.

A view should call this when content is pulled away from an edge by the user. This will update the state of the current visual effect and its associated animation. The host view should always `https://developer.android.com/reference/android/view/View.html#invalidate()` if this method returns true and draw the results accordingly.

| Parameters |
|---|---|
| `float deltaDistance` | Change in distance since the last call. Values may be 0 (no change) to 1.f (full length of the view) or negative values to express change back toward the edge reached to initiate the effect. |

| Returns |
|---|---|
| `boolean` | true if the host view should call invalidate, false if it should not. |

### onPull

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

```
public boolean [onPull](https://developer.android.com/reference/androidx/core/widget/EdgeEffectCompat#onPull(float,float))(float deltaDistance, float displacement)
```

> [!CAUTION]
> **This method is deprecated.**   
>
> Use `https://developer.android.com/reference/android/widget/EdgeEffect.html#onPull(float)` directly.

A view should call this when content is pulled away from an edge by the user. This will update the state of the current visual effect and its associated animation. The host view should always `https://developer.android.com/reference/android/view/View.html#invalidate()` if this method returns true and draw the results accordingly. Views using `https://developer.android.com/reference/android/widget/EdgeEffect.html` should favor `https://developer.android.com/reference/android/widget/EdgeEffect.html#onPull(float, float)` when the displacement of the pull point is known.

| Parameters |
|---|---|
| `float deltaDistance` | Change in distance since the last call. Values may be 0 (no change) to 1.f (full length of the view) or negative values to express change back toward the edge reached to initiate the effect. |
| `float displacement` | The displacement from the starting side of the effect of the point initiating the pull. In the case of touch this is the finger position. Values may be from 0-1. |

| Returns |
|---|---|
| `boolean` | true if the host view should call invalidate, false if it should not. |

### onPull

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

```
public static void onPull(
    @NonNull EdgeEffect edgeEffect,
    float deltaDistance,
    float displacement
)
```

A view should call this when content is pulled away from an edge by the user. This will update the state of the current visual effect and its associated animation. The host view should always `https://developer.android.com/reference/android/view/View.html#invalidate()` after call this method and draw the results accordingly.

| Parameters |
|---|---|
| `@https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html https://developer.android.com/reference/android/widget/EdgeEffect.html edgeEffect` | The EdgeEffect that is attached to the view that is getting pulled away from an edge by the user. |
| `float deltaDistance` | Change in distance since the last call. Values may be 0 (no change) to 1.f (full length of the view) or negative values to express change back toward the edge reached to initiate the effect. |
| `float displacement` | The displacement from the starting side of the effect of the point initiating the pull. In the case of touch this is the finger position. Values may be from 0-1. |

| See also |
|---|---|
| `https://developer.android.com/reference/android/widget/EdgeEffect.html#onPull(float, float)` |   |

### onPullDistance

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

```
public static float onPullDistance(
    @NonNull EdgeEffect edgeEffect,
    float deltaDistance,
    float displacement
)
```

A view should call this when content is pulled away from an edge by the user. This will update the state of the current visual effect and its associated animation. The host view should always `https://developer.android.com/reference/android/view/View.html#invalidate()` after this and draw the results accordingly. This works similarly to `https://developer.android.com/reference/androidx/core/widget/EdgeEffectCompat#onPull(float,float)`, but returns the amount of `deltaDistance` that has been consumed. For API level 31 and above, if the `https://developer.android.com/reference/androidx/core/widget/EdgeEffectCompat#getDistance(android.widget.EdgeEffect)` is currently 0 and `deltaDistance` is negative, this function will return 0 and the drawn value will remain unchanged. For API level 30 and below, this will consume all of the provided value and return `deltaDistance`. This method can be used to reverse the effect from a pull or absorb and partially consume some of a motion:

```
    if (deltaY < 0 && EdgeEffectCompat.getDistance(edgeEffect) != 0) {
        float displacement = x / getWidth();
        float dist = deltaY / getHeight();
        float consumed = EdgeEffectCompat.onPullDistance(edgeEffect, dist, displacement);
        deltaY -= consumed * getHeight();
        if (edgeEffect.getDistance() == 0f) edgeEffect.onRelease();
    }
```

| Parameters |
|---|---|
| `@https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html https://developer.android.com/reference/android/widget/EdgeEffect.html edgeEffect` | EdgeEffect to use. |
| `float deltaDistance` | Change in distance since the last call. Values may be 0 (no change) to 1.f (full length of the view) or negative values to express change back toward the edge reached to initiate the effect. |
| `float displacement` | The displacement from the starting side of the effect of the point initiating the pull. In the case of touch this is the finger position. Values may be from 0-1. |

| Returns |
|---|---|
| `float` | The amount of `deltaDistance` that was consumed, a number between 0 and `deltaDistance`. |

### onRelease

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

```
public boolean [onRelease](https://developer.android.com/reference/androidx/core/widget/EdgeEffectCompat#onRelease())()
```

> [!CAUTION]
> **This method is deprecated.**   
>
> Use `https://developer.android.com/reference/android/widget/EdgeEffect.html#onRelease()` directly.

Call when the object is released after being pulled. This will begin the "decay" phase of the effect. After calling this method the host view should `https://developer.android.com/reference/android/view/View.html#invalidate()` if this method returns true and thereby draw the results accordingly.

| Returns |
|---|---|
| `boolean` | true if the host view should invalidate, false if it should not. |

### setSize

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

```
public void [setSize](https://developer.android.com/reference/androidx/core/widget/EdgeEffectCompat#setSize(int,int))(int width, int height)
```

> [!CAUTION]
> **This method is deprecated.**   
>
> Use `https://developer.android.com/reference/android/widget/EdgeEffect.html#setSize(int, int)` directly.

Set the size of this edge effect in pixels.

| Parameters |
|---|---|
| `int width` | Effect width in pixels |
| `int height` | Effect height in pixels |