Beim Löschen eines gedrehten Bilds in Android wird der korrekte Pfad nicht gelöscht

8

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:

  1. Ein Bild in einem bestimmten Grad drehen.
  2. Löschen Sie dann das Bild.

Wir haben den folgenden Fehler gefunden:

  1. Als wir versuchten, das gedrehte Bild zu löschen, spiegelte der gelöschte Pfad nicht den Pfad wider, den unser Finger auf dem Bildschirm verfolgte.

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:

  1. Aufgrund des gedrehten Bildes wird die Absolutionsposition für x und y geändert. Daher spiegelt der Pfad nicht den richtigen Pfad durch die Berührungsrouten wider.

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%     
Heru S 30.05.2016, 10:15
quelle

2 Antworten

4

Sie müssen die Rotationsmatrix auf Ihre Koordinaten anwenden. Hier ist Theta der Winkel, um den das Bild gedreht wird.

Bildquelle wikipedia

Im Code wird es so ähnlich sein

%Vor%     
Muddassir Ahmed 06.06.2016, 04:41
quelle
2

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.

    
Kaamel 09.06.2016 17:41
quelle

Tags und Links