Android中的自定义Drawable - 添加圆角---随机颜色

一 背景

通常我们自定义背景,一是直接用color,二是自定义xml,然而他们都有缺陷。前者纯颜色有时无法满足我们的需求,后者者是颜色只能固定写死,很不方便。今天教你一招轻松自定义drawable,满足日常开发需求,动态改变颜色,圆角等,话不多说上代码。

效果图

代码

package com.example.myndk;

import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.ColorFilter;
import android.graphics.Paint;
import android.graphics.PixelFormat;
import android.graphics.RectF;
import android.graphics.drawable.Drawable;
import android.view.View;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

public class MyDrawable extends Drawable {

    /**
     * 默认值
     */
    private static int round = 20;
    private static int color = Color.BLUE;

    private RectF rectF = new RectF();
    private Paint paint = new Paint();

    public static MyDrawable getDrawable(View view, int c, int round) {
        c = view.getContext().getResources().getColor(c);
        return new MyDrawable(view, c, round);
    }


    public static MyDrawable getRandomDrawable(View view) {
        int c = getRandomColor();
        return new MyDrawable(view, c, round);
    }

    public MyDrawable(View view, int c, int r) {
        view.post(new Runnable() {
            @Override
            public void run() {
                round = r;
                color = c;
                rectF.left = 0;
                rectF.top = 0;
                rectF.right = view.getMeasuredWidth();
                rectF.bottom = view.getMeasuredHeight();
                invalidateSelf();
            }
        });

    }

    @Override
    public void draw(@NonNull Canvas canvas) {
        paint.setAntiAlias(true);
        paint.setColor(color);
        canvas.drawRoundRect(rectF, round, round, paint);
    }

    @Override
    public void setAlpha(int i) {

    }

    @Override
    public void setColorFilter(@Nullable ColorFilter colorFilter) {

    }

    @Override
    public int getOpacity() {
        return PixelFormat.TRANSLUCENT;
    }


    private static int getRandomColor() {
        StringBuffer buffer = new StringBuffer();
        for (int i = 0; i < 6; i++) {
            buffer.append(arr[(int) (Math.random() * arr.length)]);
        }
        return Color.parseColor("#" + buffer.toString());
    }

    private static String[] arr = new String[]{
            "0",
            "1",
            "2",
            "3",
            "4",
            "5",
            "6",
            "7",
            "8",
            "9",
            "a",
            "b",
            "c",
            "d",
            "e",
            "f"
    };
}

引用

注意

view一定要设置大小哈!不然无法显示!

view一定要设置大小哈!不然无法显示!

view一定要设置大小哈!不然无法显示!

猜你喜欢

转载自blog.csdn.net/houdada_/article/details/111556234