我在此页面上找到了解决方案:http://www.betaful.com/2012/01/programmatic-shapes-in-android/
在 Android 中,当您使用笔划进行绘制时,它会在您所绘制的形状的边界处绘制笔划的中心。正如您所看到的,笔划被图像的边界裁剪掉。幸运的是,您可以在画布上执行转换。我们想要做的是将笔画形状转换为比边界稍小——并且有一个矩阵运算!
matrix.setRectToRect(new RectF(0, 0, canvas.getClipBounds().right, canvas.getClipBounds().bottom),
new RectF(strokeWidth/2, strokeWidth/2, canvas.getClipBounds().right - strokeWidth/2,
canvas.getClipBounds().bottom - strokeWidth/2),
Matrix.ScaleToFit.FILL);
Edit
...更好、更简单的解决方案可以在链接的评论部分找到:
正如您在 Android 文档中看到的,资源中的形状 Drawable 实际上映射到 GradientDrawable,而不是 ShapeDrawable:
因此,我的以下代码可以完美运行:
GradientDrawable drawable = new GradientDrawable();
drawable.setColor(Color.TRANSPARENT);
drawable.setShape(GradientDrawable.OVAL);
drawable.setStroke((int)dpToPx(2), Color.parseColor("#EEEEEE"));
drawable.setSize((int)dpToPx(240), (int)dpToPx(240));