android 扩散水波纹效果

先看看效果,圆形波纹无线扩散,大概就是这个样子
android 扩散水波纹效果_第1张图片
github地址:https://github.com/Larissa-x/WaveView

直接依赖
implementation 'com.github.Larissa-x:WaveView:1.0.1'
别忘了添加支持jitpack库
repositories {
    maven { url 'https://jitpack.io' }
}

上代码,使用自定义View

public class WaveView extends View {
    private Paint paint;
    private int maxWidth = 360;
    // 是否运行
    private boolean isStarting = false;
    private List alphaList = new ArrayList();
    private List startWidthList = new ArrayList();

    public WaveView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init();
    }

    public WaveView(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    public WaveView(Context context) {
        super(context);
        init();
    }

    private void init() {
        paint = new Paint();
//        设置波纹的颜色
//        paint.setColor(0x0059ccf5);
//可以修改自己喜欢的颜色
        paint.setColor(Color.argb(153,19,154,255));
        alphaList.add("153");// 圆心的不透明度
        startWidthList.add("0");
    }

    @Override
    public void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        setBackgroundColor(Color.TRANSPARENT);// 颜色:完全透明
// 依次绘制 同心圆
        for (int i = 0; i < alphaList.size(); i++) {
            int alpha = Integer.parseInt(alphaList.get(i));
// 圆半径
            int startWidth = Integer.parseInt(startWidthList.get(i));
            paint.setAlpha(alpha);
// 这个半径决定你想要多大的扩散面积
            canvas.drawCircle(getWidth() / 2, getHeight() / 2, startWidth + 50,
                    paint);
// 同心圆扩散
            if (isStarting && alpha > 0 && startWidth < maxWidth) {
                alphaList.set(i, (alpha - 1) + "");
                startWidthList.set(i, (startWidth + 2) + "");
            }
        }
        if (isStarting
                && Integer
                .parseInt(startWidthList.get(startWidthList.size() - 1)) == maxWidth / 3) {
            alphaList.add("153");
            startWidthList.add("0");
        }
// 同心圆数量达到10个,删除最外层圆
        if (isStarting && startWidthList.size() == 10) {
            startWidthList.remove(0);
            alphaList.remove(0);
        }
// 刷新界面
        invalidate();
    }

    // 执行动画
    public void start() {
        isStarting = true;
    }

    // 停止动画
    public void stop() {
        isStarting = false;
    }

    // 判断是都在不在执行
    public boolean isStarting() {
        return isStarting;
    }

看效果还是可以的,如果需求需要控制大小等,自己重写onMeasure函数进行精准测量即可。

你可能感兴趣的:(android,自定义View)