我有一個可以改變顏色的drawable,但它必須總是有圓角。這是一個UI庫,所以我不知道它會有什麼顏色。 XML不是一種選擇,我必須用純Java實現這一點。通過代碼繪製圓角可以通過代碼
有沒有辦法實現這個編程方式沒有使用XML?
我有一個可以改變顏色的drawable,但它必須總是有圓角。這是一個UI庫,所以我不知道它會有什麼顏色。 XML不是一種選擇,我必須用純Java實現這一點。通過代碼繪製圓角可以通過代碼
有沒有辦法實現這個編程方式沒有使用XML?
創建一個自定義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;
}
}
編輯:加入抗鋸齒邊緣。
是的,但我需要知道尺寸。我想要得到與使用XML時相同的結果。 – razielsarafan
Drawable通過setBounds獲取其大小,如果Drawable設置爲View的背景,則會自動調用它。 – nmw