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?
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:
Wenn saveLayerAlpha(....)
aufgerufen wird, wird eine Offscreen-Bitmap zugewiesen.
In dieser Bitmap werden alle Zeichenoperationen ausgeführt.
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:
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 .
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)
Tags und Links java android android-custom-view alpha