Подтвердить что ты не робот

Рисование заполненного прямоугольника с рамкой в ​​android

Есть ли какой-либо способ в Android рисовать заполненный прямоугольник с черной рамкой. Моя проблема заключается в том, что canvas.draw() принимает один объект paint, и, насколько мне известно, объект paint не может иметь другой цвет для заливки и штриха. Есть ли способ обойти это?

4b9b3361

Ответ 1

Вы рисуете прямоугольник с цветом границы и размером прямоугольника плюс границу, вы меняете цвет краски и снова рисуете прямоугольник с нормальным размером.

Ответ 2

setStyle (Paint.Style. FILL) и нарисуйте. setStyle (Paint.Style. STROKE strong > ).
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);
}

Ответ 3

Если вы рисуете несколько видов, вы также можете использовать две краски, одну для штриха и одну для заливки. Таким образом, вам не нужно их перезагружать.

введите описание изображения здесь

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
}