属性动画

来源:互联网 发布:天界宠物升品数据 编辑:程序博客网 时间:2024/05/17 06:12

为什么是属性动画

Android中常用的动画主要三种,分别如下

Tween Animation:(补间动画)在古老的Android版本系统中就已经提供了,只能被用来设置View的动画。
Frame Animation:(逐帧动画)其实可以划分到视图动画的类别,专门用来一个一个的显示Drawable的resources,就像放幻灯片一样。
**Property Animation:(属性动画)**Android 3.0后增加,这种动画可以设置给任何Object,包括那些还没有渲染到屏幕上的对象。这种动画是可扩展的,可以让你自定义任何类型和属性的动画。

现在主要使用的是属性动画,why?
早期补间动画则是可以对View进行一系列的动画操作,包括淡入淡出、缩放、平移、旋转四种。但是属性动画也可以完成上面功能而且更加强大.

补间动画还有一个致命的缺陷,就是它只是改变了View的显示效果而已,而不会真正去改变View的属性。比如说,现在屏幕的左上角有一个按钮,然后我们通过补间动画将它移动到了屏幕的右下角,现在你可以去尝试点击一下这个按钮,点击事件是绝对不会触发的,因为实际上这个按钮还是停留在屏幕的左上角,只不过补间动画将这个按钮绘制到了屏幕的右下角而已。(早期开发遇到这样问题经常需要在动画开始和结束地方设置2个Button,在动画吧View移动到左下角后,隐藏原有Button,显示左下角存在但是隐藏的Button间接的实现了Button的移动非常的纠结)所以在发下属性动画的强大后,过段更换.

逐帧动画,核心是一张张图片的更换,形成动画效果,意味着一个动画需要很多图片,太占体积,除非非常重要而且复杂的情况,不然少用了.

结论:属性动画是Android动画中唯一的王者必须学习好.

属性动画如何工作

属性动画机制是直接对控件的属性进行操作(所以不仅仅是移动、缩放、旋转和淡入淡出,可以修改各种属性达到多种效果),设定好修改的属性,动画的初始值和结束值,时间等参数后,就一切交给系统,

ValueAnimator

ValueAnimator是整个属性动画机制当中最核心的一个类,属性动画的运行机制是通过不断地对值进行操作来实现的,而初始值和结束值之间的动画过渡就是由ValueAnimator这个类来负责计算的

ObjectAnimator

ObjectAnimator可能才是我们最常接触到的类,因为ValueAnimator只不过是对值进行了一个平滑的动画过渡(应用场景过少).ObjectAnimator则就不同了,它是可以直接对任意对象的任意属性进行动画操作的,实现各种功能了.

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(); 

Animator监听器

AnimatorListener监听动画的开始结束,然后执行一些逻辑.

 anim1.addListener(new Animator.AnimatorListener() {            @Override            public void onAnimationStart(Animator animation) {            }            @Override            public void onAnimationRepeat(Animator animation) {            }            @Override            public void onAnimationEnd(Animator animation) {            }            @Override            public void onAnimationCancel(Animator animation) {            }        }); 

使用XML编写动画

使用代码编写动画功能,但是不适合复用,那就需要xml来编写动画,当然代价是XML编写动画要慢一些.

0 0
原创粉丝点击