Как правильно расположить элемент при касании экрана?
Когда я нажимаю на экран, я получаю координаты нажатия, после чего, хочу переместить туда свой TextView, но почему-то он перемещается крайне странно
При нажатии в то место, которое я отметил точкой, надпись у меня перемещается немного в неправильное место, хотя координаты правильные
- x - показывает, ось x, куда я нажал пальцем
- y - показывает, ось y, куда я нажал пальцем
- text_x - показывает, ось x, где находится textview
- text_y - показывает, ось y, где находится textview
- Final text x - показывает, ось x, куда "по итогу" переместился TextView
- 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 шт):
Неправильно, неправильно... а как надо то?
MotionEvent.getRawX() даёт координаты относительно верхнего левого угла экрана
View.setX(x) задаёт позицию вью относительно контейнера, в котором эта вью расположена.
Вывод: нужно учитывать позицию контейнера относительно экрана, либо вешать слушатель на сам контейнер и брать координаты методами getX(), getY()

