2012-11-24 23 views
29

C'è qualche modo in Android per disegnare un rettangolo pieno con dire un bordo nero. Il mio problema è che canvas.draw() prende un oggetto paint e, a mia conoscenza, l'oggetto paint non può avere un colore diverso per il riempimento e il tratto. C'è un modo per aggirare questo?Disegno di un rettangolo pieno con un bordo in Android

+0

Hai ragione. Disegna prima il rect pieno e poi il tratto intorno all'esterno. – Gene

risposta

2

Si disegna un rettangolo con il colore del bordo e la dimensione del rettangolo più il bordo, si modifica il colore della pittura e si disegna nuovamente il rettangolo con la dimensione normale.

+10

Si noti che questo risulta in un disegno la stessa area quasi due volte –

100

Prova a dipingere. setStyle (Paint.Style FILL) e vernice. 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); 
} 
+0

C'è anche un modo per farlo per canvas.drawRoundRect()? Perché nel mio caso il bordo ha ora gli angoli arrotondati, anche se lo disegno anche con canvas.drawRoundRect(). – Chris

+3

So che la risposta è vecchia, ma voglio condividere questa piccola riga paint.setPathEffect (new CornerPathEffect (raggio)); rispondere alla domanda di Chris. Rispondo solo perché qualcuno può aver bisogno di aiuto. – Crash

6

Se si disegna più viste, è possibile utilizzare anche due colori, uno per il tratto e uno per il riempimento. In questo modo non devi continuare a reimpostarli.

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 
}