multitouch - gesture in android
MotionEvent GetY() y getX() devuelven valores incorrectos (3)
Aquí está la respuesta completa. Esto captura los últimos 3 eventos en una variable temporal: https://stackoverflow.com/a/54438485/1931228
Tengo la siguiente situación:
Tengo un ListView personalizado con ImageView y TextView en una fila. El ImageView tiene un onTouchListener, que invoca mi método onTouch. Aquí hay algunas líneas de él:
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);
Cuando se detecta movimiento, estoy mostrando una nueva imagen (no esta en ListView) y estoy empezando a moverla de acuerdo con las coordenadas x e y.
El problema es que getX y getY devuelven las posiciones relativas a ImageView en la lista, no todo ListView (creo que sí). Así que cuando toco un elemento en el medio y deslizo el dedo hacia arriba, entonces getY devuelve valores negativos (sobre el límite de ImageView).
Espero, les expliqué con claridad.
¿Alguna idea de cómo obtener estas coordenadas en relación con el tamaño de la pantalla? Gracias.
Intente usar getRawX()
y getRawY()
lugar de getX()
y getY()
.
getX () y getY () devuelven los valores respectivos a las vistas en las que se llamó. Por lo tanto digamos,
ImageView imV = (ImageView)findViewById(R.id.image_view);
Entonces puedes obtener x, y usando
x = imV.getX() + event.getX();
y = imV.getY() + event.getY();
Aquí supongo que ha configurado onTouchListener en imV.