Использование программно созданная форме рисуемого как вид фон приводит к внешней половине вашей ширины штриха получения обрезано (по причинам, я не» t знать). Посмотрите внимательно на свое изображение, и вы увидите, что ваш удар имеет ширину всего в 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
в качестве фона. Вот снимок экрана результата выше кода:
Вы пытались использовать 'RoundRectShape' вместо' CornerPathEffect'? – Luksprog
Нет, я его не пробовал, вы можете мне показать? – Goofy
Посмотрите на https://gist.github.com/luksprog/8186419 – Luksprog