1、前言
本文围绕着实现粒子放大效果,着重讲解android中涉及到动画缩放以及动画集的使用,并且会将讲解一些插值器相关的知识。阅读本文需要读者有一定的自定义View的基础知识,本文将不再讲解自定义View的相关知识,读者需要可以自行去学习,也可以阅读笔者的文章,
自定义View的基本知识。
2、着色器
为了让效果的色彩比较的绚丽,需要让粒子(这里其实就是用小圆点代替)有一个色彩的过渡,所以需要用到着色器。比较常用到的主要有线性渐变的着色器,它可以让粒子整体上看上去具有一个按照线性排列的色彩过渡。了解线性渐变的着色器之前,先了解shader。在paint里面有一个setshader方法,用于设置着色器,着色器的作用就是用于给颜色实现一个跨度的平衡感,如果paint里面包含了shader对象,那么用此paint绘画的线,圆圈,图像之类的图案,都会从shader里面获取颜色,因此,它是实现绚丽色彩的基础。
2.1LinearGradient
笔者更倾向与叫它线性画笔,它是shader的子类,他实现的颜色平衡感是通过线性渐变来实现的。使用它,很简单,只需要知道它的构造函数就行。
public LinearGradient(float x0, float y0, float x1, float y1, int color0, int color1,
TileMode tile)
其中x0表示起始点x坐标,x1表示终止点x坐标,color0是起始颜色,color1是终止颜色,tile是平铺模式,它主要有三个值分别是TileMode.CLAMP,TileMode.REPEAT,TileMode.MIRROR。分表表示复制模式,重复模式,镜像模式。假如有如下代码:
LinearGradient linearGradient=new LinearGradient(0,0,canvas.getWidth(),canvas.getHeight(), Color.RED,Color.BLUE, Shader.TileMode.REPEAT);
Paint paint=new Paint();
paint.setShader(linearGradient);
canvas.drawCircle(canvas.getWidth()/2,canvas.getHeight()/2,canvas.getWidth()/2,paint);
那么它的效果如下:
可以看到线性渐变画笔可以让颜色有一个过渡,这种感觉是很美妙的。如果我们再加一些动画,一些透明度变化,就可以做出很绚丽的色彩效果了。
3.animator
animator是android3.0之后提供的特性,在这之前使用的是animation,区别在于,前者是可以真正改变属性值的,后者只是改变了视图的位置,但是视图的属性并没有得到任何改变,类型障眼法。animator是一个抽象类,是valueAnimator,objectAnimator等的父类,它主要鉴定了一些属性动画的基本操作,比如启动,暂停设置动画监听器等等。
启动动画:
public void start()
public void end()
暂停,继续动画:
public void pause()
public void resume()
pause用于暂停动画,如果动画尚未start,或者已经end,则此调用会被忽略。注意此方法必须和start同一线程被调用。如果要继续动画,则调用resume方法。
设置动画时长:
public abstract Animator setDuration(long duration)
用于给动画从开始到结束设置一个时间长度,单位是毫秒。
设置时间插值器:
public abstract void setInterpolator(TimeInterpolator value);
此方法可以设置时间插值器,它的作用是,可以让动画不处于线性变化的效果,默认的话是先加速后减速的插值器。即动画效果从起始值到终止值得过渡,会经历一个加速减速的过程。
设置监听器:
public void addListener(AnimatorListener listener)
如果希望监听动画是否完成结束或者重复的动作,就可以设置一个动画监听器。animatorListener的原型如下:
3.1 animatorListener
public static interface AnimatorListener {
void onAnimationStart(Animator animation);
void onAnimationEnd(Animator animation);
void onAnimationCancel(Animator animation);
void onAnimationRepeat(Animator animation);
}
当调用start时候,onAnimationStart就会被回调,当end被调用的时候,onAnimationEnd被回调。当调用cancel停止动画的时候,onAnimatonCancel被回调。
以上是animator的基本要点。有了这些基本知识,现在就可以学习ValueAnimator了。
4.valueAnimator
valueAnimator是一个