Как динамически добавлять обводку к чертежам?

Я использую функцию drawCircle() для возврата объекта ShapeDrawable, который представляет собой овал, и использую ImageView.setImageDrawable() для его установки. Но как я могу добавить 2dp-границу к овальному рисунку? Я пытался использовать GrandientDrawable, но независимо от того, насколько велико значение толщины границы, граница едва видна на эмуляторе.

Вот моя функция drawCircle():

public ShapeDrawable drawCircle (int diameter) {
        OvalShape ovalShape = new OvalShape();
        ShapeDrawable drawable = new ShapeDrawable(ovalShape);
        drawable.getPaint().setColor(getResources().getColor(R.color.textColorHint));
        drawable.getPaint().setStyle(Paint.Style.STROKE);
        drawable.setIntrinsicHeight(diameter);
        drawable.setIntrinsicWidth(diameter);

        return drawable;
    }

Вот моя функция setStroke():

public void setStroke(ImageView view) {
        GradientDrawable gradientDrawable = new GradientDrawable();
        gradientDrawable.setShape(GradientDrawable.OVAL);
        gradientDrawable.setStroke(100, Color.WHITE);
        view.setBackground(gradientDrawable);
    }

Вот как я его использую:

// Calculate diameter
int selector_one_diameter = (int)(selector_diameter * 1/6);
// Get ImageView
ImageView one_img = (ImageView) findViewById(R.id.circle_one_selector_img);
// Set drawable
one_img.setImageDrawable(drawCircle(selector_one_diameter));
// Set stroke
setStroke(one_img);
0
0
172
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Как насчет создания файла oval.xml в папке с возможностью рисования и использования dashWidth и width вместо градиентаDrawable?

    <?xml version = "1.0" encoding = "utf-8"?>
<shape xmlns:android = "http://schemas.android.com/apk/res/android"
    android:shape = "oval">
<stroke
    android:dashWidth = "2dp"
    android:width  = "3dp"
    android:color = "@color/colorPrimary"/>
</shape>

вы можете вписать любое значение, которое вы хотите для ширины и ширины тире. Я надеюсь, что это помогло

Hansel 13.02.2019 16:15

Спасибо за помощь! Но если я не установлю padding в ImageView, фон для рисования не будет виден, потому что ImageDrawable, который я передал ImageView, скрыл его. Итак, установив отступ в ImageView, это сработало!

Elm Liu 13.02.2019 17:13
Ответ принят как подходящий

Лучший способ работы с циклическим imageview — это работа с библиотекой это, с которой слишком легко работать, и она дает вам все настройки, которые вы ищете.

Так что пользуйтесь и не забывайте :)

ismail alaoui 13.02.2019 17:02

Другие вопросы по теме