2012-10-09 54 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)