自定义动画效果的Drawable

时间:2017-05-12 09:47 来源:互联网 作者:源码搜藏收藏

  • 源码类别:动画Animation
  • 源码大小:未知
  • 编码格式:gbk,utf8,不限
  • 运行环境:php+mysql
  • 广告推荐

Android提供的的动画系统有属性动画(Property Animation)、补间动画(View Animation)和帧动画(Drawable Animation)。现在比较常用的是属性动画,因为功能比较强大,正常我们直接对视图控件(View)进行属性动画的情况比较多,下面来介绍下动画效果Drawable的实现,相比View来讲Drawable更简单,使用起来也很方便。

一. 自定义Drawable

 

自定义动画Drawable只要继承Drawable并实现以下4个方法,同时实现Animatable接口:

 

[java] view plain copy
 
  1. public class CircleDrawable extends Drawable implements Animatable {  
  2.     @Override  
  3.     public void draw(Canvas canvas) {  
  4.         // 绘图  
  5.     }  
  6.   
  7.     @Override  
  8.     public void setAlpha(int alpha) {  
  9.         // 设置透明度  
  10.     }  
  11.   
  12.     @Override  
  13.     public void setColorFilter(ColorFilter colorFilter) {  
  14.         // 设置颜色过滤  
  15.     }  
  16.   
  17.     @Override  
  18.     public int getOpacity() {  
  19.         // 设置颜色格式  
  20.         return PixelFormat.RGBA_8888;  
  21.     }  
  22.   
  23.     @Override  
  24.     public void start() {  
  25.         // 启动动画  
  26.     }  
  27.   
  28.     @Override  
  29.     public void stop() {  
  30.         // 停止动画  
  31.     }  
  32.   
  33.     @Override  
  34.     public boolean isRunning() {  
  35.         // 判断动画是否运行  
  36.         return false;  
  37.     }  
  38. }  
在这几个方法中我们主要来处理Drawable的绘制,即draw()方法,和自定义View一样。我们要实现动画效果,也实现Animatable接口,它的3个方法都是和动画相关,方法意图也很明显。下面来自定义一个圆圈逐渐扩散消失的效果:

 

 

[java] view plain copy
 
  1. /** 
  2.  * Created by long on 2016/7/2. 
  3.  * 圆圈Drawable 
  4.  */  
  5. public class CircleDrawable extends Drawable implements Animatable {  
  6.   
  7.     private Paint mPaint;  
  8.     // 动画控制  
  9.     private ValueAnimator mValueAnimator;  
  10.     // 扩散半径  
  11.     private int mRadius;  
  12.     // 绘制的矩形框  
  13.     private RectF mRect = new RectF();  
  14.     // 动画启动延迟时间  
  15.     private int mStartDelay;  
  16.   
  17.     // 自定义一个扩散半径属性  
  18.     Property<CircleDrawable, Integer> mRadiusProperty = new Property<CircleDrawable, Integer>(Integer.class"radius") {  
  19.         @Override  
  20.         public void set(CircleDrawable object, Integer value) {  
  21.             object.setRadius(value);  
  22.         }  
  23.   
  24.         @Override  
  25.         public Integer get(CircleDrawable object) {  
  26.             return object.getRadius();  
  27.         }  
  28.     };  
  29.     public int getRadius() {  
  30.         return mRadius;  
  31.     }  
  32.     public void setRadius(int radius) {  
  33.         mRadius = radius;  
  34.     }  
  35.   
  36.   
  37.     public CircleDrawable() {  
  38.         mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);  
  39.         mPaint.setColor(Color.WHITE);  
  40.         mPaint.setStyle(Paint.Style.STROKE);  
  41.         mPaint.setStrokeWidth(5);  
  42.     }  
  43.   
  44.   
  45.     @Override  
  46.     public void draw(Canvas canvas) {  
  47.         // 绘制圆圈  
  48.         canvas.drawCircle(mRect.centerX(), mRect.centerY(), mRadius, mPaint);  
  49.     }  
  50.   
  51.     @Override  
  52.     public void setAlpha(int alpha) {  
  53.         mPaint.setAlpha(alpha);  
  54.     }  
  55.   
  56.     @Override  
  57.     public  本站资源仅限于学习研究,严禁从事商业或者非法活动! 源码搜藏网所有源码来自互联网转载与用户上传分享,如果侵犯了您的权益请与我们联系,我们将在24小时内删除!谢谢!