目录
动画资源可以定义两种类型的动画之一:
1、属性动画(Property Animation)
通过在一个固定的时间段内修改对象的属性值来创建动画.
2、视图动画(View Animation)
有两种类型的动画可以用视图动画框架来完成:
详细内容参考官方文档animation的介绍。
在XML中定义的一种动画,它执行图形的旋转、渐变、移动和拉伸等转换。
file location: res/anim/filename.xml
In Java: R.anim.filename
文件必须有一个根元素:<alpha>
,<scale>
,<translate>
,<rotate>
或<set>包含一组动画类型作为动画集。
<?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>
Android的animation由四种类型组成:alpha、scale、translate、rotate,
alpha | 渐变透明度动画效果 |
scale | 渐变尺寸伸缩动画效果 |
translate | 画面转换位置移动动画效果 |
rotate | 画面转移旋转动画效果 |
ImageView image = (ImageView) findViewById(R.id.image);
Animation anim= AnimationUtils.loadAnimation(this, R.anim.anim_test);
image.startAnimation(anim);
插值器是XML中定义的动画修改器,它影响动画的变化率。这允许你现有的动画效果被加速、减速、重复、弹跳等,类似DOtween的Ease缓动函数,效果链接,这是我以前做游戏开发使用的动画插件。
下表指定用于每个内插器的资源:
Interpolator class | Resource ID | Means |
---|---|---|
AccelerateDecelerateInterpolator | @android:anim/accelerate_decelerate_interpolator | 在动画开始与介绍的地方速率改变比较慢,在中间的时候加速 |
AccelerateInterpolator | @android:anim/accelerate_interpolator | 在动画开始的地方速率改变比较慢,然后开始加速 |
AnticipateInterpolator | @android:anim/anticipate_interpolator | 开始的时候向后然后向前甩 |
AnticipateOvershootInterpolator | @android:anim/anticipate_overshoot_interpolator | 开始的时候向后然后向前甩一定值后返回最后的值 |
BounceInterpolator | @android:anim/bounce_interpolator | 动画结束的时候弹起 |
CycleInterpolator | @android:anim/cycle_interpolator | 动画循环播放特定的次数,速率改变沿着正弦曲线 |
DecelerateInterpolator | @android:anim/decelerate_interpolator | 在动画开始的地方快然后慢 |
LinearInterpolator | @android:anim/linear_interpolator | 以常量速率改变 |
OvershootInterpolator | @android:anim/overshoot_interpolator | 向前甩一定值后再回到原来位置 |
使用方式:
<set android:interpolator="@android:anim/accelerate_interpolator">
...
</set>
如果您不满意平台提供的内插器(在上面的表中列出),您可以自定义插值器,同样的再anim文件下创建,添加你需要的修改的插值器的名字和相关属性。
<?xml version="1.0" encoding="utf-8"?>
<InterpolatorName xmlns:android="http://schemas.android.com/apk/res/android"
android:attribute_name="value"
/>
在XML中定义的动画,按顺序显示图像序列(如电影)。
file location: res/drawable/filename.xml
In Java: R.drawable.filename
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot=["true" | "false"] >
<item
android:drawable="@[package:]drawable/drawable_resource_name"
android:duration="integer" />
</animation-list>
<animation-list>: 这必须是根元素,包含一个或多个<item>元素
<item> : 单一的动画框架,必须作为一个<animation-list>元素
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="false">
<item android:drawable="@drawable/rocket_thrust1" android:duration="200" />
<item android:drawable="@drawable/rocket_thrust2" android:duration="200" />
<item android:drawable="@drawable/rocket_thrust3" android:duration="200" />
</animation-list>
该应用程序代码将动画设置为视图的背景,然后播放动画:
ImageView rocketImage = (ImageView) findViewById(R.id.rocket_image);
rocketImage.setBackgroundResource(R.drawable.rocket_thrust);
rocketAnimation = rocketImage.getBackground();
if (rocketAnimation instanceof Animatable) {
((Animatable)rocketAnimation).start();
}
参考启航大佬自定义控件三部曲之动画篇(一)/ Interpolator插值器
参考官方文档介绍Animation