如何动态地将描边添加到可绘制对象?

时间:2019-02-13 14:05:11

标签: android android-drawable

我使用函数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);

2 个答案:

答案 0 :(得分:0)

如何在drawable文件夹下创建一个椭圆形.xml文件,并使用dashWidth和width而不是gradientDrawable?

    <?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>

答案 1 :(得分:0)

使用循环imageview的最佳方法是使用this库,它很容易使用,并且可以为您提供所有要查找的自定义内容