Warum stellen getX, getY, setX und setY von ImageView nicht den tatsächlichen Wert im relativen Layout dar?

Ich versuche, eine einfache App zu erstellen, um besser zu verstehen, wie Touch-Ereignisse auf Android verwendet werden. Im Moment bewegt meine Aktivität eine ImageView nur zu den Koordinaten der Berührung auf dem Bildschirm (den MotionEvent-Koordinaten). Ich könnte dies erreichen, indem ich einen einfachen Trick verwende, um die neue Position des Bildes auf einen Wert zu setzen, der aus den Berührungskoordinaten relativ zur Position des Bildes besteht (getX() undgetY()). Dasdx unddy Variablen sind dafür verantwortlich, diese relativen Werte zu speichern, damit die Berührung im Bild konstant bleibt.

Jetzt möchte ich 2 ImageViews in die Aktivität einfügen und nur zwei feste Punkte für ImageViews haben. Wenn der Benutzer ein ImageView über das Zentrum des anderen ImageView zieht, wechseln die beiden Bilder die Position. Um dies korrekt auszuführen, möchte ich die tatsächlichen Koordinaten erhalten der Bildmitte. Ich habe die Teile des Codes kommentiert, mit denen das Problem behoben werden kann. Wie Sie in der sehen könnenerstes Bild Wenn die Ansicht erstellt wird, sind die Bildkoordinaten einfach(0, 0), egal wo es ist (solange die Ausgangsposition als Layoutparameter definiert ist wieCENTER_IN_PARENT).

Wie Sie in der sehen könnenzweites Bild und soweit ich ImageView's beobachtet habegetX() undgetY() Geben Sie die Koordinate so zurück, als befände sich die linke obere Ecke des Bildes in der linken oberen Ecke des DISPLAYs, wenn sich das Bild in der linken oberen Ecke des AKTIVITÄTSFENSTERS befindet.

Ich würde gerne verstehen, warum das passiert, und wenn jemand weiß, wie er die Koordinaten von ImageView ermittelt, die direkt mit den Koordinaten von MotionEvent verglichen werden können.

Bilder:

ERSTES BILD

ZWEITES BILD

Antworten auf die Frage(1)

Ihre Antwort auf die Frage