Ich erstelle eine Zeichnungs-App, die die DrawingSurfaceView-Klasse unten verwendet. In dieser Klasse habe ich einen Paint Called EraserPaint, den der Benutzer an- und ausschalten kann. Wenn er auf dieser Farbe ist, soll er radieren, was auch immer auf seinem Weg ist. aber stattdessen zeichnet es nur eine schwarze Linie ..
Wenn ich den Canvas als transparentes Png speichere, ist der Radierer korrekt, aber auf dem Bildschirm wird schwarz angezeigt.
Screenshot vom Telefon von EraserPaint zum Schreiben von "Erik" auf Blob
PNG aus dem Canvas-Bereich gespeichert
radierpinsel sieht folgendermaßen aus:
%Vor%die WHOLE-Klasse
%Vor%Ich sollte hinzufügen, dass ich diese benutzerdefinierte Ansicht zu einem relativen Layout hinzufüge, das dieses karierte Muster als Hintergrundbild hat.
BITTE BITTE BITTE help .. Ich brauche dieses Vorschaubild, um Schwarz nicht zu zeigen, nachdem eine Radierfarbe verwendet wurde .. Ich brauche es, um das Schachbrettmuster dahinter zu zeigen .. Ich weiß, dass der Radiergummi funktioniert, wenn diese schwarzen Radiergummis aussparen als transparent.
NEUER HINWEIS
Ich habe herumgespielt und etwas anderes entdeckt, das neugierig ist. Beim Experimentieren habe ich versucht, vom Zeichen zum canvas
zu wechseln, das an die Methode onDraw
übergeben wurde, und direkt an den Canvas, den ich im Constructor namens mCanvas
eingerichtet habe, und bemerkte, dass es nicht so weit gezeichnet wurde, wie ich sehen konnte Ich habe dem onDraw
wie folgt ein Protokoll hinzugefügt:
was ausspuckt
%Vor%Ich hatte das gleiche Problem mit meiner App. Ich habe sogar den "Fingerfarben" -Beispielcode ausprobiert und hatte immer noch das gleiche Problem. Ich konnte den Radiergummi nie als Weg funktionieren lassen, aber ich konnte einen Workaround finden. Anstatt einen Pfad zu zeichnen, wenn ich lösche, zeichne ich einen Kreis (es könnte eine beliebige Form haben), wenn der Benutzer seinen Finger nach unten drückt oder es ein "Move" -Ereignis gibt:
%Vor%Es wird einige Zeit dauern, um dies in Ihren Code zu integrieren, aber ich garantiere Ihnen, dass es weniger Zeit in Anspruch nimmt als die Zeit, die Sie bereits damit verbracht haben, dieses Problem zu beheben. Ich kann Ihnen mehr von meinem PaintView senden, wenn Sie denken, dass es hilfreich wäre.
Gleiches Problem angetroffen, versucht alle anderen gefundenen Lösungen, kein Glück.
Aber ich habe einen Workaround. Sie können eine Bitmap hinzufügen, um die Striche zu speichern.
%Vor%Wenn es eine Berührung gibt, zeichnen Sie den Strich mit der aktuellen Farbe und der aktuellen Strichbreite auf. (Die Farbe könnte eine beliebige Farbe haben, einschließlich der Radierfarbe)
Überschreiben Sie dann die onDraw (Canvas) -Methode. Da die Bitmap Radierer unterstützt, während die Zeichenfläche dies nicht unterstützt, können wir zunächst das resultierende Bild zuerst auf der Bitmap zeichnen und dann die Bitmap auf die Zeichenfläche zeichnen.
%Vor%FYI, wenn die Vordergrundbitmap sehr groß ist, wird die Leistung niedrig sein. Um dies zu lösen, sollten wir nur den Bereich ungültig machen, den der letzte Finger berührt hat.
Dies ist nur eine Vermutung: Es könnte mit der Hardwarebeschleunigung zusammenhängen. Versuchen Sie, die Hardwarebeschleunigung zu deaktivieren. Wenn das hilft, können Sie eine Bitmap in der Größe der Ansicht erstellen, alle Ihre Sachen auf diese Bitmap zeichnen und dann die Bitmap in den Canvas der Ansicht zeichnen.
Tags und Links android android-canvas paint