web-dev-qa-db-fra.com

Dessiner un rectangle rempli avec une bordure en android

Y a-t-il un moyen dans Android pour dessiner un rectangle rempli avec par exemple une bordure noire. Mon problème est que le canvas.draw () prend un objet Paint, et à ma connaissance l'objet Paint peut ' t avoir une couleur différente pour le fond et le contour. Y a-t-il un moyen de contourner cela?

43
Uwais Iqbal

Vous dessinez un rectangle avec la couleur de la bordure et la taille du rectangle plus la bordure, vous changez la couleur de la peinture et dessinez à nouveau le rectangle avec la taille normale.

2
yDelouis

Essayez Paint .setStyle (Paint.Style . FILL ) et Paint .setStyle (Paint.Style . COURSE ).

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

Si vous dessinez plusieurs vues, vous pouvez également utiliser deux peintures, une pour le trait et une pour le remplissage. De cette façon, vous ne devez pas continuer à les réinitialiser.

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