2

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

有没有办法在不使用 XML 的情况下以编程方式实现这一点?

4

3 回答 3

2

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

于 2012-10-09T11:27:34.627 回答
1

如果您自己绘制drawable,您可以使用Canvas.clipPath 设置剪辑路径。路径将由一个或多个矩形和一些圆形组成,它们会夹住圆角。您可能不得不调整路径组件的排列,直到获得所需的输出。

于 2012-10-09T11:19:07.483 回答
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;
    }
}

编辑:向边缘添加抗锯齿。

(来源)

于 2014-08-29T17:19:57.133 回答