Versuch, einen Radiergummi für Canvas zu erstellen

8

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:

%Vor%

was ausspuckt

%Vor%     
erik 19.06.2013, 17:20
quelle

5 Antworten

7

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.

    
clavio 21.06.2013 15:16
quelle
1

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.

    
Patrick Chan 06.12.2013 06:20
quelle
0

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.

    
yoah 28.06.2013 15:49
quelle
0

Damit die Arbeitsfläche gelöscht und ungültig gemacht werden kann, müssen Sie den setXfermode Ihrer Arbeitsfläche auf null setzen. Überprüfen Sie die letzte Zeile des Codes.

%Vor%     
onexf 17.11.2015 06:35
quelle
-2

Sie können eine boolesche Variable verwenden, während Sie Radierer auswählen (zB isEraser = true ) und in onDraw() können Sie einen Pfad zeichnen, wenn es kein Radierer ist.

%Vor%     
android 14.09.2015 10:09
quelle

Tags und Links