属性动画

为什么是属性动画

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值