MotionLayout
public
class
MotionLayout
extends ConstraintLayout
implements
NestedScrollingParent3
java.lang.Object | ||||
↳ | android.view.View | |||
↳ | android.view.ViewGroup | |||
↳ | androidx.constraintlayout.widget.ConstraintLayout | |||
↳ | androidx.constraintlayout.motion.widget.MotionLayout |
A subclass of ConstraintLayout that supports animating between various states Added in 2.0
A MotionLayout
is a subclass of ConstraintLayout
which supports transitions between between various states (ConstraintSet
)
defined in MotionScene
s.
Note: MotionLayout
is available as a support library that you can use
on Android systems starting with API level 14 (ICS).
MotionLayout
links to and requires a MotionScene
file.
The file contains one top level tag "MotionScene"
LayoutDescription
Tags | Description |
---|---|
<StateSet> |
Describes states supported by the system (optional) |
<ConstraintSet> |
Describes a constraint set |
<Transition> |
Describes a transition between two states or ConstraintSets |
<ViewTransition> |
Describes a transition of a View within a states or ConstraintSets |
Transition
Attributes | Description |
---|---|
android:id | The id of the Transition |
constraintSetStart | ConstraintSet to be used as the start constraints or a layout file to get the constraint from |
constraintSetEnd | ConstraintSet to be used as the end constraints or a layout file to get the constraint from |
motionInterpolator | The ability to set an overall interpolation (easeInOut, linear, etc.) |
duration | Length of time to take to perform the transition |
staggered | Overrides the Manhattan distance from the top most view in the list of views.
|
pathMotionArc | The path will move in arc (quarter ellipses) key words {startVertical | startHorizontal | flip | none } |
autoTransition | automatically transition from one state to another. key words {none, jumpToStart, jumpToEnd, animateToStart, animateToEnd} |
transitionFlags | flags that adjust the behaviour of Transitions. supports {none, beginOnFirstDraw} begin on first draw forces the transition's clock to start when it is first displayed not when the begin is called |
layoutDuringTransition | Configures MotionLayout on how to react to requestLayout calls during transitions. Allowed values are {ignoreRequest, honorRequest} |
<OnSwipe> |
Adds support for touch handling (optional) |
<OnClick> |
Adds support for triggering transition (optional) |
<KeyFrameSet> |
Describes a set of Key object which modify the animation between constraint sets. |
- A transition is typically defined by specifying its start and end ConstraintSets. You also have the possibility to not specify them, in which case such transition will become a Default transition. That Default transition will be applied between any state change that isn't explicitly covered by a transition.
- The starting state of the MotionLayout is defined to be the constraintSetStart of the first transition.
- If no transition is specified (or only a default Transition) the MotionLayout tag must contain a app:currentState to define the starting state of the MotionLayout
ViewTransition
Attributes | Description |
---|---|
android:id | The id of the ViewTransition |
viewTransitionMode | currentState, allStates, noState transition affect the state of the view in the current constraintSet or all ConstraintSets or non if noState the ViewTransitions are run asynchronous |
onStateTransition | actionDown or actionUp run transition if on touch down or up if view matches motionTarget |
motionInterpolator | The ability to set an overall interpolation key words {easeInOut, linear, etc.} |
duration | Length of time to take to perform the ViewTransition |
pathMotionArc | The path will move in arc (quarter ellipses) key words {startVertical | startHorizontal | flip | none } |
motionTarget | Apply ViewTransition matching this string or id. |
setsTag | set this tag at end of transition |
clearsTag | clears this tag at end of transition |
ifTagSet | run transition if this tag is set on view |
ifTagNotSet | run transition if this tag is not set on view/td> |
<OnSwipe> |
Adds support for touch handling (optional) |
<OnClick> |
Adds support for triggering transition (optional) |
<KeyFrameSet> |
Describes a set of Key object which modify the animation between constraint sets. |
- A Transition is typically defined by specifying its start and end ConstraintSets. You also have the possibility to not specify them, in which case such transition will become a Default transition. That Default transition will be applied between any state change that isn't explicitly covered by a transition.
- The starting state of the MotionLayout is defined to be the constraintSetStart of the first transition.
- If no transition is specified (or only a default Transition) the MotionLayout tag must contain a app:currentState to define the starting state of the MotionLayout
OnSwipe (optional)
Attributes | Description |
---|---|
touchAnchorId | Have the drag act as if it is moving the "touchAnchorSide" of this object |
touchRegionId | Limits the region that the touch can be start in to the bounds of this view (even if the view is invisible) |
touchAnchorSide | The side of the object to move with {top|left|right|bottom} |
maxVelocity | limit the maximum velocity (in progress/sec) of the animation will on touch up. Default 4 |
dragDirection | which side to swipe from {dragUp|dragDown|dragLeft|dragRight} |
maxAcceleration | how quickly the animation will accelerate (progress/sec/sec) and decelerate on touch up. Default 1.2 |
dragScale | scale factor to adjust the swipe by. (e.g. 0.5 would require you to move 2x as much) | dragThreshold | How much to drag before swipe gesture runs. Important for mult-direction swipe. Default is 10. 1 is very sensitive. |
moveWhenScrollAtTop | If the swipe is scrolling and View (such as RecyclerView or NestedScrollView) do scroll and transition happen at the same time |
onTouchUp | Support for various swipe modes autoComplete,autoCompleteToStart,autoCompleteToEnd,stop,decelerate,decelerateAndComplete |
OnClick (optional)
Attributes | Description |
---|---|
motionTarget | What view triggers Transition. |
clickAction | Direction for buttons to move the animation. Or (|) combination of: toggle, transitionToEnd, transitionToStart, jumpToEnd, jumpToStart |
StateSet
defaultState | The constraint set or layout to use |
<State> |
The side of the object to move |
State
android:id | Id of the State |
constraints | Id of the ConstraintSet or the Layout file |
<Variant> |
a different constraintSet/layout to choose if the with or height matches |
Variant
region_widthLessThan | Match if width less than |
region_widthMoreThan | Match if width more than |
region_heightLessThan | Match if height less than |
region_heightMoreThan | Match if height more than |
constraints | Id of the ConstraintSet or layout |
ConstraintSet
android:id | The id of the ConstraintSet |
deriveConstraintsFrom | The id of another constraintSet which defines the constraints not define in this set. If not specified the layout defines the undefined constraints. |
<Constraint> |
A ConstraintLayout Constraints + other attributes associated with a view |
Constraint
Constraint supports two forms:
1: All of ConstraintLayout + the ones listed below +
<CustomAttribute>
.
Or
2: Combination of tags: <Layout> <PropertySet> <Transform> <Motion> <CustomAttribute>
.
The advantage of using these is that if not present the attributes are taken from the base
layout file. This saves from replicating all the layout tags if only a Motion tag is needed.
If
android:id | Id of the View |
[ConstraintLayout attributes] | Any attribute that is part of ConstraintLayout layout is allowed |
[Standard View attributes] | A collection of view attributes supported by the system (see below) |
transitionEasing | define an easing curve to be used when animating from this point (e.g. curve(1.0,0,0,1.0) )
or key words {standard | accelerate | decelerate | linear} |
pathMotionArc | the path will move in arc (quarter ellipses) or key words {startVertical | startHorizontal | none } |
transitionPathRotate | (float) rotate object relative to path taken |
drawPath | draw the path the layout will animate animate |
progress | call method setProgress(float) on this view (used to talk to nested ConstraintLayouts etc.) |
<CustomAttribute> |
call a set"name" method via reflection |
<Layout> |
Attributes for the ConstraintLayout e.g. layout_constraintTop_toTopOf |
<PropertySet> |
currently only visibility, alpha, motionProgress,layout_constraintTag. |
<Transform> |
All the view transform API such as android:rotation. |
<Motion> |
Motion Layout control commands such as transitionEasing and pathMotionArc |
Layout
[ConstraintLayout attributes] | see for attributes |
PropertySet
visibility | set the Visibility of the view. One of Visible, invisible or gone |
alpha | setAlpha value |
motionProgress | using reflection call setProgress |
layout_constraintTag | a tagging string to identify the type of object |
Transform
android:elevation | base z depth of the view. |
android:rotation | rotation of the view, in degrees. |
android:rotationX | rotation of the view around the x axis, in degrees. |
android:rotationY | rotation of the view around the y axis, in degrees. |
android:scaleX | scale of the view in the x direction |
android:scaleY | scale of the view in the y direction. |
android:translationX | translation in x of the view. This value is added post-layout to the left property of the view, which is set by its layout. |
android:translationY | translation in y of the view. This value is added post-layout to th e top property of the view, which is set by its layout |
android:translationZ | translation in z of the view. This value is added to its elevation. |
Motion
transitionEasing | Defines an acceleration curve. |
pathMotionArc | Says the object should move in a quarter ellipse unless the motion is vertical or horizontal |
motionPathRotate | set the rotation to the path of the object + this angle. |
drawPath | Debugging utility to draw the motion of the path |
CustomAttribute
attributeName | The name of the attribute. Case sensitive. ( MyAttr will look for method setMyAttr(...) |
customColorValue | The value is a color looking setMyAttr(int ) |
customIntegerValue | The value is an integer looking setMyAttr(int ) |
customFloatValue | The value is a float looking setMyAttr(float ) |
customStringValue | The value is a String looking setMyAttr(String ) |
customDimension | The value is a dimension looking setMyAttr(float ) |
customBoolean | The value is true or false looking setMyAttr(boolean ) |
KeyFrameSet
This is the container for a collection of Key objects (such as KeyPosition) which provide information about how the views should move
<KeyPosition> |
Controls the layout position during animation |
<KeyAttribute> |
Controls the post layout properties during animation |
<KeyCycle> |
Controls oscillations with respect to position of post layout properties during animation |
<KeyTimeCycle> |
Controls oscillations with respect to time of post layout properties during animation |
<KeyTrigger> |
trigger callbacks into code at fixed point during the animation |
KeyPosition
motionTarget | Id of the View or a regular expression to match layout_ConstraintTag |
framePosition | The point along the interpolation 0 = start 100 = end | transitionEasing | define an easing curve to be used when animating from this point (e.g. curve(1.0,0,0, 1.0)) or key words {standard | accelerate | decelerate | linear } |
pathMotionArc | The path will move in arc (quarter ellipses) key words {startVertical | startHorizontal | flip | none } |
keyPositionType | how this keyframe's deviation for linear path is calculated {deltaRelative | pathRelative|parentRelative} |
percentX | (float) percent distance from start to end along X axis (deltaRelative) or along the path in pathRelative |
percentY | (float) Percent distance from start to end along Y axis (deltaRelative) or perpendicular to path in pathRelative |
percentWidth | (float) Percent of change in the width. Note if the width does not change this has no effect.This overrides sizePercent. |
percentHeight | (float) Percent of change in the width. Note if the width does not change this has no effect.This overrides sizePercent. |
curveFit | path is traced |
drawPath | Draw the path of the objects layout takes useful for debugging |
sizePercent | If the view changes size this controls how growth of the size. (for fixed size objects use KeyAttributes scaleX/X) |
curveFit | selects a path based on straight lines or a path based on a monotonic spline {linear|spline} |
KeyAttribute
motionTarget | Id of the View or a regular expression to match layout_ConstraintTag |
framePosition | The point along the interpolation 0 = start 100 = end |
curveFit | selects a path based on straight lines or a path based on a monotonic spline {linear|spline} |
transitionEasing | Define an easing curve to be used when animating from this point (e.g. curve(1.0,0,0, 1.0)) or key words {standard | accelerate | decelerate | linear } |
transitionPathRotate | (float) rotate object relative to path taken |
drawPath | draw the path the layout will animate animate |
motionProgress | call method setProgress(float) on this view (used to talk to nested ConstraintLayouts etc.) |
[standard view attributes](except visibility) | A collection of post layout view attributes see below |
<CustomAttribute> |
call a set"name" method via reflection |
CustomAttribute
attributeName | The name of the attribute. Case sensitive. ( MyAttr will look for method setMyAttr(...) |
customColorValue | The value is a color looking setMyAttr(int ) |
customIntegerValue | The value is an integer looking setMyAttr(int ) |
customFloatValue | The value is a float looking setMyAttr(float ) |
customStringValue | The value is a String looking setMyAttr(String ) |
customDimension | The value is a dimension looking setMyAttr(float ) |
customBoolean | The value is true or false looking setMyAttr(boolean ) |
KeyCycle
motionTarget | Id of the View or a regular expression to match layout_ConstraintTag |
framePosition | The point along the interpolation 0 = start 100 = end |
[Standard View attributes] | A collection of view attributes supported by the system (see below) |
waveShape | The shape of the wave to generate {sin|square|triangle|sawtooth|reverseSawtooth|cos|bounce} |
wavePeriod | The number of cycles to loop near this region |
waveOffset | offset value added to the attribute |
transitionPathRotate | Cycles applied to rotation relative to the path the view is travelling |
progress | call method setProgress(float) on this view (used to talk to nested ConstraintLayouts etc.) |
<CustomAttribute> |
call a set"name" method via reflection (limited to floats) |
CustomAttribute
attributeName | The name of the attribute. Case sensitive. ( MyAttr will look for method setMyAttr(...) |
customFloatValue | The value is a float looking setMyAttr(float ) |
KeyTimeCycle
motionTarget | Id of the View or a regular expression to match layout_ConstraintTag |
framePosition | The point along the interpolation 0 = start 100 = end |
[Standard View attributes] | A collection of view attributes supported by the system (see below) |
waveShape | The shape of the wave to generate {sin|square|triangle|sawtooth|reverseSawtooth|cos|bounce} |
wavePeriod | The number of cycles per second |
waveOffset | offset value added to the attribute |
transitionPathRotate | Cycles applied to rotation relative to the path the view is travelling |
progress | call method setProgress(float) on this view (used to talk to nested ConstraintLayouts etc.) |
<CustomAttribute> |
call a set"name" method via reflection (limited to floats) |
CustomAttribute
attributeName | The name of the attribute. Case sensitive. ( MyAttr will look for method setMyAttr(...) |
customFloatValue | The value is a float looking setMyAttr(float ) |
KeyTrigger
motionTarget | Id of the View or a regular expression to match layout_ConstraintTag |
framePosition | The point along the interpolation 0 = start 100 = end | onCross | (method name) on crossing this position call this methods on the t arget |
onPositiveCross | (method name) on forward crossing of the framePosition call this methods on the target |
onNegativeCross/td> | (method name) backward crossing of the framePosition call this methods on the target |
viewTransitionOnCross | (ViewTransition Id) start a NoState view transition on crossing or hitting t arget |
viewTransitionOnPositiveCross | (ViewTransition Id) start a NoState view transition forward crossing of the framePosition or entering target |
viewTransitionOnNegativeCross/td> | (ViewTransition Id) start a NoState view transition backward crossing of the framePosition or leaving target |
triggerSlack | (float) do not call trigger again if the framePosition has not moved this fraction away from the trigger point |
triggerId | (id) call the TransitionListener with this trigger id |
motion_postLayoutCollision | Define motion pre or post layout. Post layout is more expensive but captures KeyAttributes or KeyCycle motions. |
motion_triggerOnCollision | (id) Trigger if the motionTarget collides with the other motionTarget |
Standard attributes
android:visibility | Android view attribute that |
android:alpha | Android view attribute that |
android:elevation | base z depth of the view. |
android:rotation | rotation of the view, in degrees. |
android:rotationX | rotation of the view around the x axis, in degrees. |
android:rotationY | rotation of the view around the y axis, in degrees. |
android:scaleX | scale of the view in the x direction. |
android:scaleY | scale of the view in the y direction. |
android:translationX | translation in x of the view. |
android:translationY | translation in y of the view. |
android:translationZ | translation in z of the view. |
See also:
Summary
Nested classes | |
---|---|
interface |
MotionLayout.MotionTracker
Subclasses can override to build test frameworks |
interface |
MotionLayout.TransitionListener
Listener for monitoring events about TransitionLayout. |
Constants | |
---|---|
int |
DEBUG_SHOW_NONE
|
int |
DEBUG_SHOW_PATH
|
int |
DEBUG_SHOW_PROGRESS
|
int |
TOUCH_UP_COMPLETE
|
int |
TOUCH_UP_COMPLETE_TO_END
|
int |
TOUCH_UP_COMPLETE_TO_START
|
int |
TOUCH_UP_DECELERATE
|
int |
TOUCH_UP_DECELERATE_AND_COMPLETE
|
int |
TOUCH_UP_NEVER_TO_END
|
int |
TOUCH_UP_NEVER_TO_START
|
int |
TOUCH_UP_STOP
|
int |
VELOCITY_LAYOUT
|
int |
VELOCITY_POST_LAYOUT
|
int |
VELOCITY_STATIC_LAYOUT
|
int |
VELOCITY_STATIC_POST_LAYOUT
|
Inherited constants |
---|
Fields | |
---|---|
public
static
boolean |
IS_IN_EDIT_MODE
|
protected
boolean |
mMeasureDuringTransition
|
Inherited fields |
---|
Public constructors | |
---|---|
MotionLayout(Context context)
|
|
MotionLayout(Context context, AttributeSet attrs)
|
|
MotionLayout(Context context, AttributeSet attrs, int defStyleAttr)
|
Public methods | |
---|---|
void
|
addTransitionListener(MotionLayout.TransitionListener listener)
adds a listener to be notified of drawer events. |
boolean
|
applyViewTransition(int viewTransitionId, MotionController motionController)
Apply the view transitions keyFrames to the MotionController. |
ConstraintSet
|
cloneConstraintSet(int id)
Creates a ConstraintSet based on an existing constraintSet. |
void
|
enableTransition(int transitionID, boolean enable)
|
void
|
enableViewTransition(int viewTransitionId, boolean enable)
Enable a ViewTransition ID. |
void
|
fireTrigger(int triggerId, boolean positive, float progress)
This causes the callback onTransitionTrigger to be called |
ConstraintSet
|
getConstraintSet(int id)
Get the ConstraintSet associated with an id This returns a link to the constraintset But in most cases can be used. |
int[]
|
getConstraintSetIds()
Get the id's of all constraintSets used by MotionLayout |
int
|
getCurrentState()
Return the current state id |
ArrayList<MotionScene.Transition>
|
getDefinedTransitions()
Get all Transitions known to the system. |
int
|
getEndState()
Gets the state you are currently transition to. |
float
|
getProgress()
Get current position during an animation. |
MotionScene
|
getScene()
Get the motion scene of the layout. |
int
|
getStartState()
Gets the state you are currently transitioning from. |
float
|
getTargetPosition()
Gets the position you are animating to typically 0 or 1. |
MotionScene.Transition
|
getTransition(int id)
This returns the internal Transition Structure |
Bundle
|
getTransitionState()
|
long
|
getTransitionTimeMs()
Gets the time of the currently set animation. |
float
|
getVelocity()
Returns the last velocity used in the transition |
void
|
getViewVelocity(View view, float posOnViewX, float posOnViewY, float[] returnVelocity, int type)
Returns the last layout velocity used in the transition |
boolean
|
isAttachedToWindow()
Returns true if the provided view is currently attached to a window. |
boolean
|
isDelayedApplicationOfInitialState()
Is initial state changes are applied during onAttachedToWindow or after. |
boolean
|
isInRotation()
|
boolean
|
isInteractionEnabled()
Determines whether MotionLayout's touch & click handling are enabled. |
boolean
|
isViewTransitionEnabled(int viewTransitionId)
Is transition id enabled or disabled |
void
|
jumpToState(int id)
This jumps to a state It will be at that state after one repaint cycle If the current transition contains that state. |
void
|
loadLayoutDescription(int motionScene)
This overrides ConstraintLayout and only accepts a MotionScene. |
boolean
|
onInterceptTouchEvent(MotionEvent event)
Intercepts the touch event to correctly handle touch region id handover |
boolean
|
onNestedFling(View target, float velocityX, float velocityY, boolean consumed)
|
boolean
|
onNestedPreFling(View target, float velocityX, float velocityY)
|
void
|
onNestedPreScroll(View target, int dx, int dy, int[] consumed, int type)
|
void
|
onNestedScroll(View target, int dxConsumed, int dyConsumed, int dxUnconsumed, int dyUnconsumed, int type)
|
void
|
onNestedScroll(View target, int dxConsumed, int dyConsumed, int dxUnconsumed, int dyUnconsumed, int type, int[] consumed)
|
void
|
onNestedScrollAccepted(View child, View target, int axes, int type)
|
void
|
onRtlPropertiesChanged(int layoutDirection)
|
boolean
|
onStartNestedScroll(View child, View target, int axes, int type)
|
void
|
onStopNestedScroll(View target, int type)
|
boolean
|
onTouchEvent(MotionEvent event)
|
void
|
rebuildMotion()
This method is deprecated. Please call rebuildScene() instead. |
void
|
rebuildScene()
rebuild the motion Layouts |
boolean
|
removeTransitionListener(MotionLayout.TransitionListener listener)
adds a listener to be notified of drawer events. |
void
|
requestLayout()
|
void
|
rotateTo(int id, int duration)
|
void
|
scheduleTransitionTo(int id)
on completing the current transition, transition to this state. |
void
|
setDelayedApplicationOfInitialState(boolean delayedApply)
Initial state changes are applied during onAttachedToWindow unless this is set to true. |
void
|
setInteractionEnabled(boolean enabled)
Enables (or disables) MotionLayout's onClick and onSwipe handling. |
void
|
setInterpolatedProgress(float pos)
Set the transition position between 0 an 1 |
void
|
setOnHide(float progress)
|
void
|
setOnShow(float progress)
|
void
|
setProgress(float pos, float velocity)
Set the transition position between 0 an 1 |
void
|
setProgress(float pos)
Set the transition position between 0 an 1 |
void
|
setScene(MotionScene scene)
Sets a motion scene to the layout. |
void
|
setState(int id, int screenWidth, int screenHeight)
Set the State of the Constraint layout. |
void
|
setTransition(int transitionId)
Set a transition explicitly to a Transition that has an ID The transition must have been named with android:id=... |
void
|
setTransition(int beginId, int endId)
Set a transition explicitly between two constraint sets |
void
|
setTransitionDuration(int milliseconds)
Change the current Transition duration. |
void
|
setTransitionListener(MotionLayout.TransitionListener listener)
Set a listener to be notified of drawer events. |
void
|
setTransitionState(Bundle bundle)
|
String
|
toString()
|
void
|
touchAnimateTo(int touchUpMode, float position, float currentVelocity)
|
void
|
touchSpringTo(float position, float currentVelocity)
Allows you to use trigger spring motion touch behaviour. |
void
|
transitionToEnd(Runnable onComplete)
Animate to the ending position of the current transition. |
void
|
transitionToEnd()
Animate to the ending position of the current transition. |
void
|
transitionToStart()
Animate to the starting position of the current transition. |
void
|
transitionToState(int id)
Animate to the state defined by the id. |
void
|
transitionToState(int id, int duration)
Animate to the state defined by the id. |
void
|
transitionToState(int id, int screenWidth, int screenHeight)
Animate to the state defined by the id. |
void
|
transitionToState(int id, int screenWidth, int screenHeight, int duration)
Animate to the state defined by the id. |
void
|
updateState(int stateId, ConstraintSet set)
update a ConstraintSet under the id. |
void
|
updateStateAnimate(int stateId, ConstraintSet set, int duration)
Update a ConstraintSet but animate the change. |
void
|
viewTransition(int viewTransitionId, View... view)
Execute a ViewTransition. |
Protected methods | |
---|---|
void
|
dispatchDraw(Canvas canvas)
Used to draw debugging graphics and to do post layout changes |
void
|
fireTransitionCompleted()
This causes the callback TransitionCompleted to be called |
long
|
getNanoTime()
Subclasses can override to define testClasses |
MotionLayout.MotionTracker
|
obtainVelocityTracker()
Subclasses can override to build test frameworks |
void
|
onAttachedToWindow()
|
void
|
onLayout(boolean changed, int left, int top, int right, int bottom)
|
void
|
onMeasure(int widthMeasureSpec, int heightMeasureSpec)
|
void
|
parseLayoutDescription(int id)
block ConstraintLayout from handling layout description |
void
|
setTransition(MotionScene.Transition transition)
|
Inherited methods | |
---|---|
Constants
DEBUG_SHOW_NONE
public static final int DEBUG_SHOW_NONE
Constant Value: 0 (0x00000000)
DEBUG_SHOW_PATH
public static final int DEBUG_SHOW_PATH
Constant Value: 2 (0x00000002)
DEBUG_SHOW_PROGRESS
public static final int DEBUG_SHOW_PROGRESS
Constant Value: 1 (0x00000001)
TOUCH_UP_COMPLETE
public static final int TOUCH_UP_COMPLETE
Constant Value: 0 (0x00000000)
TOUCH_UP_COMPLETE_TO_END
public static final int TOUCH_UP_COMPLETE_TO_END
Constant Value: 2 (0x00000002)
TOUCH_UP_COMPLETE_TO_START
public static final int TOUCH_UP_COMPLETE_TO_START
Constant Value: 1 (0x00000001)
TOUCH_UP_DECELERATE
public static final int TOUCH_UP_DECELERATE
Constant Value: 4 (0x00000004)
TOUCH_UP_DECELERATE_AND_COMPLETE
public static final int TOUCH_UP_DECELERATE_AND_COMPLETE
Constant Value: 5 (0x00000005)
TOUCH_UP_NEVER_TO_END
public static final int TOUCH_UP_NEVER_TO_END
Constant Value: 7 (0x00000007)
TOUCH_UP_NEVER_TO_START
public static final int TOUCH_UP_NEVER_TO_START
Constant Value: 6 (0x00000006)
TOUCH_UP_STOP
public static final int TOUCH_UP_STOP
Constant Value: 3 (0x00000003)
VELOCITY_LAYOUT
public static final int VELOCITY_LAYOUT
Constant Value: 1 (0x00000001)
VELOCITY_POST_LAYOUT
public static final int VELOCITY_POST_LAYOUT
Constant Value: 0 (0x00000000)
VELOCITY_STATIC_LAYOUT
public static final int VELOCITY_STATIC_LAYOUT
Constant Value: 3 (0x00000003)
VELOCITY_STATIC_POST_LAYOUT
public static final int VELOCITY_STATIC_POST_LAYOUT
Constant Value: 2 (0x00000002)
Fields
IS_IN_EDIT_MODE
public static boolean IS_IN_EDIT_MODE
mMeasureDuringTransition
protected boolean mMeasureDuringTransition
Public constructors
MotionLayout
public MotionLayout (Context context, AttributeSet attrs)
Parameters | |
---|---|
context |
Context |
attrs |
AttributeSet |
MotionLayout
public MotionLayout (Context context, AttributeSet attrs, int defStyleAttr)
Parameters | |
---|---|
context |
Context |
attrs |
AttributeSet |
defStyleAttr |
int |
Public methods
addTransitionListener
public void addTransitionListener (MotionLayout.TransitionListener listener)
adds a listener to be notified of drawer events.
Parameters | |
---|---|
listener |
MotionLayout.TransitionListener : Listener to notify when drawer events occur |
See also:
applyViewTransition
public boolean applyViewTransition (int viewTransitionId, MotionController motionController)
Apply the view transitions keyFrames to the MotionController. Note ConstraintOverride is not used
Parameters | |
---|---|
viewTransitionId |
int : the id of the view transition |
motionController |
MotionController : the MotionController to apply the keyframes to |
Returns | |
---|---|
boolean |
true if it found and applied the viewTransition false otherwise |
cloneConstraintSet
public ConstraintSet cloneConstraintSet (int id)
Creates a ConstraintSet based on an existing constraintSet. This makes a copy of the ConstraintSet.
Parameters | |
---|---|
id |
int : The ide of the ConstraintSet |
Returns | |
---|---|
ConstraintSet |
the ConstraintSet |
enableTransition
public void enableTransition (int transitionID, boolean enable)
Parameters | |
---|---|
transitionID |
int |
enable |
boolean |
enableViewTransition
public void enableViewTransition (int viewTransitionId, boolean enable)
Enable a ViewTransition ID.
Parameters | |
---|---|
viewTransitionId |
int : id of ViewTransition |
enable |
boolean : If false view transition cannot be executed.
|
fireTrigger
public void fireTrigger (int triggerId, boolean positive, float progress)
This causes the callback onTransitionTrigger to be called
Parameters | |
---|---|
triggerId |
int : The id set set with triggerID |
positive |
boolean : for positive transition edge |
progress |
float : the current progress
|
getConstraintSet
public ConstraintSet getConstraintSet (int id)
Get the ConstraintSet associated with an id This returns a link to the constraintset But in most cases can be used. createConstraintSet makes a copy which is more expensive.
Returns | |
---|---|
ConstraintSet |
See also:
getConstraintSetIds
public int[] getConstraintSetIds ()
Get the id's of all constraintSets used by MotionLayout
Returns | |
---|---|
int[] |
getCurrentState
public int getCurrentState ()
Return the current state id
Returns | |
---|---|
int |
current state id |
getDefinedTransitions
public ArrayList<MotionScene.Transition> getDefinedTransitions ()
Get all Transitions known to the system.
Returns | |
---|---|
ArrayList<MotionScene.Transition> |
getEndState
public int getEndState ()
Gets the state you are currently transition to.
Returns | |
---|---|
int |
The State you are transitioning to. |
getProgress
public float getProgress ()
Get current position during an animation.
Returns | |
---|---|
float |
current position from 0.0 to 1.0 inclusive |
getScene
public MotionScene getScene ()
Get the motion scene of the layout. Warning! This gives you direct access to the internal state of the MotionLayout making it easy corrupt the state.
Returns | |
---|---|
MotionScene |
the motion scene |
getStartState
public int getStartState ()
Gets the state you are currently transitioning from. If you are transitioning from an unknown state returns -1
Returns | |
---|---|
int |
State you are transitioning from. |
getTargetPosition
public float getTargetPosition ()
Gets the position you are animating to typically 0 or 1. This is useful during animation after touch up
Returns | |
---|---|
float |
The target position you are moving to |
getTransition
public MotionScene.Transition getTransition (int id)
This returns the internal Transition Structure
Returns | |
---|---|
MotionScene.Transition |
getTransitionState
public Bundle getTransitionState ()
Returns | |
---|---|
Bundle |
bundle containing start and end state |
getTransitionTimeMs
public long getTransitionTimeMs ()
Gets the time of the currently set animation.
Returns | |
---|---|
long |
time in Milliseconds |
getVelocity
public float getVelocity ()
Returns the last velocity used in the transition
Returns | |
---|---|
float |
getViewVelocity
public void getViewVelocity (View view, float posOnViewX, float posOnViewY, float[] returnVelocity, int type)
Returns the last layout velocity used in the transition
Parameters | |
---|---|
view |
View : The view |
posOnViewX |
float : The x position on the view |
posOnViewY |
float : The y position on the view |
returnVelocity |
float : The velocity |
type |
int : The type of velocity you want 0 = post layout, 1 = layout, 2 = static postlayout
|
isAttachedToWindow
public boolean isAttachedToWindow ()
Returns true if the provided view is currently attached to a window.
Returns | |
---|---|
boolean |
isDelayedApplicationOfInitialState
public boolean isDelayedApplicationOfInitialState ()
Is initial state changes are applied during onAttachedToWindow or after.
Returns | |
---|---|
boolean |
isInRotation
public boolean isInRotation ()
Returns | |
---|---|
boolean |
isInteractionEnabled
public boolean isInteractionEnabled ()
Determines whether MotionLayout's touch & click handling are enabled. An interaction enabled MotionLayout can respond to user input and initiate and control. MotionLayout interactions are enabled initially by default. MotionLayout touch & click handling may be enabled or disabled by calling its setInteractionEnabled method.
Returns | |
---|---|
boolean |
true if MotionLayout's touch & click is enabled, false otherwise |
isViewTransitionEnabled
public boolean isViewTransitionEnabled (int viewTransitionId)
Is transition id enabled or disabled
Parameters | |
---|---|
viewTransitionId |
int : the ide of the transition |
Returns | |
---|---|
boolean |
true if enabled |
jumpToState
public void jumpToState (int id)
This jumps to a state It will be at that state after one repaint cycle If the current transition contains that state. It setsProgress 0 or 1 to that state. If not in the current transition itsl
Parameters | |
---|---|
id |
int : state to set
|
loadLayoutDescription
public void loadLayoutDescription (int motionScene)
This overrides ConstraintLayout and only accepts a MotionScene.
Parameters | |
---|---|
motionScene |
int : The resource id, or 0 to reset the MotionScene.
|
onInterceptTouchEvent
public boolean onInterceptTouchEvent (MotionEvent event)
Intercepts the touch event to correctly handle touch region id handover
Returns | |
---|---|
boolean |
onNestedFling
public boolean onNestedFling (View target, float velocityX, float velocityY, boolean consumed)
Parameters | |
---|---|
target |
View |
velocityX |
float |
velocityY |
float |
consumed |
boolean |
Returns | |
---|---|
boolean |
onNestedPreFling
public boolean onNestedPreFling (View target, float velocityX, float velocityY)
Parameters | |
---|---|
target |
View |
velocityX |
float |
velocityY |
float |
Returns | |
---|---|
boolean |
onNestedPreScroll
public void onNestedPreScroll (View target, int dx, int dy, int[] consumed, int type)
Parameters | |
---|---|
target |
View |
dx |
int |
dy |
int |
consumed |
int |
type |
int |
onNestedScroll
public void onNestedScroll (View target, int dxConsumed, int dyConsumed, int dxUnconsumed, int dyUnconsumed, int type)
Parameters | |
---|---|
target |
View |
dxConsumed |
int |
dyConsumed |
int |
dxUnconsumed |
int |
dyUnconsumed |
int |
type |
int |
onNestedScroll
public void onNestedScroll (View target, int dxConsumed, int dyConsumed, int dxUnconsumed, int dyUnconsumed, int type, int[] consumed)
Parameters | |
---|---|
target |
View |
dxConsumed |
int |
dyConsumed |
int |
dxUnconsumed |
int |
dyUnconsumed |
int |
type |
int |
consumed |
int |
onNestedScrollAccepted
public void onNestedScrollAccepted (View child, View target, int axes, int type)
Parameters | |
---|---|
child |
View |
target |
View |
axes |
int |
type |
int |
onRtlPropertiesChanged
public void onRtlPropertiesChanged (int layoutDirection)
Parameters | |
---|---|
layoutDirection |
int |
onStartNestedScroll
public boolean onStartNestedScroll (View child, View target, int axes, int type)
Parameters | |
---|---|
child |
View |
target |
View |
axes |
int |
type |
int |
Returns | |
---|---|
boolean |
onStopNestedScroll
public void onStopNestedScroll (View target, int type)
Parameters | |
---|---|
target |
View |
type |
int |
onTouchEvent
public boolean onTouchEvent (MotionEvent event)
Parameters | |
---|---|
event |
MotionEvent |
Returns | |
---|---|
boolean |
rebuildMotion
public void rebuildMotion ()
This method is deprecated.
Please call rebuildScene() instead.
rebuild the motion Layouts
rebuildScene
public void rebuildScene ()
rebuild the motion Layouts
removeTransitionListener
public boolean removeTransitionListener (MotionLayout.TransitionListener listener)
adds a listener to be notified of drawer events.
Parameters | |
---|---|
listener |
MotionLayout.TransitionListener : Listener to notify when drawer events occur |
Returns | |
---|---|
boolean |
true if it contained the specified listener |
See also:
requestLayout
public void requestLayout ()
rotateTo
public void rotateTo (int id, int duration)
Parameters | |
---|---|
id |
int |
duration |
int |
scheduleTransitionTo
public void scheduleTransitionTo (int id)
on completing the current transition, transition to this state.
setDelayedApplicationOfInitialState
public void setDelayedApplicationOfInitialState (boolean delayedApply)
Initial state changes are applied during onAttachedToWindow unless this is set to true.
setInteractionEnabled
public void setInteractionEnabled (boolean enabled)
Enables (or disables) MotionLayout's onClick and onSwipe handling.
Parameters | |
---|---|
enabled |
boolean : If true, touch & click is enabled; otherwise it is disabled
|
setInterpolatedProgress
public void setInterpolatedProgress (float pos)
Set the transition position between 0 an 1
setOnHide
public void setOnHide (float progress)
Parameters | |
---|---|
progress |
float |
setOnShow
public void setOnShow (float progress)
Parameters | |
---|---|
progress |
float |
setProgress
public void setProgress (float pos, float velocity)
Set the transition position between 0 an 1
setProgress
public void setProgress (float pos)
Set the transition position between 0 an 1
Parameters | |
---|---|
pos |
float : the position in the transition from 0...1
|
setScene
public void setScene (MotionScene scene)
Sets a motion scene to the layout. Subsequent calls to it will override the previous scene.
Parameters | |
---|---|
scene |
MotionScene |
setState
public void setState (int id, int screenWidth, int screenHeight)
Set the State of the Constraint layout. Causing it to load a particular ConstraintSet. for states with variants the variant with matching width and height constraintSet will be chosen
Parameters | |
---|---|
id |
int : set the state width and height |
setTransition
public void setTransition (int transitionId)
Set a transition explicitly to a Transition that has an ID The transition must have been named with android:id=...
Parameters | |
---|---|
transitionId |
int : the id to set
|
setTransition
public void setTransition (int beginId, int endId)
Set a transition explicitly between two constraint sets
Parameters | |
---|---|
beginId |
int : the id of the start constraint set |
endId |
int : the id of the end constraint set
|
setTransitionDuration
public void setTransitionDuration (int milliseconds)
Change the current Transition duration.
Parameters | |
---|---|
milliseconds |
int : duration for transition to complete
|
setTransitionListener
public void setTransitionListener (MotionLayout.TransitionListener listener)
Set a listener to be notified of drawer events.
Parameters | |
---|---|
listener |
MotionLayout.TransitionListener : Listener to notify when drawer events occur |
See also:
setTransitionState
public void setTransitionState (Bundle bundle)
Parameters | |
---|---|
bundle |
Bundle |
Returns | |
---|---|
void |
bundle containing start and end state |
toString
public String toString ()
Returns | |
---|---|
String |
touchAnimateTo
public void touchAnimateTo (int touchUpMode, float position, float currentVelocity)
Parameters | |
---|---|
touchUpMode |
int : behavior on touch up, can be either:
|
position |
float : animate to given position |
touchSpringTo
public void touchSpringTo (float position, float currentVelocity)
Allows you to use trigger spring motion touch behaviour. You must have configured all the spring parameters in the Transition's OnSwipe
Parameters | |
---|---|
position |
float : the position 0 - 1 |
currentVelocity |
float : the current velocity rate of change in position per second
|
transitionToEnd
public void transitionToEnd (Runnable onComplete)
Animate to the ending position of the current transition. This will not work during on create as there is no transition Transitions are only set up during onAttach
Parameters | |
---|---|
onComplete |
Runnable : callback when task is don
|
transitionToEnd
public void transitionToEnd ()
Animate to the ending position of the current transition. This will not work during on create as there is no transition Transitions are only set up during onAttach
transitionToStart
public void transitionToStart ()
Animate to the starting position of the current transition. This will not work during on create as there is no transition Transitions are only set up during onAttach
transitionToState
public void transitionToState (int id)
Animate to the state defined by the id. The id is the id of the ConstraintSet or the id of the State.
Parameters | |
---|---|
id |
int : the state to transition to
|
transitionToState
public void transitionToState (int id, int duration)
Animate to the state defined by the id. The id is the id of the ConstraintSet or the id of the State.
Parameters | |
---|---|
id |
int : the state to transition to |
duration |
int : time in ms. if 0 set by default or transition -1 by current
|
transitionToState
public void transitionToState (int id, int screenWidth, int screenHeight)
Animate to the state defined by the id. Width and height may be used in the picking of the id using this StateSet.
Parameters | |
---|---|
id |
int : the state to transition |
screenWidth |
int : the with of the motionLayout used to select the variant |
screenHeight |
int : the height of the motionLayout used to select the variant
|
transitionToState
public void transitionToState (int id, int screenWidth, int screenHeight, int duration)
Animate to the state defined by the id. Width and height may be used in the picking of the id using this StateSet.
Parameters | |
---|---|
id |
int : the state to transition |
screenWidth |
int : the with of the motionLayout used to select the variant |
screenHeight |
int : the height of the motionLayout used to select the variant |
duration |
int : time in ms. if 0 set by default or transition -1 by current
|
updateState
public void updateState (int stateId, ConstraintSet set)
update a ConstraintSet under the id.
Parameters | |
---|---|
stateId |
int : id of the ConstraintSet |
set |
ConstraintSet : The constraintSet
|
updateStateAnimate
public void updateStateAnimate (int stateId, ConstraintSet set, int duration)
Update a ConstraintSet but animate the change.
Parameters | |
---|---|
stateId |
int : id of the ConstraintSet |
set |
ConstraintSet : The constraintSet |
duration |
int : The length of time to perform the animation
|
viewTransition
public void viewTransition (int viewTransitionId, View... view)
Execute a ViewTransition. Transition will execute if its conditions are met and it is enabled
Parameters | |
---|---|
view |
View : The views to apply to
|
Protected methods
dispatchDraw
protected void dispatchDraw (Canvas canvas)
Used to draw debugging graphics and to do post layout changes
fireTransitionCompleted
protected void fireTransitionCompleted ()
This causes the callback TransitionCompleted to be called
getNanoTime
protected long getNanoTime ()
Subclasses can override to define testClasses
Returns | |
---|---|
long |
obtainVelocityTracker
protected MotionLayout.MotionTracker obtainVelocityTracker ()
Subclasses can override to build test frameworks
Returns | |
---|---|
MotionLayout.MotionTracker |
onAttachedToWindow
protected void onAttachedToWindow ()
onLayout
protected void onLayout (boolean changed, int left, int top, int right, int bottom)
Parameters | |
---|---|
changed |
boolean |
left |
int |
top |
int |
right |
int |
bottom |
int |
onMeasure
protected void onMeasure (int widthMeasureSpec, int heightMeasureSpec)
Parameters | |
---|---|
widthMeasureSpec |
int |
heightMeasureSpec |
int |
parseLayoutDescription
protected void parseLayoutDescription (int id)
block ConstraintLayout from handling layout description
setTransition
protected void setTransition (MotionScene.Transition transition)
Parameters | |
---|---|
transition |
MotionScene.Transition |
Content and code samples on this page are subject to the licenses described in the Content License. Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
Last updated 2022-01-24 UTC.