我有一个可以改变颜色的drawable,但它必须总是有圆角。这是一个UI库,所以我不知道它会有什么颜色。 XML不是一个选项,我必须用纯java实现这一点。
有没有办法以编程方式实现这一点而不使用XML?
答案 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;
}
}
编辑:在边缘添加了抗锯齿。