Я знаю, что есть некоторые похожие темы, которые были опубликованы, но я не смог найти хорошее решение для своей проблемы.Получите реальную позицию X/Y события onTouch
У меня есть GridView, который хранится с помощью настраиваемого ImageAdapter. Все работает нормально, но всякий раз, когда я нажимаю на изображение, содержащееся в GridView, я хотел бы переместить другое изображение в позицию щелчка. Однако координаты события, которые я принимаю с event.getX()
и event.getY()
, не соответствуют позиции щелчка.
Сначала я подумал о проблеме преобразования dp/px, и я пробовал несколько решений таким образом, но никто из них не работал. Затем я попытался использовать getXPrecision()
, но я не мог сделать рабочего решения ... Возможно, есть другой способ?
Я хотел бы сделать правильное положение программным путем, не добавляя константы int, поэтому мой проект будет работать на разных телефонах и планшетах с различными разрешениями и разрешением.
EDIT: Вот screenshot, где я щелкнул 3-ей ячейкой первой строки и установил положение карандаша с помощью getRawX() - getRawY(). Как мы видим, это не правильная позиция, я хочу, чтобы красная точка (центр изображения) была расположена там, где я нажал.
Код, используемый:
// получение позиции события onTouch:
GridView centre = (GridView) findViewById(R.id.gridView);
adapter = new ImageAdapter(this, (dim * dim), tailleCell);
centre.setAdapter(adapter);
centre.setOnTouchListener(new View.OnTouchListener() {
public boolean onTouch(View view, MotionEvent event) {
int X = (int)event.getRawX();
int Y = (int)event.getRawY();
animation(X, Y, etat);
return false;
}
});`
// запускает анимацию (и положение установки карандаша):
private void animation(int posX, int posY, int etat)
{
final ImageView img;
if(etat == 0)
{
img = (ImageView) findViewById(R.id.imageView);
}
else
{
img = (ImageView) findViewById(R.id.imageView2);
}
img.clearAnimation();
img.setVisibility(View.VISIBLE);
img.setX(posX);
img.setY(posY);
[...]
}
EDIT 2: ~ Решение:
Решение для нашей семьи Молина Родригес Де Вера не работает как e xpected, но мне удалось сделать работоспособное решение. Я только что изменил мой код в обработчик событий для регулировки положения изображения в:
int[] offset = new int[2];
centre.getLocationOnScreen(offset);
int Xoffset=offset[0];
int Yoffset = offset[1];
int X = (int)event.getRawX();
int Y = (int)event.getRawY();
animation(X-((int)Math.round(Xoffset/1.15)), Y-((int)Math.round(Yoffset/1.5)), etat);
Извините за мой плохой английский :)
Спасибо за вашу помощь!
Извините, но это не сработало, по-прежнему offset ... – Vincesname
Только вопрос. Что вы хотите сделать, так это перемещение одного из изображений в позицию щелкнутого элемента? –
Точно, я хочу получить правильный X-Y, чтобы я мог перемещать вид изображения на эту позицию. Координаты должны исходить из X и Y события click. – Vincesname