此次复习的思路还是
whay?
动画的作用对象:视图控件(View)
why?
动画的种类:视图动画 & 属性动画,其中,视图动画又分为帧动画(Frame Animation)和补间动画(Tweened Animation)。

视图动画,提供了 AlphaAnimation、RotateAnimation、TranslateAnimation、ScaleAnimation这4种动画方式,并提供了AnimationSet动画集合来混合使用多种动画。

相比属性动画,View动画一个非常大的缺陷突显,其不具有交互性。当某个元素发生View动画后, 其响应事件的位置依然在动画进行前的地方,所以View动画只能做普通的动画效果,要避免涉及交互操 作。但是它的优点也非常明显:效率比较高,使用也方便。

android 3.0之后,谷歌推出的新动画框架。在 Animator框架中使用最多的就是AnimatorSet和ObjectAnimator配合:使用 ObjectAnimator 进行更精细化的控 制,控制一个对象和一个属性值,而使用多个ObjectAnimator组合到AnimatorSet形成一个动画。属性动画通过调用属性get、set方法来真实地控制一个View的属性值,因此,强大的属性动画框架基本可以实现所有的 动画效果。

一.补间动画

1.XML中

TranslateAnimation、ScaleAnimation、RotateAnimation、AlphaAnimation

<?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>


Animation xx= AnimationUtils.loadAnimation(this, R.anim.sss);
imageView.startAnimation(xxx);

标签标示动画集合

android:duration-----动画的持续时间

android:fillAfter----true结束后停在结束位置

2.代码中

AlphaAnimation alphaAnimation = new AlphaAnimation(0, 1);
alphaAnimation.setDuration(10000);
view.startAnimation(alphaAnimation);

二.帧动画

顺序播放一组图片AnimationDrawable类

<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="true">
	<item android:drawable="@drawable/XX1" android:duration="200" />
	<item android:drawable="@drawable/XX2" android:duration="200" />
	<item android:drawable="@drawable/XX3" android:duration="200" />
</animation-list>


imageView.setBackgroundResource(R.drawable.drawable_anim);
AnimationDrawable anim = (AnimationDrawable) imageView.getBackground();
anim.start();
anim.stop();

三.属性动画

API 11新引入的特性

ObjectAnimator、ValueAnimator、AnimatorSet

Android3D动画集成_动画

3.1 ObjectAnimator

ObjectAnimator 是属性动画最重要的类,创建一个 ObjectAnimator 只需通过其静态工厂类直接返还一个 ObjectAnimator对象。参数包括一个对象和对象的属性名字,但这个属性必须有get和set方法,其内部会通 过Java反射机制来调用set方法修改对象的属性值。

ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(view, "translationX", 200);
objectAnimator.setDuration(200);
objectAnimator.start();
3.2 ValueAnimator

ValueAnimator不提供任何动画效果,它更像一个数值发生器,用来产生有一定规律的数字,从而让调 用者控制动画的实现过程。通常情况下,在ValueAnimator的AnimatorUpdateListener中监听数值的变化,从而完成动画的变换。

ValueAnimator anim = ValueAnimator.ofFloat(0f, 1f);
anim.setDuration(300);
anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
    @Override
    public void onAnimationUpdate(ValueAnimator animation) {
        final float f = (float) animation.getAnimatedValue();
    }
});
anim.start();
3.3 理解插值器和估值器

插值器Interpolator 和 估值器TypeEvaluator
XXXInterpolator:根据XXX流失的百分比来计算出当前属性值改变的百分比,系统预值的有:LinearInterpolator(线性匀速)

原理:要求动画作用的对象提供该属性的set方法,属性动画根据传入的该属性的初始值和最终值,以动画的效果多次去调用set方法。每次传递给set方法的值都不一样,最终接近最终值。

特别注意:
属性动画从Android3.0才有,这就严重制约了属性动画的使用,这就是开源动画库nineoldandroids的作用,采用nineoldandroids,可以在3.0以前的系统上使用属性动画,nineoldandroids的网址是:http://nineoldandroids.com

github地址:https://github.com/daimajia/AndroidViewAnimations

使用动画注意事项:

1.OOM问题:图片多,数量大时,避免使用帧动画

2.内测泄露:无限循环,及时停止

3.View动画问题:有时候会导致setVisiblity(View.GONE)失效,需要调用view.clerAnimation()清除View动画即可