Почему getLeft() и getTop() всегда возвращают 0?

Интерфейс, диалоги, темы, стили, меню
Ответить
Вова
Сообщения: 2
Зарегистрирован: 22 мар 2016, 20:28

Почему getLeft() и getTop() всегда возвращают 0?

Сообщение Вова » 08 апр 2016, 20:59

Здравствуйте!

Задавал подобный вопрос здесь, но, видимо, не совсем корректно сформулировал.

Почему методы getLeft() и getTop() ImageView всегда возвращают 0? Мне нужно получить координаты нажатия на ImageView относительно его верхнего левого края. Абсолютные координаты прикосновения к экрану считываются без проблем, но как узнать координаты View относительно родительского layout?

Гугл вроде всё предельно понятно объясняет, но, видимо, я чего-то недопонимаю.

[syntax=java5]public class Alarm_Activity extends FragmentActivity implements View.OnTouchListener {

float x, y;
TextView tvX;
ImageView ivClock;

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.set_alarm);

tvX = (TextView) findViewById(R.id.textView);

ivClock = (ImageView) findViewById(R.id.imageView);
ivClock.setOnTouchListener(this);
}

@Override
public boolean onTouch(View v, MotionEvent event) {

if (v.getId() == R.id.imageView) {

x = event.getX();
y = event.getY();

switch (event.getAction()) {

case MotionEvent.ACTION_UP:
tvX.setText((x - v.getLeft) + ", " + (y - v.getTop));
break;
}
return true;
}
return false;
}
}[/syntax]

[syntax=xml]<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_height="match_parent">

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="New Text"
android:id="@+id/textView" />

<ImageView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/imageView"
android:src="@drawable/clock_7"
android:layout_gravity="center" />

</FrameLayout>[/syntax]

Нашёл сходный вопрос и некое решение, но не понял, как его использовать.

И второй вопрос, почему обрабатываются нажатия на любой участок экрана, почему не срабатывает условие if (v.getId() == R.id.imageView) в нижеприведённом коде?

Спасибо за внимание.

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Почему getLeft() и getTop() всегда возвращают 0?

Сообщение Foenix » 08 апр 2016, 23:09

потому , что ты вызываешь этот метод, когда еще вьюшка не прорисовалась.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Ответить