Ich habe eine Leinwand, über die ich einen Pfad einstelle
%Vor%Jetzt möchte ich einen Touch-Listener für dieses Pfadobjekt einfügen.
Ich habe eine Zoom-Option für ein benutzerdefiniertes ImageView implementiert und zeichne diese Linien über einen Canvas in der onDraw-Methode dieses benutzerdefinierten ImageView. Also kann ich es nicht tun, indem ich die Koordinaten überprüfe, die der Benutzer berührt hat.
Ich weiß, dass das Pfadobjekt kein untergeordnetes Element der Sichtklasse ist und daher kann ich keinen touchListner darin implementieren. Aber das, was ich genau brauche, ist etwas wie
%Vor%Hat jemand eine Idee, wie man es implementiert? Jede Hilfe wird geschätzt.
Es gibt keine solche Sache. Der Pfad ist nur eine Datenstruktur, wie du sie verwendest (zeichnen, clip, ...) hat damit nichts zu tun. Und so sind Berührungsereignisse.
Sie müssen nur etwas Mathe mit den berührenden Koordinaten machen. Es ist eine 2D-Transformation mit einer Matrix. Sie können über diese auf Wikipedia nachlesen.
Zuerst sollten Sie den Berührungspunkt den gezoomten / verschobenen Koordinaten zuordnen, schauen Sie sich hier , hier und hier .
Ich habe es nicht getestet, aber wenn Sie eine ImageView haben, sollte diese Methode folgendes tun:
%Vor%Ich kann Ihnen nicht sagen, ob das für Sie funktionieren wird, weil ich nicht weiß, welchen Nutzen Sie mit dem Pfad haben. Ich kann nur davon ausgehen, dass Sie damit auf Ihrem Bild zeichnen. Wenn Sie vor dem Zeichnen des Pfads eine andere Transformation anwenden, sollten Sie stattdessen die auf den Pfad angewendete Transformation verwenden.
Wenn Sie diese Transformation auf Ihrer Arbeitsfläche durchführen, können Sie die Matrix wie folgt extrahieren:
%Vor%Ein anderer Weg besteht darin, die Matrixwerte in ein Array zu extrahieren und die Berechnung selbst durchzuführen:
%Vor%values[2]
und values[5]
sind die x,y
-Koordinaten der oberen linken Ecke des transformierten Elements, unabhängig vom Zoomfaktor values[0]
und values[4]
sind die Zoomfaktoren für die Breite und Höhe des transformierten Elements. Wenn Sie mit dem gleichen Faktor zoomen, sollten beide den gleichen Wert haben. Wenn Sie Ihren Berührungspunkt schließlich in das Path
-Koordinatensystem konvertiert haben, können Sie mit diese Methode, die jemand anderes bereits in den Kommentaren zu Ihrer Frage vorgeschlagen hat.
Sie sind der Einzige, der den Code, mit dem Sie arbeiten, kennt und damit, wie das Pfadkoordinatensystem in Ihrer Ansicht transformiert wird und somit der einzige ist, der es richtig zurückkonvertieren kann. Denken Sie also nicht an diese Antwort als Drop-In-Code. Ich habe dich nur in die Richtung gezeigt. Könnte hilfreich sein, ein Protokoll der Touch-Koordinaten / -Konvertierung zu drucken, um es während der Entwicklung zu debuggen.
Viel Glück.
Kannst du die onTouchEvent()
reiten?
Suchen Sie nach den Koordinaten, die Sie berührt haben, überprüfen Sie, ob die Koordinate mit Ihrem Pfad übereinstimmt., Wenn dies Ihre Funktion auslöst.
Bitte überprüfen Sie unten für Details REFERENCE
Tags und Links android android-canvas ontouchlistener