安卓动画总结

安卓动画分类:补间动画,帧动画,属性动画
(注意:下面提到在xml中创建动画,均是在res下新建文件夹anim,之后在anim下创建xml文件,下面的代码都是模板)

补间动画:可以在xml或者代码中定义,有四种动画

在xml中节点                        对应代码的类
rotate:旋转                       RotateAnimation
translate:平移                    TranslateAnimation       
scale:伸缩                        ScaleAnimation
alpha:渐变                        AlphaAnimation
set:动画集合                       AnimationSet
下面是在xml中的集合模板(float是对应float数值,在代码中使用AnimationUtils的loadAnimation方法调用):
<?xml version="1.0" encoding="utf-8"?>  
<set          xmlns:androidsetxmlns: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>

帧动画:直接在xml中定义以animation-list为节点,item为一个动画时间点

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

属性动画:一般的有ObjectAnimator和ValueAnimator,集合的使用AnimatorSet, PropertyValuesHolder多属性动画管理器(同一个动画执行多个属性动画可以使用),可以在xml中定义(使用AnimatorInflater的loadAnimator方法在代码中调用),也可以在代码直接创建

Evaluators相关类解释: Evaluators就是属性动画系统如何去计算一个属性值。它们通过Animator提供的动画的起始和结束值去计算一个动画的属性值
IntEvaluator:整数属性值。
FloatEvaluator:浮点数属性值。
ArgbEvaluator:十六进制color属性值。
TypeEvaluator:用户自定义属性值接口,譬如对象属性值类型不是int、float、color类型,你必须实现这个接口去定义自己的数据类型。

Interpolators相关类解释(可在xml中重新定义变换的速率):
AccelerateDecelerateInterolator:先加速后减速。
AccelerateInterpolator:加速。
DecelerateInterpolator:减速。
AnticipateInterpolator:先向相反方向改变一段再加速播放。
AnticipateOvershootInterpolator:先向相反方向改变,再加速播放,会超出目标值然后缓慢移动至目标值,类似于弹簧回弹。
BounceInterpolator:快到目标值时值会跳跃。
CycleIinterpolator:动画循环一定次数,值的改变为一正弦函数:Math.sin(2 * mCycles * Math.PI * input)。
LinearInterpolator:线性均匀改变。
OvershottInterpolator:最后超出目标值然后缓慢改变到目标值。
TimeInterpolator:一个允许自定义Interpolator的接口,以上都实现了该接口。

代码实例:
1.objectAnimator的使用:
ObjectAnimator.ofFloat(view, "rotationY", 0.0f,   360.0f).setDuration(1000).start();

2.PropertyValuesHolder 的使用:
PropertyValuesHolder a1 = PropertyValuesHolder.ofFloat("alpha", 0f, 1f);  
PropertyValuesHolder a2 = PropertyValuesHolder.ofFloat("translationY", 0, viewWidth);  
......
ObjectAnimator.ofPropertyValuesHolder(view, a1, a2, ......).setDuration(1000).start();

3.AnimatorSet的使用:
ObjectAnimator a1 = ObjectAnimator.ofFloat(view, "alpha", 1.0f, 0f);  
ObjectAnimator a2 = ObjectAnimator.ofFloat(view, "translationY", 0f, viewWidth);  
......
AnimatorSet animSet = new AnimatorSet();  
animSet.setDuration(5000);  
animSet.setInterpolator(new LinearInterpolator());   
//animSet.playTogether(a1, a2, ...); //两个动画同时执行  
animSet.play(a1).after(a2); //先后执行
......//其他组合方式
animSet.start();

animSet执行的接方法:
after(Animator anim)   将现有动画插入到传入的动画之后执行
after(long delay)   将现有动画延迟指定毫秒后执行
before(Animator anim)   将现有动画插入到传入的动画之前执行
with(Animator anim)   将现有动画和传入的动画同时执行

4.Evaluators的使用:
ValueAnimator valueAnimator = new ValueAnimator();
valueAnimator.setDuration(5000);
valueAnimator.setObjectValues(new float[2]); //设置属性值类型
valueAnimator.setInterpolator(new LinearInterpolator());
valueAnimator.setEvaluator(new TypeEvaluator<float[]>()
    {
    @Override
    public float[] evaluate(float fraction, float[] startValue,
                        float[] endValue)
   {
        //实现自定义规则计算的float[]类型的属性值
        float[] temp = new float[2];
        temp[0] = fraction * 2;
        temp[1] = (float)Math.random() * 10 * fraction;
        return temp;
    }
});

valueAnimator.start();
            valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener()
{
@Override
public void onAnimationUpdate(ValueAnimator animation)
{
    float[] xyPos = (float[]) animation.getAnimatedValue();
    view.setHeight(xyPos[0]);   //通过属性值设置View属性动画
    view.setWidth(xyPos[1]);    //通过属性值设置View属性动画
}
});

5.插值器Interpolators的使用:
<?xml version="1.0" encoding="utf-8"?>  
<InterpolatorName xmlns:android="http://schemas.android.com/apk/res/android"  
android:attribute_name="value"  
/> 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值