圆角可通过代码绘制

时间:2012-10-09 10:58:58

标签: android drawable background-drawable

我有一个可以改变颜色的drawable,但它必须总是有圆角。这是一个UI库,所以我不知道它会有什么颜色。 XML不是一个选项,我必须用纯java实现这一点。

有没有办法以编程方式实现这一点而不使用XML?

3 个答案:

答案 0 :(得分:2)

创建一个自定义Drawable(即伸展Drawable)并在其onDraw中使用Canvas.drawRoundRect(RectF rect,float rx,float ry,Paint paint),将Paint设置为所需的颜色。

答案 1 :(得分:1)

如果您自己绘制drawable,可以使用Canvas.clipPath设置剪辑路径。路径将包含一个或多个矩形和一些圆形,这些圆形会修剪圆角。您可能必须使用路径组件的排列,直到获得所需的输出。

答案 2 :(得分:1)

根据@nmw的回答,这里有一些适用于此的代码:

public class RRDrawable extends Drawable {
    private Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);

    public RRDrawable(int color) {
        paint.setColor(color);
        paint.setStyle(Paint.Style.FILL);
    }

    @Override
    public void draw(Canvas canvas) {
        int radius = 10; // note this is actual pixels
        canvas.drawRoundRect(new RectF(0,0,canvas.getWidth(), canvas.getHeight()), radius, radius,  paint);
    }

    @Override
    public void setAlpha(int i) {
        //.. not supported
    }

    @Override
    public void setColorFilter(ColorFilter colorFilter) {
        //.. not supported
    }

    @Override
    public int getOpacity() {
        return 1;
    }
}

编辑:在边缘添加了抗锯齿。

(source)