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
-
Android开发类似于淘宝,天猫,京东,支持多维属性,购物车动画
Android开发类似于淘宝,天猫,京东,支持多维属性,购物车动画,支持MVVM架构,可以直接使用 功能描述 支持多维属性,库存为空判断; 支持设置选中指定的sku; 支持手动输入数量;
-
android仿饿了么加入购物车旋转控件动画按钮
一个仿饿了么 带伸缩位移旋转动画的购物车按钮 注意,本控件非继承自ViewGroup,而是纯自定义View,实现的仿饿了么加入购物车控件,自带闪转腾挪动画的按钮。 图1 项目中使用的效果,考虑到了View的回收复用, 并且可以看到在RecyclerView中使用,切换LayoutM
-
Android开发实现一个沙漠风情动画效果
Android开发实现一个沙漠风情动画效果 将其添加到存储库末尾的根build.gradle中: allprojects { repositories { ... maven { url https://jitpack.io } }} 添加依赖项 dependencies { compile com.github.jetradarmobile.desertplaceholder:desertplacehold
-
Android模仿支付宝芝麻信用动画源码
Android模仿支付宝芝麻信用动画源码,如果你觉得不错,给我一个星,请支持,谢谢。 截图Gif 截图Png Usage Gradle Add it in your root build . gradle at the end of repositories : allprojects {repositories { ... maven { url https://jitpack.io }}} A
-
Android实现SafeView动画效果
SafeView 这是我模仿的一个效果,要不断的进步,就要不断的学习。主要实现的效果是一个转动的效果和一个3D触摸效果。请看效果图(录制的图片有点大): 知识点 1. Canvas 2. Paint 3. Shader 4. Camera(不是相机) 5. Animator 分析 整个View看上去是有四个圆