看看我下面的代码。

ShapeDrawable shapeDrawable = new ShapeDrawable(new RectShape());
    shapeDrawable.getPaint().setColor(Color.parseColor("#5a2705"));
    shapeDrawable.getPaint().setStyle(Style.STROKE);
    shapeDrawable.getPaint().setAntiAlias(true);
    shapeDrawable.getPaint().setStrokeWidth(2);
    shapeDrawable.getPaint().setPathEffect(new CornerPathEffect(10));

我将此作为背景应用于我的 LinearLayout ,但边缘不平滑。我怎样才能解决这个问题?

这是它的外观截图。

最佳答案

使用以编程方式创建的可绘制形状作为 View 背景会导致笔触宽度的外半部分被裁剪掉(原因我不知道)。仔细观察你的图像,你会发现你的笔触只有 1 像素宽,即使你要求 2。这就是为什么角落看起来很丑。如果您分别尝试更大的笔划和半径(例如 10 和 40),则这种效果会更加明显。

要么使用 XML drawable,它似乎没有这个问题,就像在 Harshit Jain 的回答中一样,或者如果您必须(或更喜欢)使用编程解决方案,请执行以下操作。

解决方案: 使用图层列表按被剪裁的量(笔画宽度的一半)插入矩形,如下所示:

float strokeWidth = 2;

ShapeDrawable shapeDrawable = new ShapeDrawable(new RectShape());
shapeDrawable.getPaint().setColor(Color.parseColor("#5a2705"));
shapeDrawable.getPaint().setStyle(Style.STROKE);
shapeDrawable.getPaint().setAntiAlias(true);
shapeDrawable.getPaint().setStrokeWidth(strokeWidth);
shapeDrawable.getPaint().setPathEffect(new CornerPathEffect(10));

Drawable[] layers = {shapeDrawable};
LayerDrawable layerDrawable = new LayerDrawable(layers);

int halfStrokeWidth = (int)(strokeWidth/2);
layerDrawable.setLayerInset(0, halfStrokeWidth, halfStrokeWidth, halfStrokeWidth, halfStrokeWidth);

然后使用 layerDrawable 作为您的背景。这是上述代码的结果的屏幕截图:

10-07 18:33