MotionEvent GetY () и getX () возвращают неверные значения - PullRequest
17 голосов
/ 04 июня 2011

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

У меня есть собственный 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).

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

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

Ответы [ 3 ]

48 голосов
/ 04 июня 2011

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

4 голосов
/ 06 апреля 2017

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

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

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

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

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

0 голосов
/ 30 января 2019

Вот полный ответ.Это фиксирует последние 3 события во временной переменной: https://stackoverflow.com/a/54438485/1931228

...