在Android上以编程方式绘制带边框(角半径)的椭圆形状

时间:2013-03-06 12:45:58

标签: android android-drawable shapedrawable

我试图用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);

但结果是:corners problem

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>

怎样才能解决这个问题?

2 个答案:

答案 0 :(得分:44)

我找到了一种方法来创造新的drawables!

定义了一个带有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清除应用于drawables过滤器...通过selector.setColorFilter...对整个选择器应用过滤器来解决问题。

答案 1 :(得分:1)

这是一个新的解决方案:

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

            wholeRel.setBackground(RBD);