# PathMotion

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

*** ** * ** ***


```
public abstract class PathMotion
```

<br />

Known direct subclasses [ArcMotion](https://developer.android.com/reference/androidx/transition/ArcMotion), [PatternPathMotion](https://developer.android.com/reference/androidx/transition/PatternPathMotion)

|---|---|
| `https://developer.android.com/reference/androidx/transition/ArcMotion` | A PathMotion that generates a curved path along an arc on an imaginary circle containing the two points. |
| `https://developer.android.com/reference/androidx/transition/PatternPathMotion` | A PathMotion that takes a Path pattern and applies it to the separation between two points. |

*** ** * ** ***

This base class can be extended to provide motion along a Path to Transitions.

Transitions such as `https://developer.android.com/reference/android/transition/ChangeBounds.html` move Views, typically in a straight path between the start and end positions. Applications that desire to have these motions move in a curve can change how Views interpolate in two dimensions by extending PathMotion and implementing `https://developer.android.com/reference/androidx/transition/PathMotion#getPath(float,float,float,float)`.

This may be used in XML as an element inside a transition.

```
<changeBounds>
    <pathMotion class="my.app.transition.MyPathMotion"/>
</changeBounds>
```

## Summary

| ### Public constructors |
|---|
| `https://developer.android.com/reference/androidx/transition/PathMotion#PathMotion()()` |
| `https://developer.android.com/reference/androidx/transition/PathMotion#PathMotion(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/NonNull.html https://developer.android.com/reference/android/util/AttributeSet.html attrs)` |

| ### Public methods |
|---|---|
| `abstract @https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html https://developer.android.com/reference/android/graphics/Path.html` | `https://developer.android.com/reference/androidx/transition/PathMotion#getPath(float,float,float,float)(float startX, float startY, float endX, float endY)` Provide a Path to interpolate between two points `(startX, startY)` and `(endX, endY)`. |

## Public constructors

### PathMotion

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

```
public PathMotion()
```

### PathMotion

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

```
public PathMotion(@NonNull Context context, @NonNull AttributeSet attrs)
```

## Public methods

### getPath

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

```
public abstract @NonNull Path getPath(float startX, float startY, float endX, float endY)
```

Provide a Path to interpolate between two points `(startX, startY)` and `(endX, endY)`. This allows controlled curved motion along two dimensions.

| Parameters |
|---|---|
| `float startX` | The x coordinate of the starting point. |
| `float startY` | The y coordinate of the starting point. |
| `float endX` | The x coordinate of the ending point. |
| `float endY` | The y coordinate of the ending point. |

| Returns |
|---|---|
| `@https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html https://developer.android.com/reference/android/graphics/Path.html` | A Path along which the points should be interpolated. The returned Path must start at point `(startX, startY)`, typically using `https://developer.android.com/reference/android/graphics/Path.html#moveTo(float, float)` and end at `(endX, endY)`. |