Android提供的的动画系统有属性动画(Property Animation)、补间动画(View Animation)和帧动画(Drawable Animation)。现在比较常用的是属性动画,因为功能比较强大,正常我们直接对视图控件(View)进行属性动画的情况比较多,下面来介绍下动画效果Drawable的实现,相比View来讲Drawable更简单,使用起来也很方便。
一. 自定义Drawable
自定义动画Drawable只要继承Drawable并实现以下4个方法,同时实现Animatable接口:
[java] view plain copy
- public class CircleDrawable extends Drawable implements Animatable {
- @Override
- public void draw(Canvas canvas) {
- // 绘图
- }
- @Override
- public void setAlpha(int alpha) {
- // 设置透明度
- }
- @Override
- public void setColorFilter(ColorFilter colorFilter) {
- // 设置颜色过滤
- }
- @Override
- public int getOpacity() {
- // 设置颜色格式
- return PixelFormat.RGBA_8888;
- }
- @Override
- public void start() {
- // 启动动画
- }
- @Override
- public void stop() {
- // 停止动画
- }
- @Override
- public boolean isRunning() {
- // 判断动画是否运行
- return false;
- }
- }
[java] view plain copy
- public class CircleDrawable extends Drawable implements Animatable {
- private Paint mPaint;
- // 动画控制
- private ValueAnimator mValueAnimator;
- // 扩散半径
- private int mRadius;
- // 绘制的矩形框
- private RectF mRect = new RectF();
- // 动画启动延迟时间
- private int mStartDelay;
- // 自定义一个扩散半径属性
- Property<CircleDrawable, Integer> mRadiusProperty = new Property<CircleDrawable, Integer>(Integer.class, "radius") {
- @Override
- public void set(CircleDrawable object, Integer value) {
- object.setRadius(value);
- }
- @Override
- public Integer get(CircleDrawable object) {
- return object.getRadius();
- }
- };
- public int getRadius() {
- return mRadius;
- }
- public void setRadius(int radius) {
- mRadius = radius;
- }
- public CircleDrawable() {
- mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
- mPaint.setColor(Color.WHITE);
- mPaint.setStyle(Paint.Style.STROKE);
- mPaint.setStrokeWidth(5);
- }
- @Override
- public void draw(Canvas canvas) {
- // 绘制圆圈
- canvas.drawCircle(mRect.centerX(), mRect.centerY(), mRadius, mPaint);
- }
- @Override
- public void setAlpha(int alpha) {
- mPaint.setAlpha(alpha);
- }
- @Override
- public 资源均来自第三方,谨慎下载,前往第三方网站下载