Как правильно расположить элемент при касании экрана?

Когда я нажимаю на экран, я получаю координаты нажатия, после чего, хочу переместить туда свой TextView, но почему-то он перемещается крайне странно

введите сюда описание изображения

При нажатии в то место, которое я отметил точкой, надпись у меня перемещается немного в неправильное место, хотя координаты правильные

введите сюда описание изображения

  1. x - показывает, ось x, куда я нажал пальцем
  2. y - показывает, ось y, куда я нажал пальцем
  3. text_x - показывает, ось x, где находится textview
  4. text_y - показывает, ось y, где находится textview
  5. Final text x - показывает, ось x, куда "по итогу" переместился TextView
  6. Final text y - показывает, ось y, куда "по итогу" переместился TextView

Вот main_activity.xml

<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/constraintlay"
android:clipChildren="false"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    
    android:id="@+id/rel"
    >

    <TextView
        android:clipChildren="false"
        android:id="@+id/movingText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentStart="false"
        android:layout_alignParentTop="false"
        android:layout_alignParentEnd="false"
        android:layout_alignParentBottom="false"
        android:gravity="center"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"

        android:onClick="stopAction"
        android:text="HELLO"
        android:textSize="17sp" />
</RelativeLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

И сам java код

    @Override
public boolean onTouchEvent(MotionEvent event)
{

    float x =  event.getRawX();
    float y =  event.getRawY();

    Log.e("x", String.valueOf(x));
    Log.e("y", String.valueOf(y));
    Log.e("text x", String.valueOf(textView.getX()));
    Log.e("text y", String.valueOf(textView.getY()));


    textView.setX(x);
    textView.setY(y);

Ответы (1 шт):

Автор решения: woesss

Неправильно, неправильно... а как надо то?
MotionEvent.getRawX() даёт координаты относительно верхнего левого угла экрана
View.setX(x) задаёт позицию вью относительно контейнера, в котором эта вью расположена.
Вывод: нужно учитывать позицию контейнера относительно экрана, либо вешать слушатель на сам контейнер и брать координаты методами getX(), getY()

→ Ссылка