Es gibt nicht so etwas. Der Pfad ist nur eine Datenstruktur, wie Sie sie verwenden (zeichnen, clip, ...) hat damit nichts zu tun. Und so sind Berührungsereignisse.
Sie müssen nur etwas Mathe mit den berührenden Koordinaten tun. Es ist eine 2D-Transformation mit einer Matrix. Sie können darüber lesen on wikipedia.
Zuerst sollten Sie den Berührungspunkt den gezoomten/geschwenkten Koordinaten zuordnen, siehe here, here und here10.
ich nicht getestet haben, aber wenn Sie ein Image diese Methode tun soll:
final float[] getPointerCoords(ImageView view, MotionEvent e)
{
final int index = e.getActionIndex();
final float[] coords = new float[] { e.getX(index), e.getY(index) };
Matrix matrix = new Matrix();
// invert compute the inverse transformation matrix
view.getImageMatrix().invert(matrix);
// this adjust the panning
matrix.postTranslate(view.getScrollX(), view.getScrollY());
// this apply the inverse transformation to your touch points
// which should give you the coordinates on your imageview
matrix.mapPoints(coords);
return coords;
}
Ich kann Ihnen nicht sagen, ob dies für Sie aus dem Kasten heraus arbeiten, weil ich weiß nicht, was die Verwendung von dem Pfad, den du hast, kann ich nur annehmen, dass du ihn benutzt, um über dein Bild zu 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 der Leinwand tun können Sie die Matrix wie folgt extrahieren:
Matrix matrix = canvas.getMatrix()
Ein anderer Weg ist, um die Matrixwerte in ein Array zu extrahieren und tun, um die Berechnung selbst:
// Get the values of the matrix
// create this array in a field an reuse it for performances
float[] values = new float[9];
matrix.getValues(values);
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 schließlich Ihren Berührungspunkt in die Path
Koordinatensystem umgewandelt Sie überprüfen können, ob es sonst schon in den Kommentaren der Frage vorgeschlagen in dem Pfad mit this Methode jemand ist.
if (path.contains(coordX, coordY)) {
// inside
} else {
// outside
}
Sie sind der einzige, den Code zu kennen Sie mit und so arbeiten, wie der Pfad Koordinatensystem in der Ansicht transformiert wird und damit die einzige Person, die wissen kann, wie man richtig zurück zu konvertieren. Denken Sie also nicht an diese Antwort als Drop-In-Code. Ich habe dich nur in die Richtung gezeigt. Es kann hilfreich sein, ein Protokoll der Touch-Koordinaten/-Konvertierung zu drucken, um es während der Entwicklung zu debuggen.
Viel Glück.
Überprüfen Sie bitte unter: http://StackOverflow.com/Questions/9588003/android-how-to-check-if-a-path-contains-touched-point –
@DucNguyen Das tut nicht meine Notwendigkeit :( –
Es scheint sicherlich, dass Ducs Link die Basis für die Lösung ist – CommonsWare