Подтвердить что ты не робот

MotionEvent GetY() и getX() возвращают неправильные значения

У меня следующая ситуация:

У меня есть пользовательский ListView с ImageView и TextView в строке. ImageView имеет onTouchListener, который вызывает мой метод onTouch. Вот несколько строк из него:

if (event.getAction()==MotionEvent.ACTION_MOVE) {
    layout.leftMargin = (int) event.getX() - dragIcon.getWidth()/2;         
    layout.topMargin = (int) event.getY() - dragIcon.getHeight()/2;
    //Log.d("Tag", "Pozycja: " +  event.getX() +", "+  event.getY());
}
dragIcon.setLayoutParams(layout);

Когда движение обнаружено, я показываю новое изображение (не это в ListView), и я начинаю перемещать его в соответствии с координатами x и y.

Проблема в том, что getX и getY возвращают позиции относительно ImageView в списке, а не весь ListView (я так думаю). Поэтому, когда я касаюсь элемента в середине и проведите пальцем вверх, тогда getY возвращает отрицательные значения (выше границы ImageView).

Надеюсь, я ясно объяснил.

Любые идеи о том, как получить эти координаты относительно размера экрана? Спасибо.

4b9b3361

Ответ 1

Попробуйте использовать getRawX() и getRawY() вместо getX() и getY().

Ответ 2

getX() и getY() возвращает значения, соответствующие представлениям, на которые он был вызван. следовательно Скажем,

ImageView imV = (ImageView)findViewById(R.id.image_view);

Затем вы можете получить x, y, используя

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

Здесь я предполагаю, что вы установили onTouchListener на imV.

Ответ 3

Здесь полный ответ. Это фиксирует последние 3 события во временной переменной: fooobar.com/info/11005525/...