使用animator实现粒子动画效果

本文介绍了如何在Android中使用animator和valueAnimator创建粒子动画,包括线性渐变着色器、animatorListener的使用,以及通过TypeEvaluator和oFObject方法实现动画效果。详细讲解了animatorSet的播放规则,并展示了如何监听valueAnimator的变化,最终实现粒子的缩放动画效果。
摘要由CSDN通过智能技术生成


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

上述方法分别用于启动动画和终止动画,start方法由哪个线程启动则运行在哪个线程,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是一个
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值