2012-11-24 433 views
29

Android中是否有任何方式繪製帶有黑色邊框的填充矩形?我的問題是,canvas.draw()需要一個繪畫對象,據我所知,繪畫對象不能有填充和筆觸的不同顏色。有沒有解決的辦法?在Android中繪製帶邊框的填充矩形Android

+0

你說得對。只需先畫好填充的矩形,然後在外面畫一個筆畫。 – Gene

回答

2

使用邊框的顏色和矩形的大小以及邊框繪製矩形,可以更改繪畫的顏色並再次繪製正常大小的矩形。

+10

請注意,這會導致幾乎兩次繪製相同的區域 –

100

嘗試油漆。 setStyle(Paint.Style。FILL)和油漆。 setStyle(Paint.Style。STROKE)。

Paint paint = new Paint(); 
Rect r = new Rect(10, 10, 200, 100); 

@Override 
public void onDraw(Canvas canvas) { 
    // fill 
    paint.setStyle(Paint.Style.FILL); 
    paint.setColor(Color.MAGENTA); 
    canvas.drawRect(r, paint); 

    // border 
    paint.setStyle(Paint.Style.STROKE); 
    paint.setColor(Color.BLACK); 
    canvas.drawRect(r, paint); 
} 
+0

是否還有一種方法可以爲canvas.drawRoundRect()執行此操作?因爲在我的情況下,邊框現在已經圓角,即使我用canvas.drawRoundRect()也繪製了它。 – Chris

+3

我知道答案是舊的,但我想分享這個小線路paint.setPathEffect(新的CornerPathEffect(radius));回答Chris的問題。 我只是回答,因爲可能有人需要幫助。 – Crash

6

如果您正在繪製多個視圖,那麼您也可以使用兩種顏料,一種用於筆畫,另一種用於填充。這樣你不必重置它們。

enter image description here

Paint fillPaint = new Paint(); 
Paint strokePaint = new Paint(); 

RectF r = new RectF(30, 30, 1000, 500); 

void initPaints() { 

    // fill 
    fillPaint.setStyle(Paint.Style.FILL); 
    fillPaint.setColor(Color.YELLOW); 

    // stroke 
    strokePaint.setStyle(Paint.Style.STROKE); 
    strokePaint.setColor(Color.BLACK); 
    strokePaint.setStrokeWidth(10); 
} 

@Override 
protected void onDraw(Canvas canvas) { 

    // First rectangle 
    canvas.drawRect(r, fillPaint); // fill 
    canvas.drawRect(r, strokePaint); // stroke 

    canvas.translate(0, 600); 

    // Second rectangle 
    int cornerRadius = 50; 
    canvas.drawRoundRect(r, cornerRadius, cornerRadius, fillPaint); // fill 
    canvas.drawRoundRect(r, cornerRadius, cornerRadius, strokePaint); // stroke 
}