Android 补间、属性动画----重新认识Android(12)

来源:互联网 发布:lua5.3.4 for windows 编辑:程序博客网 时间:2024/06/05 16:15
在Android3.0(即API Level11)以前,Android仅支持2种动画:分别是Frame Animation(逐帧动画)和Tween Animation(补间动画),在3.0之后Android支持了一种新的动画系统,称为:Property Animation(属性动画)

// 补间动画的播放:
// 1. 从 XML 加载动画,形成对象
Animation animation =
AnimationUtils.loadAnimation(this, R.anim.anim_zan);
// 1.1 动画对象可以进行监听器的设置,
animation.setAnimationListener(this);
// 2. 播放动画
txtInc1.startAnimation(animation);
------------------
<?xml version="1.0" encoding="utf-8"?>
<!-- res/anim/ 目录下的文件都是补间动画的定义,
通过这些定义的动画操作, 就可以实现控件动态效果的展示;
-->
<set
xmlns:android="http://schemas.android.com/apk/res/android"
>
<!-- +1 动画, 从下向上移动控件 需要使用 translate 动画 -->
<!--
所有的动画,都会包含 duration 属性, 这个属性就是 一个动画动画效果的执行事件
fromYDelta delta 是增量的意思,相对于当前控件的位置增量;
如果为 0 代表就是当前控件真实的位置;
如果为 10 代表 以当前位置为基础, + 10
如果为 负数, 那么代表 -
-->
<!--
repeatCount 包含属性的这个动画重复执行几次, 第一次执行之后,再进行重复的次数;
infinite 代表无限循环
repeatMode 用于控制动画循环播放的方式:
restart : 每次执行完之后, 快速还原为控件的原始状态, 然后再一次重复设置的动画
可以认为是单向重复;
reverse : 代表,动画一次播放完成之后, 不进行状态还原,而是,按照动画的使用, 将
动画的操作反向执行一遍; 相当于"钟摆" 的形式, 往返执行;
!!! reverse 模式,往返算两次,一去一会 两次;
-->
<translate
android:duration="2000"
android:fromYDelta="0"
android:toYDelta="-30"
/>
<alpha
android:startOffset="2000"
android:duration="1000"
android:fromAlpha="1"
android:toAlpha="0"
/>

<!-- Scale 用于缩放 -->
<!-- 缩放必须同时设置 x, y 的缩放, pivotX, pivotY 来控制缩放的中心 -->
<scale
android:duration="650"
android:fromXScale="1"
android:toXScale="2"
android:fromYScale="1"
android:toYScale="2"
android:pivotX="50%"
android:pivotY="50%"
android:repeatCount="infinite"
android:repeatMode="reverse"
/>
</set>

--------------------------------------------------
<?xml version="1.0" encoding="utf-8"?>
<rotate
xmlns:android="http://schemas.android.com/apk/res/android"

android:duration="1000"
android:fromDegrees="0"
android:toDegrees="-360"
android:repeatCount="infinite"
android:repeatMode="restart"
android:pivotX="50%"
android:pivotY="50%"
android:interpolator="@android:interpolator/linear"
>
<!-- 0度 代表 3点钟位置; 正的角度代表 顺时针旋转,
负数角度 代表逆时针方向;
默认旋转的轴,在 控件的左上角;
pivotX, pivotY
取值: 1) 纯数字: 代表 当前控件的左上角为基准, 指定的像素位置;
2) 控件百分比: 代表 以当前控件尺寸为基准, 百分比位置, 如: 50%
3) 父容器百分比: 代表当前控件所在父容器中的 百分比位置, 如 50%p

关于 插值器 interpolator, 这个属性用于控制 动画播放的时候, 每一个动画片段
在展示的时候, 内部的速度\时间的数值控制;
-->
</rotate>

-属性动画-在res/animator----------------------------------------------
// 1. 加载 XML
// // 相当于属性修改器;
// Animator animator =
// AnimatorInflater.loadAnimator(this, R.animator.animator_path);
// // 2. 给动画设置目标
// // 设置的目标 内部必须包含属性动画配置文件中指定的属性名, setXxxxx 方法;
// animator.setTarget(view);
// // 3. 动画执行
// animator.start();
// ------------------------------
// 代码形式的属性动画设置

// 利用静态方法,创建一个修改属性的 Animator,
float tX = view.getTranslationX();
ObjectAnimator animator =
ObjectAnimator.ofFloat(view, "translationX", new float[]{tX, tX+300});
animator.setDuration(5000);
animator.start();
-----------
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:ordering="together"
>
<!--
属性动画,实际上就是在一定时间之内, 针对一个对象的某一个或者一些属性进行
修改, 修改的范围是线性的;
objectAnimator 用于修改对象的属性
propertyName 属性代表 对象 修改的属性名称; 要求 对象必须包含 setXxxx() 方法
例如 propertyName 设置为 textColor 之后,那么要求对象必须包含 setTextColor(int)
valueType 属性,代表 属性的数据类型,支持 float 和 int,只有这两种;
例如 int-> setXxx(int) float -> setXxxx(float)
valueFrom
valueTo
-->
<objectAnimator
android:duration="5000"
android:propertyName="left"
android:valueType="intType"
android:valueFrom="0"
android:valueTo="100"
/>
<objectAnimator
android:duration="5000"
android:propertyName="right"
android:valueType="intType"
android:valueFrom="200"
android:valueTo="500"
/>
<objectAnimator
android:duration="5000"
android:propertyName="rotation"
android:valueType="floatType"
android:valueFrom="0"
android:valueTo="720"
/>
</set>

//-逐帧动画在res/drawable目录下------------------------------
<?xml version="1.0" encoding="utf-8"?>
<animation-list
xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="true"
>
<!-- 每一个item,就是一帧, 一帧就是一张图片 可以控制每一帧的显示时长 -->
<item android:drawable="@drawable/elec06" android:duration="300"/>
<item android:drawable="@drawable/elec05" android:duration="300"/>
<item android:drawable="@drawable/elec04" android:duration="300"/>
<item android:drawable="@drawable/elec03" android:duration="300"/>
<item android:drawable="@drawable/elec02" android:duration="300"/>
<item android:drawable="@drawable/elec01" android:duration="300"/>
</animation-list>
0 0
原创粉丝点击