天天看點

canvas 圓角矩形填充_解決使用canvas.drawRoundRect()時,四個圓角的線比較粗的問題...

使用canvas.drawRoundRect()時,解決四個圓角的線比較粗的問題,最近在使用 drawRoundRect(float left, float top, float right, float bottom, float rx, float ry, Paint paint) 畫圓角矩形時,四個圓角的線總是比四條邊的線更粗,看起來相當難看。

如下圖:

canvas 圓角矩形填充_解決使用canvas.drawRoundRect()時,四個圓角的線比較粗的問題...

畫圖的代碼片段如下。protected void onDraw(Canvas canvas) {

super.onDraw(canvas);

int width = getWidth();

int height = getHeight();

mPaint.setColor(Color.BLUE);

mPaint.setStyle(Paint.Style.STROKE);

mPaint.setStrokeWidth(5);

canvas.drawRoundRect(0, 0, width, height, 20, 20, mPaint);

}

為啥會這樣呢。試圖檢視源碼,發現該方法的實作是利用JNI調用的本地方法。隻能自己悶頭調試,終于。。。

其實,不是圓角的線粗了,而是四條邊的線變細了。what ?

圓角矩形應該是基于矩形繪制的,當 mPaint.setStrokeWidth(5) 設定線寬為5,那麼矩形的左上角的外邊是從 (-2.5,-2.5)開始,内角是從(2.5,2.5)開始,加起來線寬是5。

canvas 圓角矩形填充_解決使用canvas.drawRoundRect()時,四個圓角的線比較粗的問題...

但是畫布Canvas是從(0,0)開始顯示的,是以四條邊的外面一半就被截掉顯示不了了。如下圖。是以其實一般情況下,我們畫出來的矩形的線寬隻有我們 setStrokeWidth設定的一半寬。

canvas 圓角矩形填充_解決使用canvas.drawRoundRect()時,四個圓角的線比較粗的問題...

當形狀是圓角矩形時,四個角縮進去了,是以圓角上的弧線沒有被截掉一半,是我們setStrokeWidth 時的真正線寬。導緻圓角上的線看起來特别粗。

找到原因,就easy了,在繪制圓角矩形時,往裡縮一點,不要讓四條邊被截掉一半就可以了。

代碼如下,繪制時,調整下點的參數

protected void onDraw(Canvas canvas) {

super.onDraw(canvas);

int width = getWidth();

int height = getHeight();

mPaint.setColor(Color.BLUE);

mPaint.setStyle(Paint.Style.STROKE);

mPaint.setStrokeWidth(5);

canvas.drawRoundRect(2.5f, 2.5f, width-2.5f, height-2.5f, 20, 20, mPaint);

}

這樣顯示出來的圓角矩形看起來就舒服多了。

canvas 圓角矩形填充_解決使用canvas.drawRoundRect()時,四個圓角的線比較粗的問題...

over,over!!!