# Parallax

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

*** ** * ** ***


```
public abstract class Parallax<PropertyT extends Property>
```

<br />

Known direct subclasses [RecyclerViewParallax](https://developer.android.com/reference/androidx/leanback/widget/RecyclerViewParallax)

|---|---|
| `https://developer.android.com/reference/androidx/leanback/widget/RecyclerViewParallax` | Implementation of `https://developer.android.com/reference/androidx/leanback/widget/Parallax` class for `https://developer.android.com/reference/androidx/recyclerview/widget/RecyclerView`. |

Known indirect subclasses [DetailsParallax](https://developer.android.com/reference/androidx/leanback/widget/DetailsParallax)

|---|---|
| `https://developer.android.com/reference/androidx/leanback/widget/DetailsParallax` | Subclass of Parallax object that tracks overview row's top and bottom edge in DetailsFragment or DetailsSupportFragment. |

*** ** * ** ***

Parallax tracks a list of dynamic `https://developer.android.com/reference/android/util/Property.html`s typically representing foreground UI element positions on screen. Parallax keeps a list of `https://developer.android.com/reference/androidx/leanback/widget/ParallaxEffect` objects which define rules to mapping property values to `https://developer.android.com/reference/androidx/leanback/widget/ParallaxTarget`.

Example: `
// when Property "var1" changes from 15 to max value, perform parallax effect to
// change myView's translationY from 0 to 100.
Parallaxparallax = new Parallax`

To create a `https://developer.android.com/reference/androidx/leanback/widget/ParallaxEffect`, user calls `https://developer.android.com/reference/androidx/leanback/widget/Parallax#addEffect(androidx.leanback.widget.Parallax.PropertyMarkerValue...)` with a list of `https://developer.android.com/reference/androidx/leanback/widget/Parallax.PropertyMarkerValue` which defines the range of `https://developer.android.com/reference/androidx/leanback/widget/Parallax.IntProperty` or `https://developer.android.com/reference/androidx/leanback/widget/Parallax.FloatProperty`. Then user adds `https://developer.android.com/reference/androidx/leanback/widget/ParallaxTarget` into `https://developer.android.com/reference/androidx/leanback/widget/ParallaxEffect`.

App may subclass `https://developer.android.com/reference/androidx/leanback/widget/Parallax.IntProperty` or `https://developer.android.com/reference/androidx/leanback/widget/Parallax.FloatProperty` to supply additional information about how to retrieve Property value. `https://developer.android.com/reference/androidx/leanback/widget/RecyclerViewParallax` is a great example of Parallax implementation tracking child view positions on screen.

Restrictions of properties

- FloatProperty and IntProperty cannot be mixed in one Parallax
- Values must be in ascending order.
- If the UI element is unknown above screen, use UNKNOWN_BEFORE.
- if the UI element is unknown below screen, use UNKNOWN_AFTER.
- UNKNOWN_BEFORE and UNKNOWN_AFTER are not allowed to be next to each other.

These rules will be verified at runtime.

Subclass must override `https://developer.android.com/reference/androidx/leanback/widget/Parallax#updateValues()` to update property values and perform `https://developer.android.com/reference/androidx/leanback/widget/ParallaxEffect`s. Subclass may call `https://developer.android.com/reference/androidx/leanback/widget/Parallax#updateValues()` automatically e.g. `https://developer.android.com/reference/androidx/leanback/widget/RecyclerViewParallax` calls `https://developer.android.com/reference/androidx/leanback/widget/Parallax#updateValues()` in RecyclerView scrolling. App might call `https://developer.android.com/reference/androidx/leanback/widget/Parallax#updateValues()` manually when Parallax is unaware of the value change. For example, when a slide transition is running, `https://developer.android.com/reference/androidx/leanback/widget/RecyclerViewParallax` is unaware of translation value changes; it's the app's responsibility to call `https://developer.android.com/reference/androidx/leanback/widget/Parallax#updateValues()` in every frame of animation.

| Parameters |
|---|---|
| `<PropertyT extends https://developer.android.com/reference/android/util/Property.html>` | Subclass of `https://developer.android.com/reference/androidx/leanback/widget/Parallax.IntProperty` or `https://developer.android.com/reference/androidx/leanback/widget/Parallax.FloatProperty` |

## Summary

| ### Nested types |
|---|
| `public class https://developer.android.com/reference/androidx/leanback/widget/Parallax.FloatProperty extends https://developer.android.com/reference/android/util/Property.html<https://developer.android.com/reference/androidx/leanback/widget/Parallax, https://developer.android.com/reference/java/lang/Float.html>` FloatProperty provide access to an index based integer type property inside `https://developer.android.com/reference/androidx/leanback/widget/Parallax`. |
| `public class https://developer.android.com/reference/androidx/leanback/widget/Parallax.IntProperty extends https://developer.android.com/reference/android/util/Property.html<https://developer.android.com/reference/androidx/leanback/widget/Parallax, https://developer.android.com/reference/java/lang/Integer.html>` IntProperty provide access to an index based integer type property inside `https://developer.android.com/reference/androidx/leanback/widget/Parallax`. |
| `public class https://developer.android.com/reference/androidx/leanback/widget/Parallax.PropertyMarkerValue<PropertyT>` Class holding a fixed value for a Property in `https://developer.android.com/reference/androidx/leanback/widget/Parallax`. |

| ### Public constructors |
|---|
| `https://developer.android.com/reference/androidx/leanback/widget/Parallax#Parallax()()` |

| ### Public methods |
|---|---|
| `https://developer.android.com/reference/androidx/leanback/widget/ParallaxEffect` | `https://developer.android.com/reference/androidx/leanback/widget/Parallax#addEffect(androidx.leanback.widget.Parallax.PropertyMarkerValue...)(Parallax.PropertyMarkerValue[] ranges)` Create a `https://developer.android.com/reference/androidx/leanback/widget/ParallaxEffect` object that will track source variable changes within a provided set of ranges. |
| `final PropertyT` | `https://developer.android.com/reference/androidx/leanback/widget/Parallax#addProperty(java.lang.String)(https://developer.android.com/reference/java/lang/String.html name)` Add a new IntProperty in the Parallax object. |
| `abstract PropertyT` | `https://developer.android.com/reference/androidx/leanback/widget/Parallax#createProperty(java.lang.String,int)(https://developer.android.com/reference/java/lang/String.html name, int index)` Create a new Property object. |
| `https://developer.android.com/reference/java/util/List.html<https://developer.android.com/reference/androidx/leanback/widget/ParallaxEffect>` | `https://developer.android.com/reference/androidx/leanback/widget/Parallax#getEffects()()` Returns a list of `https://developer.android.com/reference/androidx/leanback/widget/ParallaxEffect` object which defines rules to perform mapping to multiple `https://developer.android.com/reference/androidx/leanback/widget/ParallaxTarget`s. |
| `abstract float` | `https://developer.android.com/reference/androidx/leanback/widget/Parallax#getMaxValue()()` Return the max value which is typically size of parent visible area, e.g. RecyclerView's height if we are tracking Y position of a child. |
| `final https://developer.android.com/reference/java/util/List.html<PropertyT>` | `https://developer.android.com/reference/androidx/leanback/widget/Parallax#getProperties()()` |
| `void` | `https://developer.android.com/reference/androidx/leanback/widget/Parallax#removeAllEffects()()` Remove all `https://developer.android.com/reference/androidx/leanback/widget/ParallaxEffect` objects. |
| `void` | `https://developer.android.com/reference/androidx/leanback/widget/Parallax#removeEffect(androidx.leanback.widget.ParallaxEffect)(https://developer.android.com/reference/androidx/leanback/widget/ParallaxEffect effect)` Remove the `https://developer.android.com/reference/androidx/leanback/widget/ParallaxEffect` object. |
| `void` | `@https://developer.android.com/reference/androidx/annotation/CallSuper https://developer.android.com/reference/androidx/leanback/widget/Parallax#updateValues()()` Update property values and perform `https://developer.android.com/reference/androidx/leanback/widget/ParallaxEffect`s. |

## Public constructors

### Parallax

Added in 1.1.0

```
public Parallax()
```

## Public methods

### addEffect

```
public ParallaxEffect addEffect(Parallax.PropertyMarkerValue[] ranges)
```

Create a `https://developer.android.com/reference/androidx/leanback/widget/ParallaxEffect` object that will track source variable changes within a provided set of ranges.

| Parameters |
|---|---|
| `Parallax.PropertyMarkerValue[] ranges` | A list of marker values that defines the ranges. |

| Returns |
|---|---|
| `https://developer.android.com/reference/androidx/leanback/widget/ParallaxEffect` | Newly created ParallaxEffect object. |

### addProperty

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

```
public final PropertyT addProperty(String name)
```

Add a new IntProperty in the Parallax object. App may override `https://developer.android.com/reference/androidx/leanback/widget/Parallax#createProperty(java.lang.String,int)`.

| Parameters |
|---|---|
| `https://developer.android.com/reference/java/lang/String.html name` | Name of the property. |

| Returns |
|---|---|
| `PropertyT` | Newly created Property object. |

| See also |
|---|---|
| `https://developer.android.com/reference/androidx/leanback/widget/Parallax#createProperty(java.lang.String,int)` |   |

### createProperty

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

```
public abstract PropertyT createProperty(String name, int index)
```

Create a new Property object. App does not directly call this method. See `https://developer.android.com/reference/androidx/leanback/widget/Parallax#addProperty(java.lang.String)`.

| Parameters |
|---|---|
| `https://developer.android.com/reference/java/lang/String.html name` | Name of the property in this Parallax object |
| `int index` | Index of the property in this Parallax object. |

| Returns |
|---|---|
| `PropertyT` | Newly created Property object. |

### getEffects

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

```
public List<ParallaxEffect> getEffects()
```

Returns a list of `https://developer.android.com/reference/androidx/leanback/widget/ParallaxEffect` object which defines rules to perform mapping to multiple `https://developer.android.com/reference/androidx/leanback/widget/ParallaxTarget`s.

| Returns |
|---|---|
| `https://developer.android.com/reference/java/util/List.html<https://developer.android.com/reference/androidx/leanback/widget/ParallaxEffect>` | A list of `https://developer.android.com/reference/androidx/leanback/widget/ParallaxEffect` object. |

### getMaxValue

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

```
public abstract float getMaxValue()
```

Return the max value which is typically size of parent visible area, e.g. RecyclerView's height if we are tracking Y position of a child. The size can be used to calculate marker value using the provided fraction of FloatPropertyMarkerValue.

| Returns |
|---|---|
| `float` | Size of parent visible area. |

### getProperties

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

```
public final List<PropertyT> getProperties()
```

| Returns |
|---|---|
| `https://developer.android.com/reference/java/util/List.html<PropertyT>` | A unmodifiable list of properties. |

### removeAllEffects

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

```
public void removeAllEffects()
```

Remove all `https://developer.android.com/reference/androidx/leanback/widget/ParallaxEffect` objects.

### removeEffect

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

```
public void removeEffect(ParallaxEffect effect)
```

Remove the `https://developer.android.com/reference/androidx/leanback/widget/ParallaxEffect` object.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/leanback/widget/ParallaxEffect effect` | The `https://developer.android.com/reference/androidx/leanback/widget/ParallaxEffect` object to remove. |

### updateValues

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

```
@CallSuper
public void updateValues()
```

Update property values and perform `https://developer.android.com/reference/androidx/leanback/widget/ParallaxEffect`s. Subclass may override and call super.updateValues() after updated properties values.