Composite-Operationen in Android-Leinwand
-
23-09-2019 - |
Frage
Ich bin gerade erst mit Android-Entwicklung und ich komme aus der JavaScript/HTML-Welt so bin ich derzeit daran, die Möglichkeiten des Android-SDK.
Der HTML-5-canvas unterstützt composite-Operationen (Siehe hier).
Ist das möglich in einem Android-Leinwand?Ich scannte die API der Canvas-Klasse, aber konnte nichts finden hilfreich.Ich muss mindestens die composite-Betrieb "Quelle" oder (falls dies nicht möglich ist) "source-atop".
Lösung
Zusammensetzung, indem sie auf einem Canvas
mit einem Paint
behandelt wird, die eine PorterDuffXfermode
verwendet.
Paint p=new Paint();
p.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DARKEN));
canvas.drawBitmap(bitmap, 0, 0, p);
Siehe hier für weitere Informationen. Ich habe auch außer Kraft setzen onPaint
verwaltet, so dass wir diese Zusammensetzung auf Elemente anwenden können, die themeselves ziehen.
Andere Tipps
Ich habe nicht geschaut, das zu tun diese Art von Aktivitäten vor, aber ich denke, es gibt einen Weg, es zu tun, mit der Rect Form.Sie können festlegen, Rechtecke, um zu markieren, welche Bereiche gezogen werden sollte, die in die Leinwand, oder die zu nehmen aus dem Quellbild und der Rect
Klasse hat einige Vergleich-Funktionen built-in.Zum Beispiel nachzuahmen, ein source-in, den Sie verwenden könnten setIntersect(Rect boundingBoxOfSource, Rect boundingBoxOfDestination)
new rectangle nur durchschnittene Gegend der beiden Bilder.Dann können Sie das Rechteck als argument in einem der Leinwand zeichnen, Befehlen, sagen, dass es nur nehmen Sie die Pixel aus dem Quellbild in das Rechteck.Sie Steuern die Zeichnung in der Z-Achse durch die Reihenfolge, in der die zeichnen-Befehle ausgeführt werden.
es selbst gefunden. Die PorterDuffXfermode implementiert alle diese Composite-Modi.