动画概要
分类
- 传统动画:逐帧动画,补间动画
- 3.0以后:属性动画
两者区别
- 前者的使用对象仅限于View,每个view都支持添加动画
- 前者只改变了View显示的位置,并不是真正的移动了(移动后点击事件还在原来的位置触发)
- 属性动画可以支持任何对象
- 静态资源芳的目录不同:前者anim,后者 animtion
动画和目标对象的绑定
补间动画
View view = new TextView(this);
view.setAnimation(animtion);
animtion.start();
属性动画
ObjectAnimator.ofFloat(**目标对象**,目标对象的属性,属性值的变化区间)
静态资源配置动画
文件位置 res/anim
<?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>
文件调用方法
通过 AnimationUtils.loadAnimationg创建将xml转成动画对象
通过view的setAnimation方法和控件绑定
ImageView image = (ImageView) findViewById(R.id.image);
Animation hyperspaceJump = AnimationUtils.loadAnimation(this, R.anim.hyperspace_jump);
image.startAnimation(hyperspaceJump);
alpha 渐变动画
属性名称 | 值类型 | 取值区间 |
---|---|---|
fromAlpha(开始透明度) | float | 0.0f-1.0f |
toAlpha(结束时透明度) | float | 0.0f-1.0f |
构造函数
public AlphaAnimation(float fromAlpha, float toAlpha) { }
scale 缩放动画
属性名称 | 值类型 | 取值区间 | 说明 |
---|---|---|---|
pivotX(缩放中心X坐标) | float | 0.0f-1.0f | 50%(中心) |
pivotY(缩放中心Y坐标) | float | 0.0f-1.0f | 50%(中心) |
fromXScale(X方向开始缩放比例) | float | 0.0f-1.0f | |
fromYScale(X方向开始缩放比例) | float | 0.0f-1.0f | |
toXScale(X方向结束时缩放比例) | float | 0.0f-1.0f | |
fromYScale(Y方向结束缩放比例) | flaot | 0.0f-1.0f |
构造函数
public ScaleAnimation(float fromX, float toX, float fromY, float toY,
int pivotXType, float pivotXValue, int pivotYType, float pivotYValue) {
}
translate 平移动画
属性名称 | 值类型 | 区间 | 说明 |
---|---|---|---|
fromXDelta(起点X坐标) | float | 任意坐标点 | 0.0% 从自己所在位置开始 |
toXDelta(结束点X坐标) | float | 任意 | 100.0%(移动自身一倍) |
fromYDelta | |||
toYDelta |
构造函数
public TranslateAnimation(float fromXDelta, float toXDelta, float fromYDelta, float toYDelta) {
}
public TranslateAnimation(int fromXType, float fromXValue, int toXType, float toXValue,
int fromYType, float fromYValue, int toYType, float toYValue) {
}
rotate旋转动画
属性名称 | 值类型 | 区间 | 说明 |
---|---|---|---|
fromDegrees(开始的角度) | float | 角度 | 0.0 |
toDegrees(结束角度) | float | 角度值 | 360.0一圈 |
pivotX(中点X坐标) | float | 0.0f-1.0f | 50% |
pivotY (中点Y坐标) | float | 0.0f-1.0f | 50% |
构造函数
public RotateAnimation(float fromDegrees, float toDegrees, int pivotXType, float pivotXValue,
int pivotYType, float pivotYValue) {
}
插值器
LinearInterpolator:匀速
AccelerateInterpolator:加速
AccelerateDecelerateInterpolator:先加速再减速
DecelerateInterpolator:减速
BounceInterpolator:阻尼下落,即反弹数次后停止
添加插值器
属性名称 | 值 |
---|---|
Interpolator 制定插值器 | 以上可选(可自定义) |
shareInterpolator 共享插值器 | boolean |
属性动画
两种属性动画 | 和目标对象的绑定方式 | ||
---|---|---|---|
ValueAnimator(值 过度) | 目标对象是数值(自定义View中会用到) | ||
ObjectAnmator | ofObject(目标对象,“属性”,…值) |