Implementierung von Android FingerPaint Undo / Redo

8

Ich arbeite an einem Testprojekt, das dem Beispiel von FingerPaint in Android SDK-Demos ähnelt. Ich habe versucht, Rückgängig / Redo-Funktionalität in meinem Projekt zu implementieren, aber die Dinge, die ich versuchte, funktionierte nicht wie erwartet. Ich finde ähnliche Fragen über das Internet und hier, aber sie haben mir nicht geholfen, deshalb stelle ich eine neue Frage.

Hier ist eine Idee, was ich eigentlich mache:

%Vor%

Irgendwelche Vorschläge / Ideen / Beispiele, die die beste Art sind, diese Funktionalität in meinem Projekt zu implementieren?

    
Android-Droid 15.04.2012, 20:48
quelle

5 Antworten

11

Ich weiß nicht, ob Sie daran gedacht haben, aber so mache ich es. Anstatt es in nur einem Pfad zu speichern, speichern Sie ein Array mit allen Pfaden, so kann der Benutzer viele Linien zeichnen, mit einer kleinen Modifikation können Sie auch Multitouch hinzufügen.

Um das Rückgängigmachen und Wiederherstellen zu ermöglichen, entfernen oder fügen Sie einfach den letzten Pfad aus der Variablen paths hinzu und speichern Sie sie in einem neuen Array. Etwas wie:

%Vor%

Hier ist mein modifiziertes Panel, ich kann es jetzt nicht ausprobieren, aber die obigen Methoden sollten funktionieren! Ich hoffe es hilft! (Es gibt einige zusätzliche Variablen, entfernen Sie sie einfach:)

%Vor%     
caiocpricci2 11.05.2012, 19:55
quelle
4

Eine Möglichkeit, eine do / redo-Funktionalität zu implementieren, besteht darin, einen Methodenaufruf und alle für den Aufruf benötigten Informationen in ein Objekt einzufügen, damit Sie sie speichern und später aufrufen können - das Befehlsmuster .

In diesem Muster hat jede Aktion ihr eigenes Objekt: DrawCircleCommand, DrawPathCommand, FillColorCommand usw. In jedem Objekt wird die draw () -Methode auf einzigartige Weise implementiert, aber immer als draw (Canvas-Canvas) aufgerufen, was den CommandManager erlaubt um die Befehle zu durchlaufen. Um dies rückgängig zu machen, iterieren Sie über die Objekte, die die Methode undo () aufrufen;

Jedes Befehlsobjekt implementiert eine Schnittstelle

%Vor%

Ein Objekt würde wie folgt aussehen:

%Vor%

}

Ihre Befehle werden dem CommandManager hinzugefügt:

%Vor%

und einen Befehl rückgängig zu machen, den Sie gerade aufrufen:

%Vor%

Der CommandManager speichert die Befehle in einer Datenstruktur, z. Liste, die es iterativ über die Befehlsobjekte ermöglicht.

Hier finden Sie eine vollständige Anleitung hier um das Befehlsmuster mit Do / Rückgängig für Canvas-Zeichnung auf Android zu implementieren.

Hier finden Sie ein weiteres Tutorial zur Implementierung des Befehlsmusters in Java ;

    
Gunnar Karlsson 11.05.2012 23:22
quelle
4

Die beste Lösung ist, dass Sie Ihre eigene Undo / Redo-Engine implementieren.

  1. Speichern Sie in einem Array jede einzelne Aktion, die Sie in einem Array ausführen (dh. [0] Kreis in Position x1, y1, [1] Linie von x2, y2 bis x3, y3, etc)

  2. zeichne

  3. Wenn Sie die Rückgängigmachung rückgängig machen müssen, löschen Sie die Zeichenfläche und zeichnen Sie alle n - 1 Aktionen neu von [0] bis [n - 1]

  4. Wenn du mehr rückgängig machst, musst du einfach von [0] bis [n - 2] usw. malen

Ich hoffe, es gibt Ihnen einen Hinweis

Prost!

    
biquillo 07.05.2012 18:15
quelle
0

Ich denke, dass Sie in diesem Fall zwei Leinwände verwenden können. Sie wissen, wann der Benutzer mit dem Zeichnen beginnt und wann er endet. So können Sie in touch_start eine Kopie Ihres aktuellen Canvas erstellen. Wenn der Nutzer auf "Rückgängig machen" klickt, wird die aktuelle Arbeitsfläche durch die zuvor gespeicherte ersetzt.

Dies sollte garantieren, dass Sie den vorherigen Zustand des Bildes haben werden, aber ich bin mir nicht sicher über die Leistung.

    
marwinXXII 15.04.2012 21:31
quelle
0

Glücklicherweise habe ich das heute gelöst. Ich finde einen Weg, dies zu tun. Etwas wie:

%Vor%

in Aktivität.

%Vor%

in XML

%Vor%

Wenn Sie eine bessere Lösung haben, können Sie mich kontaktieren.

[hier ist mein Blog, in den ich schreibe

Ссылка

    
ethan 07.04.2016 08:28
quelle

Tags und Links