added in version 25.4.0
belongs to Maven artifact


public abstract class Parallax
extends Object

   ↳<PropertyT extends android.util.Property>
Known Direct Subclasses
Known Indirect Subclasses

Parallax tracks a list of dynamic Propertys typically representing foreground UI element positions on screen. Parallax keeps a list of ParallaxEffect objects which define rules to mapping property values to ParallaxTarget.

Example: // when Property "var1" changes from 15 to max value, perform parallax effect to // change myView's translationY from 0 to 100. Parallax parallax = new Parallax() {...}; p1 = parallax.addProperty("var1"); parallax.addEffect(, p1.atMax()) .target(myView, PropertyValuesHolder.ofFloat("translationY", 0, 100));

To create a ParallaxEffect, user calls addEffect(PropertyMarkerValue[]) with a list of Parallax.PropertyMarkerValue which defines the range of Parallax.IntProperty or Parallax.FloatProperty. Then user adds ParallaxTarget into ParallaxEffect.

App may subclass Parallax.IntProperty or Parallax.FloatProperty to supply additional information about how to retrieve Property value. 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 updateValues() to update property values and perform ParallaxEffects. Subclass may call updateValues() automatically e.g. RecyclerViewParallax calls updateValues() in RecyclerView scrolling. App might call updateValues() manually when Parallax is unaware of the value change. For example, when a slide transition is running, RecyclerViewParallax is unaware of translation value changes; it's the app's responsibility to call updateValues() in every frame of animation.


Nested classes

class Parallax.FloatProperty

FloatProperty provide access to an index based integer type property inside Parallax

class Parallax.IntProperty

IntProperty provide access to an index based integer type property inside Parallax

class Parallax.PropertyMarkerValue<PropertyT>

Class holding a fixed value for a Property in Parallax

Public constructors


Public methods

ParallaxEffect addEffect(PropertyMarkerValue... ranges)

Create a ParallaxEffect object that will track source variable changes within a provided set of ranges.

final PropertyT addProperty(String name)

Add a new IntProperty in the Parallax object.

abstract PropertyT createProperty(String name, int index)

Create a new Property object.

List<ParallaxEffect> getEffects()

Returns a list of ParallaxEffect object which defines rules to perform mapping to multiple ParallaxTargets.

abstract float getMaxValue()

Return the max value which is typically size of parent visible area, e.g.