2

時々色が変わるドローアブルがありますが、常に角が丸くなっている必要があります。UIライブラリ用なので、何色になるかわかりません。XML はオプションではありません。純粋な Java でこれを実現する必要があります。

XMLを使用せずにプログラムでこれを達成する方法はありますか?

4

3 に答える 3

2

カスタム Drawable を作成 (つまり、Drawable を拡張) し、その onDraw で Canvas.drawRoundRect(RectF rect, float rx, float ry, Paint paint) を使用し、Paint を目的の色に設定します。

于 2012-10-09T11:27:34.627 に答える
1

ドローアブルを自分で描画する場合は、Canvas.clipPathを使用してクリップパスを設定できます。パスは、1つまたは複数の長方形といくつかの円で構成され、丸みを帯びた角をクリップします。目的の出力が得られるまで、パスコンポーネントの配置をいじくり回さなければならない可能性があります。

于 2012-10-09T11:19:07.483 に答える
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:エッジにアンチエイリアスを追加しました。

(ソース)

于 2014-08-29T17:19:57.133 に答える