Android ändern, Leinwand, hintergrund-Farbe, ohne dass irgendwelche Zeichnungen von ihm
Ich versuche einen Weg zu finden, um den hintergrund der Leinwand mit einer Farbe abgeholt benutzerdefinierte Farbauswahl ohne entfernen von Zeichnungen auf Sie. Ich versuche, eine Anwendung zu erstellen, die können zeichnen auf Leinwand und speichern Sie es als png. Aber wenn ich einen neuen hintergrund auf der aktuellen Arbeitsfläche, alle Zeichnungen sind verschwunden. Ich bin mit so etwas wie dieses :
mCanvas.drawColor(picker.getColor());
Irgendwelche Ideen, wie ich kann, um die Dinge zu arbeiten?
- Sie brauchen, um uns zu zeigen, die onDraw-Methode..
- Hi, ich habe angefügt, eine Lösung, die Umsetzung Sie unten. Es tut ziemlich genau, was Sie wollen, es zu tun, wie beschrieben, in Ihrer Frage.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den bereits gegebenen Antworten zu deiner Frage sind alle in die richtige Richtung weisen: Sie müssen trennen Sie Ihre hintergrund-Farbe-block und der Vordergrund Zeichnung in separate Schichten, dann mischen Sie Sie vor dem speichern das ganze in einer .png-Datei. Dies ist, wie Adobe Photoshop workflow ausgelegt ist, als auch... Es macht Sinn, wenn wir darüber nachdenken: nehmen Sie zum Beispiel eine software wie MsPaint: weil Sie nicht verwenden, Schichten, es hat zu verlassen Sie sich auf Sachen wie Füll-algorithmen zu erreichen (wenn auch in unvollständiger Weise) etwas aus der Ferne ähnlich wie eine hintergrund ändern...
Eine Möglichkeit so etwas umzusetzen wäre zu instanziieren 2 Canvas-Objekte unterstützt durch 2 verschiedene bitmaps. Die erste Leinwand-Bitmap-pair-Mädchen sein würde, die Sie für Ihre Zeichnung im Vordergrund, und die zweite Leinwand-Bitmap-pair-Mädchen sein würde, die Sie für Ihr zusammengeführt-Schichten zeichnen (D. H. Vorder-Zeichnung + hintergrund-Farbe-block). Dann die 2. Bitmap wird gespeichert .png-Datei, wenn Sie es brauchen, um gerettet zu werden. Auf diese Weise, unsere erste Leinwand-Bitmap-pair speichert Ihre Vorder-info, die nicht zerstört werden können, wenn eine hintergrund-Farbe ändern, muss auch gemacht werden. Jedesmal, wenn eine operation gemacht ist, werden die Ebenen zusammengefasst werden können, in der 2. Canvas-Bitmap-pair-Mädchen, so dass es immer eine Bitmap mit dem richtigen Inhalt, der gespeichert werden kann, nach Lust und Laune.
Hier ist eine benutzerdefinierte Ansicht, die ich so gemacht wie klar diese Methode bis. Es implementiert eine einfache Ansicht, um zu malen eine Blaue Linie auf dem Touchscreen-Bildschirm mit einem finger, mit einer hintergrund-Farbe ändern in Abhängigkeit von der X-Y-position, sagte, den finger so zu zeigen, eine hintergrund-Farbe ändern, ohne unnötigen code inhärenten Komplexität einer vollständigen Umsetzung mit einem Farbrad/Menüs/unter anderem:
Um zu testen, diese Ansicht hier ist ein test-Aktivität verwendet, die
PaintView
Klasse. Diese beiden Dateien werden autark in einem Android-Projekt, so dass Sie können es testen, auf Ihre eigentliche Gerät ohne Hektik:Wenn Sie beim zeichnen die Farbe, zieht es über Ihre Zeichnungen. Sie müssen ziehen Sie die Farbe, und zeichnen Sie dann alles andere wieder.
Aussehen, wenn Sie ändern möchten, in Leinwand -, dann müssen Sie invalidate aufrufen um diese änderungen zu übernehmen auf Ihrem Bildschirm.Und wenn du invalidate aufrufen dann Ihre
onDraw()
Methode aufrufen.Wenn Sie möchten, ändern Sie einfach die Hintergrundfarbe der Leinwand aus dem Farbauswahl-speichern Sie die Farbe mit dem Wert in variable und rufen invalidate nur nach dem speichern der variable.Jetzt ist Ihre
onDraw()
anrufen.Nun ändern Sie den hintergrund der Leinwand durch den AufrufsetBackgroundColor(color variable)
imonDraw()
- und ziehen alles, was Sie wollenLeinwand.drawARGB(a,r,g,b)
und es wird Arbeit für die definitive
canvas.drawARGB(200, 0, 0, 0);
zu machen, die anzeigen dunkler.Solange Ihr hintergrund und werden in einer anderen Farbe, die Sie tun können:
Oder Sie können zeichnen Sie Ihre Inhalte auf eine offscreen-bitmap und zeichne den hintergrund und dann die offscreen auf die eigentliche bitmap. Auf diese Weise können Sie ändern Sie die Hintergrundfarbe, die verwendet wird, wenn die nächsten zwei-Schritt-Zeichnung geschehen wird.
@ Android-Droid
Diese zwei Zeilen code klappte bei mir. Wenn jemals der Benutzer klickt auf eine Farbe (Z.B.: Rot ) gesetzt, die Farbe zu mPaint wie
und Wann immer Sie Sie ändern möchten, canvas Farbe
wo die dv ist das Objekt der Klasse, die erweitert die Ansicht " (Benutzerdefinierte Ansicht).
Versuchen Sie es und lassen Sie mich wissen, wenn Sie irgendwelche Probleme.
Vielleicht ist es eine alte Frage, aber ich möchte dazu beitragen mit dieser Lösung, Im Fall, dass Sie unter der bitmap aus einer Quelle, und dann tut ein drawable mit Leinwand, vielleicht kann fit u:
Hoffe, es hilft...