# 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)

*** ** * ** ***


```
abstract class PathMotion
```

<br />

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

|---|---|
| `https://developer.android.com/reference/kotlin/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/kotlin/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/kotlin/androidx/transition/PathMotion#getPath(float,float,float,float)`.

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

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

## Summary

| ### Public constructors |
|---|
| `https://developer.android.com/reference/kotlin/androidx/transition/PathMotion#PathMotion()()` |
| `https://developer.android.com/reference/kotlin/androidx/transition/PathMotion#PathMotion(android.content.Context,android.util.AttributeSet)(context: https://developer.android.com/reference/android/content/Context.html, attrs: https://developer.android.com/reference/android/util/AttributeSet.html)` |

| ### Public functions |
|---|---|
| `abstract https://developer.android.com/reference/android/graphics/Path.html` | `https://developer.android.com/reference/kotlin/androidx/transition/PathMotion#getPath(float,float,float,float)(startX: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-float/index.html, startY: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-float/index.html, endX: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-float/index.html, endY: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-float/index.html)` 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)

```
PathMotion()
```

### PathMotion

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

```
PathMotion(context: Context, attrs: AttributeSet)
```

## Public functions

### getPath

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

```
abstract fun getPath(startX: Float, startY: Float, endX: Float, endY: Float): Path
```

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

| Parameters |
|---|---|
| `startX: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-float/index.html` | The x coordinate of the starting point. |
| `startY: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-float/index.html` | The y coordinate of the starting point. |
| `endX: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-float/index.html` | The x coordinate of the ending point. |
| `endY: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-float/index.html` | The y coordinate of the ending point. |

| Returns |
|---|---|
| `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)`. |