2013-05-28 92 views
7

我想繪製一個形狀,使用Path的筆畫寬度爲5,其中所有筆畫都位於Path中,而不是半個筆畫內部和半個外部。Android - 筆畫內部路徑

謝謝,

卡爾

+0

我不明白這個問題,你能更具體嗎?你的意思是說「所有的中風都在路徑之內,而不是一半的中風和一半的外部」? – Marek

+1

假設我繪製了一個黑色爲10像素寬度的筆畫,然後用紅色爲5像素寬度的筆畫繪製形狀,那麼紅色路徑將是黑色路徑寬度的一半,並且將會是在中間,因爲一半的行程將在形狀邊界內,一半在外面。相反,我想要的是整個筆畫在形狀邊界內。在上面的例子中,這意味着紅色筆劃將位於黑色筆劃的一側,最靠近形狀邊界的一側 – user2430147

回答

1

看來它無法控制行程(即,內,中心或外面)的位置。欲瞭解更多信息請參閱:在繪製例如 Android Paint stroke width positioning

我的解決辦法偏移筆劃寬度,

final RectF rectF = new RectF(halfStrokeWidth, halfStrokeWidth, width - halfStrokeWidth, height - halfStrokeWidth); 
canvas.drawRoundRect(rectF, roundX, roundY, paint); 
1

可以使用CornerPathEffect類的幫助!以一個圓形的形狀爲例。

在使用canvas.drawRoundRect()方法繪製具有半徑的背景色並使用Paint設置Style.FILL時,您可以獲得圓形矩形形狀。然後使用相同的方法用Style.STROKE和paint的設置寬度在其上繪製圓形矩形邊框,即可獲得邊框。

代碼:

mBackgroundRectF.set(0, 0, mWidth, mHeight); 
canvas.drawRoundRect(mBackgroundRectF, mRadius, mRadius, mBackgroundPaint); 
// edge ajustment because paint stroke style is center align 
float edge = mBorderWidth/2; 
mBackgroundRectF.set(edge, edge, mWidth - edge, mHeight - edge); 
canvas.drawRoundRect(mBackgroundRectF, mRadius, mRadius, mBorderPaint); 

現在看起來,這不是一個我想這也有一定的背景和邊框之間的偏移:

before

讓我們嘗試CornerPathEffect:

mBackgroundRectF.set(0, 0, mWidth, mHeight); 
canvas.drawRoundRect(mBackgroundRectF, mRadius, mRadius, mBackgroundPaint); 
// edge ajustment because paint stroke style is center align 
float edge = mBorderWidth/2; 
mBackgroundRectF.set(edge, edge, mWidth - edge, mHeight - edge); 
// use CornerPathEffect and then use drawRect() method 
mBorderPaint.setPathEffect(new CornerPathEffect(mRadius/2)); 
canvas.drawRect(mBackgroundRectF, mBorderPaint); 

現在看起來正確:

after

+0

雙倍的疼痛筆劃寬度可以解決問題! – YXP