【发布时间】:2012-09-29 16:47:48
【问题描述】:
我有一个有时会改变颜色的drawable,但它必须总是有圆角。这是一个 UI 库,所以我不知道它会有什么颜色。 XML 不是一个选项,我必须用纯 java 来实现。
有没有办法在不使用 XML 的情况下以编程方式实现这一目标?
【问题讨论】:
标签: android drawable background-drawable
我有一个有时会改变颜色的drawable,但它必须总是有圆角。这是一个 UI 库,所以我不知道它会有什么颜色。 XML 不是一个选项,我必须用纯 java 来实现。
有没有办法在不使用 XML 的情况下以编程方式实现这一目标?
【问题讨论】:
标签: android drawable background-drawable
创建一个自定义 Drawable(即扩展 Drawable)并在其 onDraw 中使用 Canvas.drawRoundRect(RectF rect, float rx, float ry, Paint paint),将 Paint 设置为所需的颜色。
【讨论】:
如果您自己绘制drawable,您可以使用Canvas.clipPath 设置剪辑路径。路径将由一个或多个矩形和一些圆形组成,它们会夹住圆角。您可能需要调整路径组件的排列,直到获得所需的输出。
【讨论】:
根据@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;
}
}
编辑:向边缘添加抗锯齿。
【讨论】: