Android 补间动画

Android 补间动画,第1张

概述Android补间动画。旋转,位移,缩放,透明度变化。

补间动画:通过使用 Animation 对单张图片执行一系列转换来创建动画。

在 XML 中定义的动画,用于对图形执行旋转、淡出、移动和拉伸等转换。

动画文件放在res/anim/,该文件名将用作资源 ID。

移动示例

先用一个例子建立直观的认识。新建一个动画xml,实现从左到右的效果。
move_hor_1.xml

<?xml version="1.0" enCoding="utf-8"?><set xmlns:androID="http://schemas.androID.com/apk/res/androID">    <translate        androID:duration="200"        androID:toXDelta="-100%" />    <translate        androID:duration="400"        androID:startOffset="200"        androID:toXDelta="100%" /></set>

要使用这个动画,需要用到AnimationUtils.loadAnimation(getContext(),R.anim.move_hor_1);来加载动画。得到对象mAnimation
交给VIEw.startAnimation(mAnimation);来启动。

上面的动画例子效果图

仔细看一下动画xml里的内容

set里有2个translatetranslate表示移动动作duration是这个动作的执行时长(毫秒)toXDelta表示横行移动startOffset表示动画开始执行多久后再执行这个动作

实际上,第二个translate周期是400毫秒,它“等了”200毫米才开始执行。
把VIEw从左边移动到了右边。

缩放示例

除了位移,还可以执行缩放效果。

可以看到示例种先放大再缩小回去。主要是用了androID:repeatMode="reverse"androID:repeatCount="1"

完整动画xml如下

<?xml version="1.0" enCoding="utf-8"?><set xmlns:androID="http://schemas.androID.com/apk/res/androID">    <scale        androID:duration="600"        androID:fromXScale="1"        androID:fromYScale="1"        androID:pivotX="50%"        androID:pivotY="50%"        androID:repeatCount="1"        androID:repeatMode="reverse"        androID:toXScale="1.35"        androID:toYScale="1.35" /></set>

scale里面我们遇到了几个元素pivotXrepeatCountrepeatMode

androID:pivotX 在对象缩放时要保持不变的 X 坐标;pivotY同理。androID:repeatCount 动画的重复次数。设为 "-1" 表示无限次重复,也可设为正整数。例如,值 "1" 表示动画在初次播放后重复播放一次,因此动画总共播放两次。默认值为 "0",表示不重复。androID:repeatMode 动画播放到结尾处的行为。androID:repeatCount 必须设置为正整数或 "-1",该属性才有效。设置为 "reverse" 可让动画在每次迭代时反向播放,设置为 "repeat" 则可让动画每次从头开始循环播放。多个动画元素的例子

一个<set>集合里可以包含多个元素。

录制gif的出来发现快结束时总有一个抖动,是录制的问题。

<?xml version="1.0" enCoding="utf-8"?><set xmlns:androID="http://schemas.androID.com/apk/res/androID"    androID:shareInterpolator="false">    <rotate        androID:duration="500"        androID:fromdegrees="0"        androID:pivotX="50%"        androID:pivotY="50%"        androID:todegrees="360" />    <translate        androID:duration="500"        androID:fromXDelta="0%"        androID:toXDelta="50%" />    <Alpha        androID:duration="500"        androID:fromAlpha="1"        androID:toAlpha="0.5" />    <set        androID:interpolator="@androID:anim/decelerate_interpolator"        androID:startOffset="500">        <rotate            androID:duration="400"            androID:fromdegrees="360"            androID:pivotX="100%"            androID:pivotY="50%"            androID:todegrees="0" />        <translate            androID:duration="400"            androID:fromXDelta="0%"            androID:toXDelta="-50%" />        <Alpha            androID:duration="400"            androID:fromAlpha="0.5"            androID:toAlpha="1" />    </set></set>

<set>里放置着多个元素,可以把<set>放进<set>里。
我们分成出发和回来两个动作

出发:

第一个<rotate>是从自己的中心位置开始。
<translate>水平向右走了50%。

回来:

后面<rotate>pivotX需要考虑到出发时水平移动了50%,因此pivotX取值100%。

<translate>从0%走到-50%即可。

动画xml元素

下面总结一下各个属性

