属性动画
属性动画能弥补逐帧动画和补间动画的缺点:
补间动画 只能够作用在视图View上,即只可以对一个Button、TextView、甚至是LinearLayout、或者其它继承自View的组件进行动画操作,但无法对非View的对象进行动画操作
补间动画只是改变了View的视觉效果,而不会真正去改变View的属性。
补间动画只能实现平移、旋转、缩放 & 透明度这些简单的动画需求
特点
属性动画对作用对象进行了扩展,不再局限于View对象。
使用方法
属性动画有两个非常重要的类:ValueAnimator 类 & ObjectAnimator 类
ValueAnimator类
定义:属性动画机制中 最核心的一个类
原理:通过不断控制值的变化,再不断手动赋给对象的属性,从而实现动画效果。
ValueAnimator类中有3个重要方法:
ValueAnimator.ofInt(int values)
ValueAnimator.ofFloat(float values)
ValueAnimator.ofObject(int values)
ValueAnimator.ofInt(int values)
作用:将初始值 以整型数值的形式 过渡到结束值
操作值的方式分为XML设置和代码设置
值得注意的是,在实际开发中,建议使用代码实现属性动画:因为很多时候属性的起始值是无法提前确定的(无法使用XML设置),因此在这只介绍代码设置方式。
ValueAnimator.ofFloat(float values)和ValueAnimator.ofObject(int values)与上面的用法一样,触类旁通。
ObjectAnimator
直接对对象的属性值进行改变操作,从而实现动画效果
原理:通过不断控制值的变化,再不断自动赋给对象的属性,从而实现动画效果。
下面将进行实例操作:
透明度
旋转
平移
缩放
上面的例子中,使用了属性动画最基本的四种动画效果,其实ObjectAnimator.ofFloat()还可传人各种属性:
实现组合动画功能主要需要借助AnimatorSet这个类,这个类提供了一个play()方法,如果向这个方法中传入一个Animator对象(ValueAnimator或ObjectAnimator)将会返回一个AnimatorSet.Builder的实例,AnimatorSet.Builder中包括以下四个方法:
after(Animator anim) 将现有动画插入到传入的动画之后执行
after(long delay) 将现有动画延迟指定毫秒后执行
before(Animator anim) 将现有动画插入到传入的动画之前执行
with(Animator anim) 将现有动画和传入的动画同时执行
Animator监听器
在很多时候,我们希望可以监听到动画的各种事件,比如动画何时开始,何时结束,然后在开始或者结束的时候去执行一些逻辑处理。这个功能是完全可以实现的,Animator类当中提供了一个addListener()方法,这个方法接收一个AnimatorListener。
但很多时候,我们并不需要监听动画的所有时刻,因此出现了AnimatorListenerAdapter。
领取专属 10元无门槛券
私享最新 技术干货