- 源码类别:动画Animation
- 源码大小:未知
- 编码格式:gbk,utf8,不限
- 运行环境:php+mysql
Android提供的的动画系统有属性动画(Property Animation)、补间动画(View Animation)和帧动画(Drawable Animation)。现在比较常用的是属性动画,因为功能比较强大,正常我们直接对视图控件(View)进行属性动画的情况比较多,下面来介绍下动画效果Drawable的实现,相比View来讲Drawable更简单,使用起来也很方便。
一. 自定义Drawable
自定义动画Drawable只要继承Drawable并实现以下4个方法,同时实现Animatable接口:
-
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;
-
}
-
}
在这几个方法中我们主要来处理Drawable的绘制,即draw()方法,和自定义View一样。我们要实现动画效果,也实现Animatable接口,它的3个方法都是和动画相关,方法意图也很明显。下面来自定义一个圆圈逐渐扩散消失的效果:
-
-
-
-
-
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
本站资源仅限于学习研究,严禁从事商业或者非法活动!
源码搜藏网所有源码来自互联网转载与用户上传分享,如果侵犯了您的权益请与我们联系,我们将在24小时内删除!谢谢!