Dessiner un rectangle rempli avec une bordure dans android

Est - il possible dans Android de dessiner un rectangle rempli avec, disons, une bordure noire. Mon problème est que la toile.draw() prend un objet de peinture, et à ma connaissance l'objet de peinture ne peut pas avoir une couleur différente pour le remplissage et le trait. Est-il un moyen de contourner cela?

33
demandé sur Loktar 2012-11-25 01:28:47

3 réponses

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

2
répondu yDelouis 2012-11-24 21:32:04

Essayez la peinture.setStyle (Peinture.Style.remplir ) et peindre.setStyle (Peinture.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);
}
109
répondu wannik 2013-08-24 22:27:09

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 n'avez pas à les réinitialiser.

entrez la description de l'image ici

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
}
11
répondu Suragch 2017-05-19 12:14:37