2012-10-09 55 views
2

我有一个可以改变颜色的drawable,但它必须总是有圆角。这是一个UI库,所以我不知道它会有什么颜色。 XML不是一种选择,我必须用纯Java实现这一点。通过代码绘制圆角可以通过代码

有没有办法实现这个编程方式没有使用XML?

回答

2

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

+0

是的,但我需要知道尺寸。我想要得到与使用XML时相同的结果。 – razielsarafan

+0

Drawable通过setBounds获取其大小,如果Drawable设置为View的背景,则会自动调用它。 – nmw

1

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

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)