看看我下面的代码。
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
作为您的背景。这是上述代码的结果的屏幕截图: