時々色が変わるドローアブルがありますが、常に角が丸くなっている必要があります。UIライブラリ用なので、何色になるかわかりません。XML はオプションではありません。純粋な Java でこれを実現する必要があります。
XMLを使用せずにプログラムでこれを達成する方法はありますか?
時々色が変わるドローアブルがありますが、常に角が丸くなっている必要があります。UIライブラリ用なので、何色になるかわかりません。XML はオプションではありません。純粋な Java でこれを実現する必要があります。
XMLを使用せずにプログラムでこれを達成する方法はありますか?
カスタム Drawable を作成 (つまり、Drawable を拡張) し、その onDraw で Canvas.drawRoundRect(RectF rect, float rx, float ry, Paint paint) を使用し、Paint を目的の色に設定します。
ドローアブルを自分で描画する場合は、Canvas.clipPathを使用してクリップパスを設定できます。パスは、1つまたは複数の長方形といくつかの円で構成され、丸みを帯びた角をクリップします。目的の出力が得られるまで、パスコンポーネントの配置をいじくり回さなければならない可能性があります。
@ nmw からの回答に基づいて、これで機能するコードを次に示します。
public class RRDrawable extends Drawable {
private Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
public RRDrawable(int color) {
paint.setColor(color);
paint.setStyle(Paint.Style.FILL);
}
@Override
public void draw(Canvas canvas) {
int radius = 10; // note this is actual pixels
canvas.drawRoundRect(new RectF(0,0,canvas.getWidth(), canvas.getHeight()), radius, radius, paint);
}
@Override
public void setAlpha(int i) {
//.. not supported
}
@Override
public void setColorFilter(ColorFilter colorFilter) {
//.. not supported
}
@Override
public int getOpacity() {
return 1;
}
}
EDIT:エッジにアンチエイリアスを追加しました。