Die benutzerdefinierte Ansicht von Android verarbeitet Transparenz / Alpha nicht richtig

8

Ich zeichne eine benutzerdefinierte Ansicht. In dieser Ansicht verwende ich zwei verschiedene Mal- und Pfadobjekte, um auf die Leinwand zu malen. Ich zeichne grundsätzlich zwei Formen, die sich überschneiden. Nachdem ich Alpha hinzugefügt habe, ist der Teil der Ansicht, der sich überlappt, dunkler als der Rest des Bildes. Das ist unerwünscht, aber ich bin nicht sicher, wie ich es beheben soll.

Dies ist ein Ausschnitt meines Codes, um zu zeigen, wie ich Alpha in meinem NewButtonView.java verwende

%Vor%

Ungefähr 31 Minuten in dieses Google I / O-Video ... zeigen sie meine Wünsche bewirken.

Sie zeigen grundsätzlich dieses Bild:

Fügen Sie Transparenz hinzu und rufen Sie dieses Bild ab: UNESESIRED RESULT

Sie enden damit: GEWÜNSCHTES ERGEBNIS

Hat jemand eine Idee, wie man diesen erwünschten Affekt bekommt?

    
EGHDK 27.11.2013, 22:46
quelle

2 Antworten

12

Wie im Video erwähnt, würdest du Canvas#saveLayerAlpha(....) dafür verwenden. Sie können auch einen ähnlichen Effekt erzielen, ohne ihn zu verwenden. Ich werde das später besprechen.

Lassen Sie uns eine Beispielansicht erstellen:

%Vor%

Was passiert:

  1. Wenn saveLayerAlpha(....) aufgerufen wird, wird eine Offscreen-Bitmap zugewiesen.

  2. In dieser Bitmap werden alle Zeichenoperationen ausgeführt.

  3. Wenn canvas.restore() aufgerufen wird, wird diese Bitmap an die Bildschirmarbeitsfläche übertragen und der Alpha-Wert, den wir in saveLayerAlpha(....) angegeben haben, wird auf die Offscreen-Bitmap angewendet.

(denke ich) Das Folgende ist eine äquivalente Methode, um diesen Effekt ohne saveLayerAlpha(....) zu erzeugen:

%Vor%

Ausgabe:

Nur zur Referenz, der Basiscontainer im Bild oben ist ein LinearLayout mit Hintergrund, der auf dieses jpeg gesetzt ist: Link .

Und das Zeichen, das als Hintergrund von SampleView verwendet wird:

%Vor%

stammt aus: hier .

    
Vikram 03.12.2013 03:23
quelle
0

Sie könnten alles in einer Bitmap mit vollem Alpha zeichnen und dann das Alpha der Bitmap ändern

(Entschuldigung, das ist mehr ein Kommentar als eine Antwort, aber der Stack-Überlauf erlaubt mir keine Kommentare)

    
Basile Perrenoud 09.12.2013 16:33
quelle