{
    分享网正式开通,我们为大家提供免费资源,欢迎大家踊跃投稿!

自定义动画效果的Drawable

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. public class CircleDrawable extends Drawable implements Animatable {  
  3.   
  4.     private Paint mPaint;  
  5.     // 动画控制  
  6.     private ValueAnimator mValueAnimator;  
  7.     // 扩散半径  
  8.     private int mRadius;  
  9.     // 绘制的矩形框  
  10.     private RectF mRect = new RectF();  
  11.     // 动画启动延迟时间  
  12.     private int mStartDelay;  
  13.   
  14.     // 自定义一个扩散半径属性  
  15.     Property<CircleDrawable, Integer> mRadiusProperty = new Property<CircleDrawable, Integer>(Integer.class"radius") {  
  16.         @Override  
  17.         public void set(CircleDrawable object, Integer value) {  
  18.             object.setRadius(value);  
  19.         }  
  20.   
  21.         @Override  
  22.         public Integer get(CircleDrawable object) {  
  23.             return object.getRadius();  
  24.         }  
  25.     };  
  26.     public int getRadius() {  
  27.         return mRadius;  
  28.     }  
  29.     public void setRadius(int radius) {  
  30.         mRadius = radius;  
  31.     }  
  32.   
  33.   
  34.     public CircleDrawable() {  
  35.         mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);  
  36.         mPaint.setColor(Color.WHITE);  
  37.         mPaint.setStyle(Paint.Style.STROKE);  
  38.         mPaint.setStrokeWidth(5);  
  39.     }  
  40.   
  41.   
  42.     @Override  
  43.     public void draw(Canvas canvas) {  
  44.         // 绘制圆圈  
  45.         canvas.drawCircle(mRect.centerX(), mRect.centerY(), mRadius, mPaint);  
  46.     }  
  47.   
  48.     @Override  
  49.     public void setAlpha(int alpha) {  
  50.         mPaint.setAlpha(alpha);  
  51.     }  
  52.   
  53.     @Override  
  54.     public 资源均来自第三方,谨慎下载,前往第三方网站下载


    米微资源分享网 , 版权所有丨本站资源仅限于学习研究,严禁从事商业或者非法活动!丨本网站采用BY-NC-SA协议进行授权
    转载请注明原文链接:自定义动画效果的Drawable
    喜欢 ()分享 (0)