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
Antwort
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.
Beachten Sie, dass dies zu einer Zeichnung der gleichen Fläche fast zweimal führt –
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);
}
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
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
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.
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
}
Du hast Recht. Zeichnen Sie zuerst die gefüllte Rect zuerst und dann den Schlag um die Außenseite. – Gene