安卓动画总结

来源:互联网 发布:php objectaccess 编辑:程序博客网 时间:2024/06/08 17:43

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

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

在xml中节点                        对应代码的类rotate:旋转                       RotateAnimationtranslate:平移                    TranslateAnimation       scale:伸缩                        ScaleAnimationalpha:渐变                        AlphaAnimationset:动画集合                       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(){@Overridepublic 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"  /> 
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 小孩睡觉太晚了怎么办 孩子晚上睡觉不安稳怎么办 月子里宝宝睡觉不安稳怎么办 月子宝宝睡觉不安稳怎么办 孩子老是流黄鼻涕怎么办 孕妇流黄鼻涕怎么办速效办法 孕妇感冒流黄鼻涕怎么办 孕妇有黄痰和黄鼻涕怎么办 孕妇感冒了流黄鼻涕怎么办 怀孕感冒了怎么办鼻塞流鼻涕 怀孕初期感冒了怎么办鼻塞流鼻涕 怀孕9个月流鼻涕怎么办 怀孕5个月流鼻涕怎么办 小孩老是流黄鼻涕口臭怎么办 狗狗有食欲流黄鼻涕拉稀怎么办 小孩流黄鼻涕咳嗽怎么办 小狗感冒了一直打喷嚏怎么办 眼干眼屎多模糊怎么办 宝宝眼睛上火眼屎多怎么办 眼睛发干眼屎多怎么办 三个月宝宝眼睛流泪有眼屎怎么办 小孩眼睛流泪有眼屎怎么办 宝宝上火眼睛有好多眼屎怎么办 宝宝眼睛流泪还有眼屎怎么办? 新生儿眼睛上火眼屎多怎么办 铁耳屎在最里面怎么办 婴儿鼻屎特别深怎么办 鼻子干呼吸就疼怎么办 儿童鼻子里总有好多鼻屎怎么办 小孩鼻子里有鼻屎呼吸不通怎么办 鼻子不通通气鼻屎粘在鼻子怎么办 鼻子里面干燥长鼻屎怎么办 鼻孔里干的难受怎么办 每天有很多鼻屎怎么办 鼻子里面干的疼怎么办 婴儿鼻屎堵住了怎么办 婴儿有很多鼻屎怎么办 隆鼻7天好多鼻屎怎么办 隆鼻第五天好多鼻屎怎么办 小孩鼻屎堵住了怎么办 风寒感冒流清鼻涕怎么办