Ich mache eine Schach-App und wenn ich die Kacheln des Boards zeichne, werden sie im (transparenten) Hintergrund nicht gefärbt. Was ich eigentlich möchte, ist ähnlich wie in einem ImageView, das ein Bild (mit einem transparenten Hintergrund) mit einem farbigen Hintergrund zeigt.Zeichne ein Bitmap (aus einem Zeichensatz) auf ein Canvas mit einem farbigen Hintergrund
Dies ist der Code
private final Paint squareColor;
private Rect tileRect;
private Drawable pieceDrawable;
public Tile(final int col, final int row) {
this.col = col;
this.row = row;
this.squareColor = new Paint();
squareColor.setColor(isDark() ? Color.RED : Color.WHITE);
}
public void draw(final Canvas canvas) {
if(pieceDrawable != null) {
Bitmap image = ((BitmapDrawable) pieceDrawable).getBitmap();
ColorFilter filter = new LightingColorFilter(squareColor.getColor(), Color.TRANSPARENT);
squareColor.setColorFilter(filter);
canvas.drawBitmap(image, null, tileRect, squareColor);
} else {
canvas.drawRect(tileRect, squareColor);
}
}
Und das ist, wie das Schachbrett wie (linkes Bild) sieht
Wenn ich vor drawBitmap call
diese 2 Zeilen auf Kommentar, ich das Brett als das richtige Bild.
ColorFilter filter = new LightingColorFilter(squareColor.getColor(), Color.TRANSPARENT);
squareColor.setColorFilter(filter);
Meine Stücke sind normale Bilder mit einem transparenten Hintergrund, wo das Stück nicht im Quadrat gezeichnet wird. Wie kann ich die rote Farbe hinter das Stück haben? (So wie es bei einem ImageView mit denselben Bildern mit einer Hintergrundfarbe oder einer farbigen Ansicht geschehen würde)
Funktioniert! Danke vielmals. Weißt du auch, was ich tun sollte, wenn ich in Zukunft die Kachelfarbe durch ein Zeichen/Bitmap ersetzen wollte? (wie ein Holzbild/eine Maske oder dergleichen) – BlackBox
Ersetzen Sie einfach den Aufruf 'drawRect()' durch 'drawBitmap()' one. Auf einem 'Canvas' werden Draw-Aufrufe übereinander gezeichnet. –