可通过代码绘制的圆角
Posted
技术标签:
【中文标题】可通过代码绘制的圆角【英文标题】:Rounded corners drawable via code 【发布时间】:2012-09-29 16:47:48 【问题描述】:我有一个有时会改变颜色的drawable,但它必须总是有圆角。这是一个 UI 库,所以我不知道它会有什么颜色。 XML 不是一个选项,我必须用纯 java 来实现。
有没有办法在不使用 XML 的情况下以编程方式实现这一目标?
【问题讨论】:
【参考方案1】:创建一个自定义 Drawable(即扩展 Drawable)并在其 onDraw 中使用 Canvas.drawRoundRect(RectF rect, float rx, float ry, Paint paint),将 Paint 设置为所需的颜色。
【讨论】:
是的,但我需要知道尺寸。我希望获得与使用 XML 相同的结果。 Drawable 通过 setBounds 获取其尺寸,如果 Drawable 设置为 View 的背景,则会自动调用。【参考方案2】:如果您自己绘制drawable,您可以使用Canvas.clipPath 设置剪辑路径。路径将由一个或多个矩形和一些圆形组成,它们会夹住圆角。您可能需要调整路径组件的排列,直到获得所需的输出。
【讨论】:
【参考方案3】:根据@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)
【讨论】:
以上是关于可通过代码绘制的圆角的主要内容,如果未能解决你的问题,请参考以下文章