2013-05-28 59 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