2012-11-24 16 views
29

Gibt es in Android eine Möglichkeit, ein gefülltes Rechteck mit einem schwarzen Rand zu zeichnen. Mein Problem ist, dass die canvas.draw() ein Malobjekt verwendet, und meines Wissens kann das Malobjekt keine andere Farbe für die Füllung und den Strich haben. Gibt es einen Weg dahin?Zeichnen eines gefüllten Rechtecks ​​mit einem Rand in Android

+0

Du hast Recht. Zeichnen Sie zuerst die gefüllte Rect zuerst und dann den Schlag um die Außenseite. – Gene

Antwort

2

Sie zeichnen ein Rechteck mit der Farbe der Umrandung und der Größe des Rechtecks ​​plus der Umrandung, Sie ändern die Farbe der Farbe und zeichnen wieder das Rechteck mit der normalen Größe.

+10

Beachten Sie, dass dies zu einer Zeichnung der gleichen Fläche fast zweimal führt –

100

Versuchen Sie Farbe. setStyle (Paint.Style. Füllen) und malen. 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

Gibt es auch eine Möglichkeit, dies für canvas.drawRoundRect() zu tun? Denn in meinem Fall hat der Rahmen jetzt abgerundete Ecken, obwohl ich ihn auch mit canvas.drawRoundRect() zeichne. – Chris

+3

Ich weiß, dass die Antwort alt ist, aber ich möchte diese kleine Zeile paint.setPathEffect (new CornerPathEffect (radius)) teilen; um die Frage von Chris zu beantworten. Ich antworte nur, weil jemand Hilfe brauchen kann. – Crash

6

Wenn Sie mehrere Ansichten zeichnen, können Sie auch zwei Farben verwenden, einen für den Strich und einen für die Füllung. Auf diese Weise müssen Sie sie nicht immer zurücksetzen.

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 
}