MotionLayout
class MotionLayout : ConstraintLayout, NestedScrollingParent3
| kotlin.Any | ||||
| ↳ | 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 MotionScenes.
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 is used then all layout attributes in the base are ignored.
| 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] | Also see ConstraintLayout.LayoutParams 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 target |
| 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. |
Summary
Nested types |
|---|
protected interface MotionLayout.MotionTrackerSubclasses can override to build test frameworks |
interface MotionLayout.TransitionListenerListener for monitoring events about TransitionLayout. |
Constants |
|
|---|---|
const Int |
DEBUG_SHOW_NONE = 0 |
const Int |
DEBUG_SHOW_PATH = 2 |
const Int |
|
const Int |
|
const Int |
|
const Int |
|
const Int |
|
const Int |
|
const Int |
|
const Int |
|
const Int |
TOUCH_UP_STOP = 3 |
const Int |
VELOCITY_LAYOUT = 1 |
const Int |
|
const Int |
|
const Int |
Public constructors |
|---|
MotionLayout(context: Context) |
MotionLayout(context: Context, attrs: AttributeSet?) |
MotionLayout(context: Context, attrs: AttributeSet?, defStyleAttr: Int) |
Public functions |
|
|---|---|
Unit |
addTransitionListener(listener: MotionLayout.TransitionListener!)adds a listener to be notified of drawer events. |
Boolean |
applyViewTransition(Apply the view transitions keyFrames to the MotionController. |
ConstraintSet! |
cloneConstraintSet(id: Int)Creates a ConstraintSet based on an existing constraintSet. |
Unit |
enableTransition(transitionID: Int, enable: Boolean)Disable the transition based on transitionID |
Unit |
enableViewTransition(viewTransitionId: Int, enable: Boolean)Enable a ViewTransition ID. |
Unit |
fireTrigger(triggerId: Int, positive: Boolean, progress: Float)This causes the callback onTransitionTrigger to be called |
ConstraintSet! |
getConstraintSet(id: Int)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. |
@IdRes IntArray<Int>! |
Get the id's of all constraintSets used by MotionLayout |
Int |
Return the current state id |
ArrayList<MotionScene.Transition!>! |
Get all Transitions known to the system. |
DesignTool! |
|
Int |
Gets the state you are currently transition to. |
IntArray<Int>! |
getMatchingConstraintSetIds(types: Array<String!>!)Get the id's of all constraintSets with the matching types |
Float |
Get current position during an animation. |
MotionScene! |
getScene()Get the motion scene of the layout. |
Int |
Gets the state you are currently transitioning from. |
Float |
Gets the position you are animating to typically 0 or 1. |
MotionScene.Transition! |
getTransition(id: Int)This returns the internal Transition Structure |
Bundle! |
|
Long |
Gets the time of the currently set animation. |
Float |
Returns the last velocity used in the transition |
Unit |
getViewVelocity(Returns the last layout velocity used in the transition |
Boolean |
Is initial state changes are applied during onAttachedToWindow or after. |
Boolean |
|
Boolean |
Determines whether MotionLayout's touch &click handling are enabled. |
Boolean |
isViewTransitionEnabled(viewTransitionId: Int)Is transition id enabled or disabled |
Unit |
jumpToState(id: Int)This jumps to a state It will be at that state after one repaint cycle If the current transition contains that state. |
Unit |
loadLayoutDescription(motionScene: Int)This overrides ConstraintLayout and only accepts a MotionScene. |
Boolean |
onInterceptTouchEvent(event: MotionEvent!)Intercepts the touch event to correctly handle touch region id handover |
Boolean |
onNestedFling( |
Boolean |
onNestedPreFling(target: View, velocityX: Float, velocityY: Float) |
Unit |
React to a nested scroll in progress before the target view consumes a portion of the scroll. |
Unit |
onNestedScroll(React to a nested scroll in progress. |
Unit |
onNestedScroll(React to a nested scroll in progress. |
Unit |
onNestedScrollAccepted(child: View, target: View, axes: Int, type: Int)React to the successful claiming of a nested scroll operation. |
Unit |
onRtlPropertiesChanged(layoutDirection: Int) |
Boolean |
onStartNestedScroll(child: View, target: View, axes: Int, type: Int)React to a descendant view initiating a nestable scroll operation, claiming the nested scroll operation if appropriate. |
Unit |
onStopNestedScroll(target: View, type: Int)React to a nested scroll operation ending. |
Boolean |
onTouchEvent(event: MotionEvent!) |
Unit |
onViewAdded(view: View!) |
Unit |
onViewRemoved(view: View!) |
Unit |
This function is deprecated. Please call rebuildScene() instead. |
Unit |
rebuild the motion Layouts |
Boolean |
adds a listener to be notified of drawer events. |
Unit |
|
Unit |
Rotate the layout based on the angle to a ConstraintSet |
Unit |
scheduleTransitionTo(id: Int)on completing the current transition, transition to this state. |
Unit |
setDebugMode(debugMode: Int)Display the debugging information such as paths information |
Unit |
setDelayedApplicationOfInitialState(delayedApply: Boolean)Initial state changes are applied during onAttachedToWindow unless this is set to true. |
Unit |
setInteractionEnabled(enabled: Boolean)Enables (or disables) MotionLayout's onClick and onSwipe handling. |
Unit |
setInterpolatedProgress(pos: Float)Set the transition position between 0 an 1 |
Unit |
Notify OnHide motion helpers |
Unit |
Notify OnShow motion helpers |
Unit |
setProgress(pos: Float)Set the transition position between 0 an 1 |
Unit |
setProgress(pos: Float, velocity: Float)Set the transition position between 0 an 1 |
Unit |
setScene(scene: MotionScene!)Sets a motion scene to the layout. |
Unit |
Set the State of the Constraint layout. |
Unit |
setTransition(transitionId: Int)Set a transition explicitly to a Transition that has an ID The transition must have been named with android:id=... |
Unit |
setTransition(beginId: Int, endId: Int)Set a transition explicitly between two constraint sets |
Unit |
setTransitionDuration(milliseconds: Int)Change the current Transition duration. |
Unit |
setTransitionListener(listener: MotionLayout.TransitionListener!)Set a listener to be notified of drawer events. |
Unit |
setTransitionState(bundle: Bundle!)Set the transition state as a bundle |
String! |
toString() |
Unit |
touchAnimateTo(touchUpMode: Int, position: Float, currentVelocity: Float) |
Unit |
touchSpringTo(position: Float, currentVelocity: Float)Allows you to use trigger spring motion touch behaviour. |
Unit |
Animate to the ending position of the current transition. |
Unit |
transitionToEnd(onComplete: Runnable!)Animate to the ending position of the current transition. |
Unit |
Animate to the starting position of the current transition. |
Unit |
transitionToStart(onComplete: Runnable!)Animate to the starting position of the current transition. |
Unit |
transitionToState(id: Int)Animate to the state defined by the id. |
Unit |
transitionToState(id: Int, duration: Int)Animate to the state defined by the id. |
Unit |
transitionToState(id: Int, screenWidth: Int, screenHeight: Int)Animate to the state defined by the id. |
Unit |
transitionToState(Animate to the state defined by the id. |
Unit |
Not sure we want this |
Unit |
updateState(stateId: Int, set: ConstraintSet!)update a ConstraintSet under the id. |
Unit |
updateStateAnimate(stateId: Int, set: ConstraintSet!, duration: Int)Update a ConstraintSet but animate the change. |
Unit |
viewTransition(viewTransitionId: Int, view: Array<View!>!)Execute a ViewTransition. |
Protected functions |
|
|---|---|
Unit |
dispatchDraw(canvas: Canvas!)Used to draw debugging graphics and to do post layout changes |
Unit |
This causes the callback TransitionCompleted to be called |
Long |
Subclasses can override to define testClasses |
MotionLayout.MotionTracker! |
Subclasses can override to build test frameworks |
Unit |
|
Unit |
|
Unit |
|
Unit |
block ConstraintLayout from handling layout description |
Unit |
setTransition(transition: MotionScene.Transition!) |
Public properties |
|
|---|---|
java-static Boolean |
Protected properties |
|
|---|---|
Boolean |
Inherited Constants |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Inherited properties |
|---|
Constants
Public constructors
Public functions
addTransitionListener
fun addTransitionListener(listener: MotionLayout.TransitionListener!): Unit
adds a listener to be notified of drawer events.
| Parameters | |
|---|---|
listener: MotionLayout.TransitionListener! |
Listener to notify when drawer events occur |
| See also | |
|---|---|
MotionLayout.TransitionListener |
applyViewTransition
fun applyViewTransition(
viewTransitionId: Int,
motionController: MotionController!
): Boolean
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
fun cloneConstraintSet(id: Int): ConstraintSet!
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
fun enableTransition(transitionID: Int, enable: Boolean): Unit
Disable the transition based on transitionID
enableViewTransition
fun enableViewTransition(viewTransitionId: Int, enable: Boolean): Unit
Enable a ViewTransition ID.
fireTrigger
fun fireTrigger(triggerId: Int, positive: Boolean, progress: Float): Unit
This causes the callback onTransitionTrigger to be called
getConstraintSet
fun getConstraintSet(id: Int): ConstraintSet!
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.
| Parameters | |
|---|---|
id: Int |
of the constraintSet |
| Returns | |
|---|---|
ConstraintSet! |
ConstraintSet of MotionLayout |
| See also | |
|---|---|
cloneConstraintSet |
getConstraintSetIds
fun getConstraintSetIds(): @IdRes IntArray<Int>!
Get the id's of all constraintSets used by MotionLayout
getCurrentState
fun getCurrentState(): Int
Return the current state id
| Returns | |
|---|---|
Int |
current state id |
getDefinedTransitions
fun getDefinedTransitions(): ArrayList<MotionScene.Transition!>!
Get all Transitions known to the system.
| Returns | |
|---|---|
ArrayList<MotionScene.Transition!>! |
getEndState
fun getEndState(): Int
Gets the state you are currently transition to.
| Returns | |
|---|---|
Int |
The State you are transitioning to. |
getMatchingConstraintSetIds
fun getMatchingConstraintSetIds(types: Array<String!>!): IntArray<Int>!
Get the id's of all constraintSets with the matching types
getProgress
fun getProgress(): Float
Get current position during an animation.
| Returns | |
|---|---|
Float |
current position from 0.0 to 1.0 inclusive |
getScene
fun getScene(): MotionScene!
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
fun getStartState(): Int
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
fun getTargetPosition(): Float
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
fun getTransition(id: Int): MotionScene.Transition!
This returns the internal Transition Structure
| Parameters | |
|---|---|
id: Int |
| Returns | |
|---|---|
MotionScene.Transition! |
getTransitionState
fun getTransitionState(): Bundle!
| Returns | |
|---|---|
Bundle! |
bundle containing start and end state |
getTransitionTimeMs
fun getTransitionTimeMs(): Long
Gets the time of the currently set animation.
| Returns | |
|---|---|
Long |
time in Milliseconds |
getVelocity
fun getVelocity(): Float
Returns the last velocity used in the transition
| Returns | |
|---|---|
Float |
getViewVelocity
fun getViewVelocity(
view: View!,
posOnViewX: Float,
posOnViewY: Float,
returnVelocity: FloatArray!,
type: Int
): Unit
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: FloatArray! |
The velocity |
type: Int |
Velocity returned 0 = post layout, 1 = layout, 2 = static postlayout |
isDelayedApplicationOfInitialState
fun isDelayedApplicationOfInitialState(): Boolean
Is initial state changes are applied during onAttachedToWindow or after.
| Returns | |
|---|---|
Boolean |
isInteractionEnabled
fun isInteractionEnabled(): Boolean
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
fun isViewTransitionEnabled(viewTransitionId: Int): Boolean
Is transition id enabled or disabled
| Parameters | |
|---|---|
viewTransitionId: Int |
the ide of the transition |
| Returns | |
|---|---|
Boolean |
true if enabled |
jumpToState
fun jumpToState(id: Int): Unit
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
fun loadLayoutDescription(motionScene: Int): Unit
This overrides ConstraintLayout and only accepts a MotionScene.
| Parameters | |
|---|---|
motionScene: Int |
The resource id, or 0 to reset the MotionScene. |
onInterceptTouchEvent
fun onInterceptTouchEvent(event: MotionEvent!): Boolean
Intercepts the touch event to correctly handle touch region id handover
| Parameters | |
|---|---|
event: MotionEvent! |
| Returns | |
|---|---|
Boolean |
onNestedFling
fun onNestedFling(
target: View,
velocityX: Float,
velocityY: Float,
consumed: Boolean
): Boolean
onNestedPreScroll
fun onNestedPreScroll(
target: View,
dx: Int,
dy: Int,
consumed: IntArray,
type: Int
): Unit
React to a nested scroll in progress before the target view consumes a portion of the scroll.
When working with nested scrolling often the parent view may want an opportunity to consume the scroll before the nested scrolling child does. An example of this is a drawer that contains a scrollable list. The user will want to be able to scroll the list fully into view before the list itself begins scrolling.
onNestedPreScroll is called when a nested scrolling child invokes dispatchNestedPreScroll. The implementation should report how any pixels of the scroll reported by dx, dy were consumed in the consumed array. Index 0 corresponds to dx and index 1 corresponds to dy. This parameter will never be null. Initial values for consumed[0] and consumed[1] will always be 0.
| Parameters | |
|---|---|
target: View |
View that initiated the nested scroll |
dx: Int |
Horizontal scroll distance in pixels |
dy: Int |
Vertical scroll distance in pixels |
consumed: IntArray |
Output. The horizontal and vertical scroll distance consumed by this parent |
type: Int |
the type of input which cause this scroll event |
onNestedScroll
fun onNestedScroll(
target: View,
dxConsumed: Int,
dyConsumed: Int,
dxUnconsumed: Int,
dyUnconsumed: Int,
type: Int
): Unit
React to a nested scroll in progress.
This method will be called when the ViewParent's current nested scrolling child view dispatches a nested scroll event. To receive calls to this method the ViewParent must have previously returned true for a call to onStartNestedScroll.
Both the consumed and unconsumed portions of the scroll distance are reported to the ViewParent. An implementation may choose to use the consumed portion to match or chase scroll position of multiple child elements, for example. The unconsumed portion may be used to allow continuous dragging of multiple scrolling or draggable elements, such as scrolling a list within a vertical drawer where the drawer begins dragging once the edge of inner scrolling content is reached.
| Parameters | |
|---|---|
target: View |
The descendent view controlling the nested scroll |
dxConsumed: Int |
Horizontal scroll distance in pixels already consumed by target |
dyConsumed: Int |
Vertical scroll distance in pixels already consumed by target |
dxUnconsumed: Int |
Horizontal scroll distance in pixels not consumed by target |
dyUnconsumed: Int |
Vertical scroll distance in pixels not consumed by target |
type: Int |
the type of input which cause this scroll event |
onNestedScroll
fun onNestedScroll(
target: View,
dxConsumed: Int,
dyConsumed: Int,
dxUnconsumed: Int,
dyUnconsumed: Int,
type: Int,
consumed: IntArray!
): Unit
React to a nested scroll in progress.
This method will be called when the ViewParent's current nested scrolling child view dispatches a nested scroll event. To receive calls to this method the ViewParent must have previously returned true for a call to onStartNestedScroll.
Both the consumed and unconsumed portions of the scroll distance are reported to the ViewParent. An implementation may choose to use the consumed portion to match or chase scroll position of multiple child elements, for example. The unconsumed portion may be used to allow continuous dragging of multiple scrolling or draggable elements, such as scrolling a list within a vertical drawer where the drawer begins dragging once the edge of inner scrolling content is reached.
This method is called when a nested scrolling child invokes dispatchNestedScroll} or one of methods it overloads.
An implementation must report how many pixels of the the x and y scroll distances were consumed by this nested scrolling parent by adding the consumed distances to the consumed parameter. If this View also implements NestedScrollingChild3, consumed should also be passed up to it's nested scrolling parent so that the parent may also add any scroll distance it consumes. Index 0 corresponds to dx and index 1 corresponds to dy.
| Parameters | |
|---|---|
target: View |
The descendant view controlling the nested scroll |
dxConsumed: Int |
Horizontal scroll distance in pixels already consumed by target |
dyConsumed: Int |
Vertical scroll distance in pixels already consumed by target |
dxUnconsumed: Int |
Horizontal scroll distance in pixels not consumed by target |
dyUnconsumed: Int |
Vertical scroll distance in pixels not consumed by target |
type: Int |
the type of input which cause this scroll event |
consumed: IntArray! |
Output. Upon this method returning, will contain the scroll distances consumed by this nested scrolling parent and the scroll distances consumed by any other parent up the view hierarchy |
| See also | |
|---|---|
dispatchNestedScroll |
onNestedScrollAccepted
fun onNestedScrollAccepted(child: View, target: View, axes: Int, type: Int): Unit
React to the successful claiming of a nested scroll operation.
This method will be called after onStartNestedScroll returns true. It offers an opportunity for the view and its superclasses to perform initial configuration for the nested scroll. Implementations of this method should always call their superclass's implementation of this method if one is present.
| Parameters | |
|---|---|
child: View |
Direct child of this ViewParent containing target |
target: View |
View that initiated the nested scroll |
axes: Int |
Flags consisting of |
type: Int |
the type of input which cause this scroll event |
| See also | |
|---|---|
onStartNestedScroll |
|
onStopNestedScroll |
onStartNestedScroll
fun onStartNestedScroll(child: View, target: View, axes: Int, type: Int): Boolean
React to a descendant view initiating a nestable scroll operation, claiming the nested scroll operation if appropriate.
This method will be called in response to a descendant view invoking startNestedScroll. Each parent up the view hierarchy will be given an opportunity to respond and claim the nested scrolling operation by returning true.
This method may be overridden by ViewParent implementations to indicate when the view is willing to support a nested scrolling operation that is about to begin. If it returns true, this ViewParent will become the target view's nested scrolling parent for the duration of the scroll operation in progress. When the nested scroll is finished this ViewParent will receive a call to onStopNestedScroll.
| Parameters | |
|---|---|
child: View |
Direct child of this ViewParent containing target |
target: View |
View that initiated the nested scroll |
axes: Int |
Flags consisting of |
type: Int |
the type of input which cause this scroll event |
| Returns | |
|---|---|
Boolean |
true if this ViewParent accepts the nested scroll operation |
onStopNestedScroll
fun onStopNestedScroll(target: View, type: Int): Unit
React to a nested scroll operation ending.
Perform cleanup after a nested scrolling operation. This method will be called when a nested scroll stops, for example when a nested touch scroll ends with a ACTION_UP or ACTION_CANCEL event. Implementations of this method should always call their superclass's implementation of this method if one is present.
removeTransitionListener
fun removeTransitionListener(listener: MotionLayout.TransitionListener!): Boolean
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 | |
|---|---|
MotionLayout.TransitionListener |
rotateTo
fun rotateTo(id: Int, duration: Int): Unit
Rotate the layout based on the angle to a ConstraintSet
scheduleTransitionTo
fun scheduleTransitionTo(id: Int): Unit
on completing the current transition, transition to this state.
| Parameters | |
|---|---|
id: Int |
setDebugMode
fun setDebugMode(debugMode: Int): Unit
Display the debugging information such as paths information
| Parameters | |
|---|---|
debugMode: Int |
integer representing various debug modes |
setDelayedApplicationOfInitialState
fun setDelayedApplicationOfInitialState(delayedApply: Boolean): Unit
Initial state changes are applied during onAttachedToWindow unless this is set to true.
| Parameters | |
|---|---|
delayedApply: Boolean |
setInteractionEnabled
fun setInteractionEnabled(enabled: Boolean): Unit
Enables (or disables) MotionLayout's onClick and onSwipe handling.
| Parameters | |
|---|---|
enabled: Boolean |
If true, touch &click is enabled; otherwise it is disabled |
setInterpolatedProgress
fun setInterpolatedProgress(pos: Float): Unit
Set the transition position between 0 an 1
| Parameters | |
|---|---|
pos: Float |
setOnHide
fun setOnHide(progress: Float): Unit
Notify OnHide motion helpers
| Parameters | |
|---|---|
progress: Float |
setOnShow
fun setOnShow(progress: Float): Unit
Notify OnShow motion helpers
| Parameters | |
|---|---|
progress: Float |
setProgress
fun setProgress(pos: Float): Unit
Set the transition position between 0 an 1
| Parameters | |
|---|---|
pos: Float |
the position in the transition from 0...1 |
setProgress
fun setProgress(pos: Float, velocity: Float): Unit
Set the transition position between 0 an 1
setScene
fun setScene(scene: MotionScene!): Unit
Sets a motion scene to the layout. Subsequent calls to it will override the previous scene.
setState
fun setState(id: Int, screenWidth: Int, screenHeight: Int): Unit
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
setTransition
fun setTransition(transitionId: Int): Unit
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
fun setTransition(beginId: Int, endId: Int): Unit
Set a transition explicitly between two constraint sets
setTransitionDuration
fun setTransitionDuration(milliseconds: Int): Unit
Change the current Transition duration.
| Parameters | |
|---|---|
milliseconds: Int |
duration for transition to complete |
setTransitionListener
fun setTransitionListener(listener: MotionLayout.TransitionListener!): Unit
Set a listener to be notified of drawer events.
| Parameters | |
|---|---|
listener: MotionLayout.TransitionListener! |
Listener to notify when drawer events occur |
| See also | |
|---|---|
MotionLayout.TransitionListener |
setTransitionState
fun setTransitionState(bundle: Bundle!): Unit
Set the transition state as a bundle
touchAnimateTo
fun touchAnimateTo(touchUpMode: Int, position: Float, currentVelocity: Float): Unit
| Parameters | |
|---|---|
touchUpMode: Int |
behavior on touch up, can be either:
|
position: Float |
animate to given position |
currentVelocity: Float |
touchSpringTo
fun touchSpringTo(position: Float, currentVelocity: Float): Unit
Allows you to use trigger spring motion touch behaviour. You must have configured all the spring parameters in the Transition's OnSwipe
transitionToEnd
fun transitionToEnd(): Unit
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
transitionToEnd
fun transitionToEnd(onComplete: Runnable!): Unit
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 done |
transitionToStart
fun transitionToStart(): Unit
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
transitionToStart
fun transitionToStart(onComplete: Runnable!): Unit
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
| Parameters | |
|---|---|
onComplete: Runnable! |
callback when task is done |
transitionToState
fun transitionToState(id: Int): Unit
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
fun transitionToState(id: Int, duration: Int): Unit
Animate to the state defined by the id. The id is the id of the ConstraintSet or the id of the State.
transitionToState
fun transitionToState(id: Int, screenWidth: Int, screenHeight: Int): Unit
Animate to the state defined by the id. Width and height may be used in the picking of the id using this StateSet.
transitionToState
fun transitionToState(
id: Int,
screenWidth: Int,
screenHeight: Int,
duration: Int
): Unit
Animate to the state defined by the id. Width and height may be used in the picking of the id using this StateSet.
updateState
fun updateState(stateId: Int, set: ConstraintSet!): Unit
update a ConstraintSet under the id.
| Parameters | |
|---|---|
stateId: Int |
id of the ConstraintSet |
set: ConstraintSet! |
The constraintSet |
updateStateAnimate
fun updateStateAnimate(stateId: Int, set: ConstraintSet!, duration: Int): Unit
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 |
Protected functions
dispatchDraw
protected fun dispatchDraw(canvas: Canvas!): Unit
Used to draw debugging graphics and to do post layout changes
| Parameters | |
|---|---|
canvas: Canvas! |
fireTransitionCompleted
protected fun fireTransitionCompleted(): Unit
This causes the callback TransitionCompleted to be called
getNanoTime
protected fun getNanoTime(): Long
Subclasses can override to define testClasses
| Returns | |
|---|---|
Long |
obtainVelocityTracker
protected fun obtainVelocityTracker(): MotionLayout.MotionTracker!
Subclasses can override to build test frameworks
| Returns | |
|---|---|
MotionLayout.MotionTracker! |
onLayout
protected fun onLayout(changed: Boolean, left: Int, top: Int, right: Int, bottom: Int): Unit
parseLayoutDescription
protected fun parseLayoutDescription(id: Int): Unit
block ConstraintLayout from handling layout description
| Parameters | |
|---|---|
id: Int |