31

我正在尝试使用 OvalShape 绘制自定义 ShapeDrawable,填充为白色和灰色边框。我创建了一个这样的drawable:

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);

但结果是:角落问题

在此处输入图像描述

这个想法是以编程方式创建一个像这样但颜色不同的形状:

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

怎么能解决这个问题?

4

2 回答 2

45

我找到了一种方法来绕过创建新的可绘制对象!

A定义了一个带有android 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 drawable = context.getResources().getDrawable(R.drawable.name);
drawable.setColorFilter(Color.BLUE, PorterDuff.Mode.SRC_ATOP);

如果我们想使用 StateListDrawable 从代码创建自定义选择器,请注意 - StateListDrawable 清除应用于可绘制过滤器...通过selector.setColorFilter...修复问题在整个选择器上应用过滤器。

于 2013-03-07T00:16:41.947 回答
1

这是一个新的解决方案:

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

            wholeRel.setBackground(RBD);
于 2017-12-12T23:24:14.917 回答