Подтвердить что ты не робот

Рисование программно овальной формы с границей (угловой радиус) на Android

Я пытаюсь нарисовать пользовательский ShapeDrawable с OvalShape, заполненный белым и с серой рамкой. Я создал такой способ:

ShapeDrawable drawable = new ShapeDrawable(new OvalShape());
drawable.getPaint().setColor(Color.GRAY);
drawable.getPaint().setStyle(Style.STROKE);
drawable.getPaint().setStrokeWidth(getPixels(5));
drawable.getPaint().setAntiAlias(true);

Но результатом этого было следующее: проблема углов

enter image description here

Идея программно создать такую ​​форму, но с разными цветами:

<shape xmlns:android="http://schemas.android.com/apk/res/android" 
android:shape="oval">
<corners android:radius="10dip"/>
<stroke android:color="#FF0000" android:width="5dip"/>
<solid android:color="@android:color/transparent"/>
</shape>

Как это можно исправить?

4b9b3361

Ответ 1

это новое решение:

 RoundedBitmapDrawable RBD = RoundedBitmapDrawableFactory.create(mContext.getResources(),YourBitmap);
            RBD.setCornerRadius(20);
            RBD.setAntiAlias(true);

            wholeRel.setBackground(RBD);

Ответ 2

Я нашел способ обойти создание новых чертежей!

Определен круг с границей из XML-андроида следующим образом:

<shape xmlns:android="http://schemas.android.com/apk/res/android" 
android:shape="oval">
<corners android:radius="10dip"/>
<stroke android:color="#FF0000" android:width="5dip"/>
<solid android:color="@android:color/transparent"/>
</shape>

Затем, когда вы хотите изменить яркий цвет, я применяю ColorFilter. Например, если я хочу изменить яркий красный цвет на синий, я делаю это:

Drawable drawable = context.getResources().getDrawable(R.drawable.name);
drawable.setColorFilter(Color.BLUE, PorterDuff.Mode.SRC_ATOP);

Если мы хотим использовать StateListDrawable для создания настраиваемых селекторов из кода, вам нужно знать - StateListDrawable очищает, применяемые к фильтрам drawables... применить фильтр на весь селектор на selector.setColorFilter... устранить проблему.