白とグレーの境界線で塗りつぶされたOvalShapeを使用して、カスタムShapeDrawableを描画しようとしています。このようなドローアブルを作成しました:
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
このアイデアは、このような形状を異なる色で作成するためにプログラムで作成されています。
<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>
どうすればこれを修正できますか?
これは新しいソリューションです。
RoundedBitmapDrawable RBD = RoundedBitmapDrawableFactory.create(mContext.getResources(),YourBitmap);
RBD.setCornerRadius(20);
RBD.setAntiAlias(true);
wholeRel.setBackground(RBD);
新しいドローアブルの作成を回避する方法を見つけました!
次のように、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 = context.getResources().getDrawable(R.drawable.name);
drawable.setColorFilter(Color.BLUE, PorterDuff.Mode.SRC_ATOP);
StateListDrawableを使用してコードからカスタムセレクターを作成する場合、StateListDrawablesはドロアブルフィルターに適用されます... selector.setColorFilter...
によってセレクター全体にフィルターを適用して問題を修正します。