web-dev-qa-db-ja.com

androidの境界線で塗りつぶされた長方形を描く

Androidに黒い境界線で塗りつぶされた長方形を描く方法はありますか?私の問題は、canvas.draw()が1つのPaintオブジェクトを取得することです。塗りつぶしとストロークの色が異なります。これを回避する方法はありますか?

43
Uwais Iqbal

境界線の色と長方形のサイズに境界線を加えた長方形を描画し、ペイントの色を変更して、通常のサイズで長方形を再度描画します。

2
yDelouis

ペイントしてみてください。setStyle(Paint.Style。[〜#〜] fill [〜#〜])およびPaint。setStyle(Paint.Style。[〜#〜] stroke [ 〜#〜])。

Paint paint = new Paint();
Rect r = new Rect(10, 10, 200, 100);

@Override
public void onDraw(Canvas canvas) {
    // fill
    Paint.setStyle(Paint.Style.FILL);
    Paint.setColor(Color.Magenta); 
    canvas.drawRect(r, Paint);

    // border
    Paint.setStyle(Paint.Style.STROKE);
    Paint.setColor(Color.BLACK);
    canvas.drawRect(r, Paint);
}
125
wannik

複数のビューを描画する場合は、ストローク用と塗りつぶし用の2つのペイントを使用することもできます。そうすれば、それらをリセットし続ける必要はありません。

enter image description here

Paint fillPaint = new Paint();
Paint strokePaint = new Paint();

RectF r = new RectF(30, 30, 1000, 500);

void initPaints() {

    // fill
    fillPaint.setStyle(Paint.Style.FILL);
    fillPaint.setColor(Color.YELLOW);

    // stroke
    strokePaint.setStyle(Paint.Style.STROKE);
    strokePaint.setColor(Color.BLACK);
    strokePaint.setStrokeWidth(10);
}

@Override
protected void onDraw(Canvas canvas) {

    // First rectangle
    canvas.drawRect(r, fillPaint);    // fill
    canvas.drawRect(r, strokePaint);  // stroke

    canvas.translate(0, 600);

    // Second rectangle
    int cornerRadius = 50;
    canvas.drawRoundRect(r, cornerRadius, cornerRadius, fillPaint);    // fill
    canvas.drawRoundRect(r, cornerRadius, cornerRadius, strokePaint);  // stroke
}
25
Suragch