Wir bauen eine Android-Anwendung, die Bildbearbeitung beinhaltet. Einige der Funktionen umfassen das Drehen eines Bildes und das Löschen eines Teils des Bildes.
Wir verwenden die folgende Bibliothek: Ссылка
Wir haben erfolgreich eine Funktion zum Drehen und Löschen des Bildes erstellt. Als wir jedoch versuchten, die folgenden Aktionen auszuführen:
Wir haben den folgenden Fehler gefunden:
Im obigen Bild ist die gelbe Linie die tatsächliche Bewegung des Fingers (senkrecht nach unten über den Aufkleber). Aber der resultierende gelöschte Pfad wurde als diagonal gefunden.
Dieses Problem tritt nur auf, wenn das Bild gedreht wird. Es existiert nicht, wenn das Bild nicht gedreht wird.
Nach weiterem Debuggen haben wir einige Annahmen von den obigen Problemen:
Wie können wir sicherstellen, dass der Pfad immer noch auf den richtigen Pfad verweist, den der Finger berührt, selbst nachdem er gedreht wurde?
Hier ist der Code, den wir in unserer Klasse StickerView.java
haben, der die Klasse ImageView
erweitert.
onTouchEvent
%Vor%onDraw
%Vor%getAbsolutePosition-Funktion
%Vor%Sie drehen die gesamte Ansicht in der onDraw-Methode. Nicht nur das wirkt sich auf die Leistung aus (Sie wiederholen jedes Mal die gleiche Umwandlung), es beeinflusst das Ergebnis, wie Sie es bemerkt haben, da es alles in der Ansicht dreht, einschließlich der Pfade.
Wenn Sie dies aus irgendeinem Grund tun müssen (nicht empfohlen), müssen Sie die Pfade in der entgegengesetzten Richtung um den gleichen Betrag drehen. Ich schlage vor, dass Sie das nicht tun. Versuchen Sie stattdessen, einen Weg zu finden, den Hintergrund innerhalb von onDraw zu drehen. Wenn beispielsweise der Hintergrund gedreht wird, können Sie einen neuen Hintergrund (außerhalb der Methode "onDraw") erstellen und diesen Hintergrund in der Methode "onDraw" verwenden.