Android 动画
分类
- 帧动画
- view动画也叫补间动画
- 属性动画
1. 帧动画(AnimationDrawable)
使用:
在xml中定义一组图片,通过getBackgroud()相关方法获取并转化为AnimationDrawable对象,执行帧动画。
<?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/image01" android:duration="500"/>
<item android:drawable="@drawable/image02" android:duration="500"/>
<item android:drawable="@drawable/image03" android:duration="500"/>
</animation-list>
// Load the ImageView that will host the animation and
// set its background to our AnimationDrawable XML resource.
ImageView img = (ImageView)findViewById(R.id.spinning_wheel_image);
img.setBackgroundResource(R.drawable.spin_animation);
// Get the background, which has been compiled to an AnimationDrawable object.
AnimationDrawable frameAnimation = (AnimationDrawable) img.getBackground();
// Start the animation (looped playback by default).
frameAnimation.start();
2. view动画(补间动画)Animation
View动画的四种基本效果对应了四个Animation的子类:
- TranslateAnimtion
- Alpha
- Rotation
- Scale
使用:
xml 中缩放动画
<?xml version="1.0" encoding="utf-8"?>
<scale xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="1000"
android:fromXScale="0.0"
android:fromYScale="0.0"
android:pivotX="50%"
android:pivotY="50%"
android:toXScale="1.0"
android:toYScale="1.0"/>
代码中使用:
Animation translateAnimation = new TranslateAnimation(0,500,0,500);
// 创建平移动画的对象:平移动画对应的Animation子类为TranslateAnimation
// 参数分别是:
// 1. fromXDelta :视图在水平方向x 移动的起始值
// 2. toXDelta :视图在水平方向x 移动的结束值
// 3. fromYDelta :视图在竖直方向y 移动的起始值
// 4. toYDelta:视图在竖直方向y 移动的结束值
translateAnimation.setDuration(3000);
// 播放动画直接 startAnimation(translateAnimation)
//如:
mButton.startAnimation(translateAnimation);
View动画的组合动画–AnimationSet
巴拉巴拉
View动画的使用场景
- LayoutAnimation
- Activity的切换效果
- Fragment的切换效果
3. 属性动画(Animator)
属性动画可以看作是view动画的增强版,他可以针对任何属性做变化
属性动画 API
- Animator: 提供创建属性动画的基类,基本不会直接使用这个类。
- ValueAnimator:属性动画用到的主要的时间引擎,负责计算各个帧的属性值,基本上其他属性动画都会直接或间接继承它;
- ObjectAnimator:ValueAnimator的子类,对指定对象的属性执行动画。
- AnimatorSet:Animator 的子类,用于组合多个 Animator。
具体可参考链接:属性动画
区别
- view动画看起来是view移动了位置,但是实际上view还是在原始位置,点击事件等依然是原始位置响应
- 属性动画 真实的移动了view的位置,点击事件也会随着view位置变化
- 作用对象不同,补间动画只能作用在view上,属性动画可以作用在所有对象上。 属性变化不同,补间动画只是改变显示效果,不会改变view的属性,比如位置、宽高等,而属性动画实际改变对象的属性。