Ответ 1
Попробуйте использовать getRawX()
и getRawY()
вместо getX()
и getY()
.
У меня следующая ситуация:
У меня есть пользовательский 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).
Надеюсь, я ясно объяснил.
Любые идеи о том, как получить эти координаты относительно размера экрана? Спасибо.
Попробуйте использовать getRawX()
и getRawY()
вместо getX()
и getY()
.
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 события во временной переменной: fooobar.com/info/11005525/...