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>后导致不生效,检查下是否没设置<OnSwipe>的dragDirection属性
<OnClick>增加了对触发转换的支持
<KeyFrameSet>描述一组key对象,这些对象可以改变动画的默认路径,在动画过渡到指定的关键帧时对View的属性做修改(可选)

<OnSwipe>

属性描述
touchAnchorId使拖动事件作用在全局(随意指定一个Id即可),同时设置touchRegionId,touchAnchorId优先级最高,如果无法拖动,或者每次拖动都直接跳到动画结束,说明需要同时设置dragDirection属性(原因不明)
touchRegionId使拖动事件作用在指定View的范围内(即使该View不可见),同时设置touchAnchorId,touchRegionId不生效
touchAnchorSide扫动执行动画进度(非拖拽,手指轻扫立即移开,可在动画执行期间多次扫动来控制动画进度),touchRegionId生效时,touchAnchorSide才会生效
maxVelocity限制动画的最大速度(进行中/秒)。默认值4
onTouchUp拖动松手时,动画向开始/结束移动
autoComplete:自动计算
一直拖着走,突然松手时,距离哪边最近就向哪边结束
轻扫一下就抬起的拖动,根据惯性算法自动计算向哪边结束
(轻扫抬起是根据惯性原则,而不是最近原则,具体实现感兴趣的可以参考源码)
autoCompleteToEnd:向结束移动
autoCompleteToStart:向开始移动
decelerate:松手后动画自动滑行一段进度后停止
decelerateAndComplete:松手后动画自动滑行一段进度后,距离哪边最近,就向哪边移动
stop:松手后动画进度停止在当前进度
dragDirection跟随手指,向哪边拖动时激活动画进度{dragUp | dragDown | dragLeft | dragRight},在touchRegionId生效时,dragDirection才会生效
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作用在哪一个View,值为View的Id
framePosition取值1-99,表示当前这组<KeyPosition>路径执行完毕所需要的百分比帧数,取值为1%-99%
举例:如果设置77,代表77%的帧数用来执行这组路径,剩下23%的帧数来执行剩余未改动的路径,如果percentX设置为0.3,代表用77%帧数来执行30%的路径,后面23%的帧数来执行剩余的70%路径,所以会造成先慢后快的视觉。利用这一点可以自定义我们需要的类似插值器效果。
transitionEasing定义从该点动画时要使用的缓动曲线(例如curve(1.0,0,0,1.0))或关键字{standard
pathMotionArc路径将以弧形(月蚀)关键字{startVertical
keyPositionType用于辅助计算路径,指定percentX和percentY的起点值
pathRelative:当前路径的起始位置就是X的起点值,当前位置的起始位置就是Y的起点值
parentRelative: 父类的左边就是X的起点值,父类的上边就是Y的起点值
deltaRelative: 设置该属性,不管怎么搭配使用都不起作用,原因不明
percentX在路径范围内移动X轴,正数代表向右移,负数代表向左移,取值为0.0-1.0, 代表当前路径总直线长度的0%-100%
percentY垂直于X轴,正数代表向下垂直,负数代表向上垂直,取值为0.0-1.0,代表当前路径总直线长度的0%-100%
percentWidth(浮动)宽度变化的百分比。请注意,如果宽度没有变化,则此操作无效。它将覆盖sizePercent
percentHeight(浮动)宽度变化的百分比。请注意,如果宽度没有变化,则此操作无效。它将覆盖sizePercent
curveFit追踪路径
[percentX+percentY]设置好percentX+percentY的位置后,从起始位置到目标位置(percentX+percentY)并不是直线的路径,而是弧线的路径,具体的弧线路径是由动画框架自己来完成的,所以在可定制的效果上会稍微差一些
drawPath绘制对象布局的路径对于调试很有用
sizePercent如果视图更改大小,则这将控制大小的增长方式。(对于固定大小的对象,请使用KeyAttributes scaleX / X)
curveFit选择基于直线的路径或基于单调样条线的路径{linear

<KeyAttribute>

属性描述
motionTarget作用在哪一个View,值为View的Id
framePosition取值1-99,表示当前这组<KeyAttribute>属性执行完毕所需要的百分比帧数,取值为1%-99%
举例:如果设置77,代表77%的帧数用来执行这组属性,剩下23%的帧数来还原成未改动的属性,如果scaleX设置为2,代表用77%帧数来对scaleX渐渐缩放到2,后面23%的帧数来还原成原始属性。
curveFit选择基于直线的路径或基于单调样条线的路径{linear
transitionEasing定义从该点开始动画时要使用的缓动曲线(例如curve(1.0,0,0,1.0))或关键字{standard
transitionPathRotate(浮动)相对于所走路径旋转对象
drawPath画出布局将设置动画的路径
motionProgress在此视图上调用方法setProgress(float)(用于与嵌套的ConstraintLayouts等对话)
[View常用属性]一些View自带的常用属性,例如scaleX,scaleY等
<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)

<KeyCycle>

属性描述
motionTarget视图的ID或与layout_ConstraintTag匹配的正则表达式
framePosition沿插值点0 =起点100 =终点
waveShape产生{正弦波
wavePeriod每秒循环数
waveOffset添加到属性的偏移值
transitionPathRotate应用于相对于视图行进路径的旋转的循环
progress在此视图上调用方法setProgress(float)(用于与嵌套的ConstraintLayouts等对话)
<CustomAttribute>通过反射调用设置的“名称”方法(仅限于浮点数)

<CustomAttribute>

属性描述
attributeName属性的名称。区分大小写。(MyAttr将寻找方法setMyAttr(…)
customFloatValue该值是一个看起来像setMyAttr(float)的float

<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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值