Den Canvas Transparent übermalen
- Home
- Tutorials
- Android
- Spiele App für Android 2.3.6 Programmieren
- Den Canvas Transparent übermalen
Den Canvas mit weißen, transparenten Vierecken zu übermalen ist sinnvoll um den Dialog, den wir in den letzten Tutorials erstellt haben noch stärker hervorzuheben und den SurfaceView in den Hintergrund zu stellen.
Dazu benötigen wir eine globale boolsche Variable in unserer GameView Klasse:
private boolean transparency=false;
Wir initilisieren sie mit false, da wir wenn die Activity aufgerufen wird, keine Transparenz haben möchten.
Um nun ein transparentes Viereck auf unseren Canvas zu malen, verwenden wir die folgende von uns erstellte Methode:
public void drawTransparency(Canvas canvas){
final Paint paintRect = new Paint();
paintRect.setARGB(188, 255, 255, 255);
canvas.drawRect(0, 0, getWidth(), getHeight(), paintRect);
pauseThread();
}
In der Methode drawTransparency erstellen wir ein Viereck, dann eine neue Instanz von Paint und als nächstes ordnen wir dieser Instanz einen ARGB-Wert zu. Wobei das A für alpha, also den Transparanzwert, steht. Wenn dieser Wert 255 ist, dann ist keine Transparenz vorhanden, bei 0 ist die Transparenz so hoch, dass das Objekt nicht sichtbar ist. Die Wert 255 habe ich für R, G und B gewählt, damit es sich um eine Art weißen Schleier handelt, der gemalt werden soll.
In Zeile 5 werden die Eckpunkte des Vierecks gesetzt. Da der "Schleier" auf dem gesamten Bildschirm verlaufen soll, ist hier die obere linke und untere rechte Seite des Bildschirms gesetzt. Denn die Methoden getMeasuredWidth() und getMeasuredHeight() geben die Breite und Höhe des Canvas zurück.
In Zeile 6 wird dann das Viereck auf den Canvas gemalt und in Zeile 7 der Thread pausiert (siehe Kapitel Den Dialog anzeigen lassen & onBackPressed()).
Um das ganzen nun auf unseren Canvas malen zu lassen, müssen wir diese Methode in unserer draw() (in früheren Versionen hieß es noch onDrawonDraw() - Methode aufrufen. Hierbei ist es wichtig, dass sie an letzter Stelle in der onDraw() - Methode aufgerufen wird, da es gewünscht ist, dass der "Schleier" über dem Rest gemalt wird und nicht andersrum. Als Parameter übergeben wir bei diesem Aufruf den Canvas.
Also folgender Aufruf in unserer draw() (in früheren Versionen hieß es noch onDrawonDraw() Methode:
if(transparency){
drawTransparency(canvas);
}
Um nun die boolsche Variable noch von unsere GameActivity Klasse setzen zu können, benötigen wir einen Setter:
public void setTransparency(boolean theTransparency) {
transparency = theTransparency;
}
Jetzt stellt sich die Frage, wann wollen wir denn dass der Canvas mit dem Schleier übermalt wird?!
- Wenn das Spiel Pausiert wird (vom Nutzer via Zurücktaste)
- Wenn die GameActivity nach onPause wieder in den Vordergrund geholt wurde
Also müssen wir die Methode dialogState() erweitern:
public void dialogState() {
if (dialogIsActive) {
dialog.hide();
dialogIsActive = false;
theGameView.setTransparency(false);
theGameView.resumeThread();
} else if (!dialogIsActive) {
theGameView.setTransparency(true);
dialog.show();
dialogIsActive = true;
}
}
Spiele App für Android 2.3.6 Programmieren
-
Android 2.3.6 Spiele App Programmieren
-
Lektion1.1
-
Lektion1.2
-
Lektion1.3
-
Lektion1.4
-
Lektion1.5
-
Lektion1.6
-
Lektion1.7
-
Lektion1.8
-
Lektion1.9
-
Lektion1.10
-
Lektion1.11
-
Lektion1.12
-
Lektion1.13
-
Lektion1.14
-
Lektion1.15
-
Lektion1.16
-
Lektion1.17
-
Lektion1.18
-
Lektion1.19
-
Lektion1.20
-
Lektion1.21
-
Lektion1.22
-
Lektion1.23
-
Lektion1.24
-
Lektion1.25
-
Lektion1.26
-
Lektion1.27
-
Lektion1.28
-
Lektion1.29
-
Lektion1.30
-
Lektion1.31
-
Lektion1.32
-
Lektion1.33
-
Lektion1.34
-
Lektion1.35
-
Lektion1.36
-
Lektion1.37
-
Lektion1.38
-
Lektion1.39
-