TransitionManager动画
在视图发生更改时,为更改的过程增加动画,更改前为起点,更改结束为终点。
公开方法:
static void beginDelayedTransition(ViewGroup sceneRoot, Transition transition)
方法说明:
开始执行动画方法,以当前视图为开始,下一个渲染帧为结束,在这个开始和结束的过程中增加动画。
关键参数:
sceneRoot:
一般传入当前视图的根布局。
Transition:
有四个子类动画:
Autotransition:
自动过度
Explode:
爆炸
Fade:
淡入淡出
Slide:
滑动
重载方法:
static void beginDelayedTransition(ViewGroup sceneRoot)
少了transition参数,transition参数默认为Autotransition动画。
static void endTransitions(ViewGroup sceneRoot)
方法说明:
结束指定场景根上的所有暂停和正在进行的过渡。
MotionLayout动画
MotionLayout是一种布局类型,可以管理程序中的动画运动,它是ConstraintLayout的子类,可以基于其丰富的布局功能构建,在constraintlayout2.0中引入,向后兼容到 API 14级别。
注意事项:
这个动画只能控制布局内的View位置和属性,没办法在动画的过程中替换一个新布局进来,如果是要在动画的过程中替换新布局进来需要用到TransitionManager动画框架。MotionLayout的动画仅适用于其直系子代,不支持嵌套的布局层次结构。MotionLayout的动画是在xml里面用标签来编写的。
使用MotionLayout:
把根布局变为MotionLayout,在到res/xml文件夹下新建一个xml文件,文件名取为xxx(对应的布局文件名)_scene.xml。之后设置MotionLayout属性app:layoutDescription="@xml/xxx(刚刚新建的xml文件)_scene"
MotionLayout布局的关键参数:
属性 | 描述 |
---|---|
ayoutDescription | 设置描述动画的xml文件,该文件一般存放在res/xml文件夹下面 |
motionDebug | 是否开启调试信息(NO_DEBUG:不开启 || SHOW_ALL:显示所有调试信息 || SHOW_PATH:显示动画的路径信息 || SHOW_PROGRESS:显示动画的当前进度信息) Java设置的方法为:setDebugMode(MotionLayout.DEBUG_SHOW_PATH + MotionLayout.DEBUG_SHOW_PROGRESS) |
showPaths | 是否在xml界面开启预览动画路径 |
motionProgress | 取值为0.0-1.0,代表设置当前初始化动画进度为0%-100%,不能在数字后面加f |
描述动画的xml文件:
在res/xml文件夹下新建一个xml文件,文件名取为xxx(布局文件)_scene.xml,描述动画的关键标签为MotionScene,同时也必须是根标签,示例:
<MotionScene xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
</MotionScene>
MotionScene:
属性 | 描述 |
---|---|
defaultDuration | 点击激活动画,执行过渡所需的时间(拖动激活的动画无效),优先级最低 |
<Transition> | 描述两个状态或约束集之间的过渡 |
<ConstraintSet> | 描述约束集 |
<StateSet> | 描述系统支持的状态(可选) |
Transition
属性 | 描述 |
---|---|
android:id | 过渡的ID |
constraintSetStart | 开始约束,用ConstraintSet获取约束,或从布局文件中获取约束 |
ConstraintSetEnd | 结束约束,用ConstraintSet获取约束,或从布局文件中获取约束 |
motionInterpolator | 设置整体插值器的能力,只有在<OnClick>生效时才有作用 bounce:结束的时候弹跳 linear:线性,默认值 easeIn:先慢后快 easeOut:先快后慢 easeInOut:结束的时候变慢 |
duration | 执行过渡所需的时间(只对<OnClick>标签生效 ) |
staggered | 浮动:交错移动物体的快速方法 |
autoTransition | 自动从一种状态转换到另一种状态。支持关键字{none,jumpToStart,jumpToEnd,animateToStart,animateToEnd} |
<OnSwipe> | 增加了对触摸处理的支持(和<OnClick>同时存在时不生效) |
<OnClick> | 增加了对触发转换的支持 |
<KeyFrameSet> | 描述一组Key对象,这些对象可以对动画的关键帧做修改。(可选) |
<OnSwipe>
属性 | 描述 |
---|---|
touchAnchorId | 使拖动事件作用在全局(随意指定一个ID即可),同时设置dragDirection属性才会生效,同时设置touchRegionId,touchAnchorId优先级最高 |
touchRegionId | 使拖动事件作用在指定View的范围内(即使该View不可见),同时设置touchAnchorId,touchRegionId不生效 |
touchAnchorSide | 扫动执行动画进度(非拖拽,手指轻扫立即移开,可在动画执行期间多次扫动来控制动画进度),touchRegionId生效时,touchAnchorSide才会生效 |
maxVelocity | 限制动画的最大速度(进行中/秒)。默认值4 |
onTouchUp | 拖动松手时,动画向开始/结束移动 autoComplete:距离哪边最近,就向哪边移动 autoCompleteToEnd:向结束移动 autoCompleteToStart:向开始移动 decelerate:松手后动画自动滑行一段进度后停止 decelerateAndComplete:松手后动画自动滑行一段进度后,距离哪边最近,就向哪边移动 stop:松手后动画进度停止在当前进度 |
dragDirection | 跟随手指,平移拖动到哪一侧{dragUp | dragDown | dragLeft | dragRight},如果动画的结束进度在右侧,设置成dragLeft会无法拖动 |
maxAcceleration | 动画在修饰时加速(进度/秒/秒)和减速的速度。默认1.2 |
dragScale | 比例因子以调整滑动。(例如0.5会要求您移动2倍) |
moveWhenScrollAtTop | 如果滑动是滚动的,并且View(例如RecyclerView或NestedScrollView)同时滚动和过渡 |
autoComplete | 滑动会自动设置动画以开始或结束。默认为true。警告:关闭此功能并使用时间周期会导致动画连续播放。 |
<OnClick>
属性 | 描述 |
---|---|
motionTarget | 什么视图触发过渡 |
clickAction | 按钮移动动画的方向。或(|)的组合:切换,transitionToEnd,transitionToStart,jumpToEnd,jumpToStart |
<KeyFrameSet>
属性 | 描述 |
---|---|
<KeyPosition> | 在动画期间控制布局位置 |
<KeyAttribute> | 在动画期间控制帖子布局属性 |
<KeyCycle> | 控制动画期间帖子布局属性位置的振荡 |
<KeyTimeCycle> | 控制动画期间帖子布局属性时间的振荡 |
<KeyPosition>
属性 | 描述 |
---|---|
motionTarget | 视图的ID或与layout_ConstraintTag匹配的正则表达式 |
framePosition | 沿插值点0 =起点100 =终点 |
transitionEasing | 定义从该点动画时要使用的缓动曲线(例如curve(1.0,0,0,1.0))或关键字{standard |
pathMotionArc | 路径将以弧形(月蚀)关键字{startVertical |
keyPositionType | 如何计算此关键帧的线性路径偏差{deltaRelative |
percentX | X轴(deltaRelative)或pathRelative中路径从起点到终点的(浮动)百分比距离 |
percentY | (浮动)沿Y轴(deltaRelative)或与pathRelative中的路径垂直的起点到终点的百分比距离 |
percentWidth | (浮动)宽度变化的百分比。请注意,如果宽度没有变化,则此操作无效。它将覆盖sizePercent |
percentHeight | (浮动)宽度变化的百分比。请注意,如果宽度没有变化,则此操作无效。它将覆盖sizePercent |
curveFit | 追踪路径 |
drawPath | 绘制对象布局的路径对于调试很有用 |
sizePercent | 如果视图更改大小,则这将控制大小的增长方式。(对于固定大小的对象,请使用KeyAttributes scaleX / X) |
curveFit | 选择基于直线的路径或基于单调样条线的路径{linear |
<KeyAttribute>
属性 | 描述 |
---|---|
motionTarget | 视图的ID或与layout_ConstraintTag匹配的正则表达式 |
framePosition | 沿插值点0 =起点100 =终点 |
curveFit | 选择基于直线的路径或基于单调样条线的路径{linear |
transitionEasing | 定义从该点开始动画时要使用的缓动曲线(例如curve(1.0,0,0,1.0))或关键字{standard |
transitionPathRotate | (浮动)相对于所走路径旋转对象 |
drawPath | 画出布局将设置动画的路径 |
motionProgress | 在此视图上调用方法setProgress(float)(用于与嵌套的ConstraintLayouts等对话) |
<CustomAttribute> | 通过反射调用设置的“名称”方法 |
<CustomAttribute>
属性 | 描述 |
---|---|
attributeName | 属性的名称。区分大小写,通过反射方式调用,例如设置背景色就是"BackgroundColor" |
customColorValue | 该值为看起来像setMyAttr(int)的颜色 |
customIntegerValue | 该值是一个看起来像setMyAttr(int)的整数 |
customFloatValue | 该值是一个看起来像setMyAttr(float)的float |
customStringValue | 该值是一个看起来像setMyAttr(String)的字符串 |
customDimension | 该值是一个看起来像setMyAttr(float)的尺寸 |
customBoolean | 看起来是true还是false的setMyAttr(boolean) |
<KeyTimeCycle>
属性 | 描述 |
---|---|
motionTarget | 视图的ID或与layout_ConstraintTag匹配的正则表达式 |
framePosition | 沿插值点0 =起点100 =终点 |
waveShape | 产生{正弦波 |
wavePeriod | 每秒循环数 |
waveOffset | 添加到属性的偏移值 |
transitionPathRotate | 应用于相对于视图行进路径的旋转的循环 |
progress | 在此视图上调用方法setProgress(float)(用于与嵌套的ConstraintLayouts等对话) |
<CustomAttribute> | 通过反射调用设置的“名称”方法(仅限于浮点数) |
ConstraintSet
属性 | 描述 |
---|---|
android:id | ConstraintSet的ID |
<Constraint> | ConstraintLayout约束+与视图关联的其他属性 |
<Constraint>
属性 | 描述 |
---|---|
android:id | 视图编号 |
[ConstraintLayout attributes] | 允许使用属于ContraintLayout布局的任何属性 |
transitionEasing | 定义从该点动画时要使用的缓动曲线(例如curve(1.0,0,0,1.0))或关键字{standard |
pathMotionArc | 路径将以弧形(月蚀)或关键字{startVertical | startHorizontal | 没有 } |
transitionPathRotate | (浮动)相对于所走路径旋转对象 |
drawPath | 画出布局将设置动画的路径 |
progress | 在此视图上调用方法setProgress(float)(用于与嵌套的ConstraintLayouts等对话) |
<Layout> | ConstraintLayout的属性,例如layout_constraintTop_toTopOf |
<PropertySet> | 当前仅可见性,alpha,motionProgress,layout_constraintTag |
<Transform> | 所有视图转换API,例如android:rotation |
<Motion> | 运动布局控制命令,例如transitionEasing和pathMotionArc |
<CustomAttribute> | 通过反射调用设置的“名称”方法 |
<Layout>
允许使用属于ContraintLayout布局的任何属性
<PropertySet>
属性 | 描述 |
---|---|
visibility | 设置视图的可见性。可见,不可见或消失的一种 |
alpha | setAlpha值 |
motionProgress | 使用反射调用setProgress |
layout_constraintTag | 标记字符串以标识对象的类型 |
<Transform>
属性 | 描述 |
---|---|
android:elevation | 视图的基本z深度 |
android:rotation | 视图的旋转度(以度为单位) |
android:rotationX | 视图围绕x轴的旋转(以度为单位) |
android:rotationY | 围绕y轴的视图旋转(以度为单位) |
android:scaleX | 视图在x方向上的比例 |
android:scaleY | y方向上的视图比例 |
android:translationX | 视图x的翻译。此值在布局后添加到视图的left属性,该属性由其布局设置 |
android:translationY | 在视图y中进行翻译。此值在布局后添加到视图的top属性中,该属性由其布局设置 |
android:translationZ | 视图z的翻译。此值将添加到其高程中 |
<Motion>
属性 | 描述 |
---|---|
transitionEasing | 定义加速度曲线 |
pathMotionArc | 说除非垂直或水平运动,否则对象应按四分之一椭圆运动 |
motionPathRotate | 将旋转设置为对象的路径+此角度 |
drawPath | 调试实用程序绘制路径的运动 |
<CustomAttribute>
属性 | 描述 |
---|---|
attributeName | 属性的名称。区分大小写。(MyAttr将寻找方法setMyAttr(…) |
customColorValue | 该值为看起来像setMyAttr(int)的颜色 |
customIntegerValue | 该值是一个看起来像setMyAttr(int)的整数 |
customFloatValue | 该值是一个看起来像setMyAttr(float)的float |
customStringValue | 该值是一个看起来像setMyAttr(String)的字符串 |
customDimension | 该值是一个看起来像setMyAttr(float)的尺寸 |
customBoolean | 看起来是true还是false的setMyAttr(boolean) |
StateSet
属性 | 描述 |
---|---|
defaultState | 要使用的约束集或布局 |
<State> | 物体的侧面 |
<State>
属性 | 描述 |
---|---|
android:id | 当前State的编号 |
constraints | ConstraintSet或Layout文件的ID |
<Variant> | 不同的约束设置/布局以选择with或height匹配 |
<Variant>
属性 | 描述 |
---|---|
region_widthLessThan | 如果宽度小于则匹配 |
region_widthMoreThan | 如果宽度大于则匹配 |
region_heightLessThan | 如果高度小于则匹配 |
region_heightMoreThan | 如果高度超过则匹配 |
constraints | ConstraintSet或布局的ID |
转载自CSDN-专业IT技术社区
原文链接:https://blog.csdn.net/a1003434346/article/details/111771826