<?xml version="1.0" enCoding="utf-8"?>    <set xmlns:androID="http://schemas.androID.com/apk/res/androID"        androID:interpolator="@[package:]anim/interpolator_resource"        androID:shareInterpolator=["true" | "false"] >        <Alpha            androID:fromAlpha="float"            androID:toAlpha="float" />        <scale            androID:fromXScale="float"            androID:toXScale="float"            androID:fromYScale="float"            androID:toYScale="float"            androID:pivotX="float"            androID:pivotY="float" />        <translate            androID:fromXDelta="float"            androID:toXDelta="float"            androID:fromYDelta="float"            androID:toYDelta="float" />        <rotate            androID:fromdegrees="float"            androID:todegrees="float"            androID:pivotX="float"            androID:pivotY="float" />        <set>            ...        </set>    </set>
set

容纳其他动画元素( 或其他 元素)的容器。代表 AnimatorSet。
可以放置多个动画元素,组合在一起。每个set可定义自己的 ordering 属性。

androID:interpolator 插值器资源。 要应用于动画的 Interpolator。 该值必须是对指定插值器的资源的引用(而不是插值器类名称)。可使用平台提供的默认插值器资源,也可创建自己的插值器资源。androID:shareInterpolator 布尔值。如果要在所有子元素中共用同一插值器,则为“true”。Alpha

淡入或淡出动画。对应AlphaAnimation类。

androID:fromAlpha 浮点数。起始不透明度偏移,0.0 表示透明,1.0 表示不透明。androID:toAlpha 浮点数。结束不透明度偏移,0.0 表示透明,1.0 表示不透明。scale

缩放动画,调整大小的动画;对应ScaleAnimation
指定 pivotXpivotY,来指定VIEw向外(或向内)扩展的中心点。
例如,如果这两个值为 0、0(左上角),则所有扩展均向右下方向进行。

androID:fromXScale 浮点数。起始 X 尺寸偏移,其中 1.0 表示不变。androID:toXScale 浮点数。结束 X 尺寸偏移,其中 1.0 表示不变。androID:fromYScale 浮点数。起始 Y 尺寸偏移,其中 1.0 表示不变。androID:toYScale 浮点数。结束 Y 尺寸偏移,其中 1.0 表示不变。androID:pivotX 浮点数。在对象缩放时要保持不变的 X 坐标。androID:pivotY 浮点数。在对象缩放时要保持不变的 Y 坐标。translate

移动动画。垂直或水平移动。或者水平和垂直移动一起。对应TranslateAnimation。
支持采用以下三种格式之一的以下属性:从 -100 到 100 的以“%”结尾的值,表示相对于自身的百分比;从 -100 到 100 的以“%p”结尾的值,表示相对于其父项的百分比;不带后缀的浮点值,表示绝对值。

属性:

androID:fromXDelta float或百分比。起始 X 偏移。表示方式:相对于正常位置的像素数(例如 "5"),相对于元素宽度的百分比(例如 "5%"),或相对于父项宽度的百分比(例如 "5%p")。androID:toXDelta float或百分比。结束 X 偏移。表示方式同fromXDeltaandroID:fromYDelta float或百分比。起始 Y 偏移。表示方式:相对于正常位置的像素数(例如 "5"),相对于元素高度的百分比(例如 "5%"),或相对于父项高度的百分比(例如 "5%p")。androID:toYDelta float或百分比。结束 Y 偏移。表示方式同fromYDeltarotate

旋转动画。对应RotateAnimation。

属性:

androID:fromdegrees浮点数。起始角度位置,以度为单位。androID:todegrees浮点数。结束角度位置,以度为单位。androID:pivotXfloat或百分比。旋转中心的 X 坐标。表示方式:相对于对象左边缘的像素数(例如 "5"),相对于对象左边缘的百分比(例如 "5%"),或相对于父级容器左边缘的百分比(例如 "5%p")。androID:pivotYfloat或百分比。旋转中心的 Y 坐标。表示方式:相对于对象上边缘的像素数(例如 "5"),相对于对象上边缘的百分比(例如 "5%"),或相对于父级容器上边缘的百分比(例如 "5%p")。参考Tween动画指南 https://developer.android.com/guide/topics/resources/animation-resource#Tweenres简介 https://an.rustfisher.com/android/resource/resources_overview/ 总结

以上是内存溢出为你收集整理的Android 补间动画全部内容,希望文章能够帮你解决Android 补间动画所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1119242.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存