关注

Android动画

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
percentXX轴(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:idConstraintSet的ID
<Constraint>ConstraintLayout约束+与视图关联的其他属性

<Constraint>

属性描述
android:id视图编号
[ConstraintLayout attributes]允许使用属于ContraintLayout布局的任何属性
transitionEasing定义从该点动画时要使用的缓动曲线(例如curve(1.0,0,0,1.0))或关键字{standard
pathMotionArc路径将以弧形(月蚀)或关键字{startVertical | startHorizo​​ntal | 没有 }
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设置视图的可见性。可见,不可见或消失的一种
alphasetAlpha值
motionProgress使用反射调用setProgress
layout_constraintTag标记字符串以标识对象的类型

<Transform>

属性描述
android:elevation视图的基本z深度
android:rotation视图的旋转度(以度为单位)
android:rotationX视图围绕x轴的旋转(以度为单位)
android:rotationY围绕y轴的视图旋转(以度为单位)
android:scaleX视图在x方向上的比例
android:scaleYy方向上的视图比例
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的编号
constraintsConstraintSet或Layout文件的ID
<Variant>不同的约束设置/布局以选择with或height匹配

<Variant>

属性描述
region_widthLessThan如果宽度小于则匹配
region_widthMoreThan如果宽度大于则匹配
region_heightLessThan如果高度小于则匹配
region_heightMoreThan如果高度超过则匹配
constraintsConstraintSet或布局的ID

转载自CSDN-专业IT技术社区

原文链接:https://blog.csdn.net/a1003434346/article/details/111771826

文章分类Android

评论

赞0

评论列表

微信小程序
QQ小程序

关于作者

点赞数:0
关注数:0
粉丝:0
文章:0
关注标签:0
加入于:--