setimageresource - Android: ¿cómo detectar la ubicación táctil en ImageView si la vista de la imagen se escala por matriz?
setimagedrawable (3)
Intente usar getRawX () y getRawY (). Tenga en cuenta que esto no está ajustado para el tamaño de la vista, por lo que es posible que tenga que compensar si la aplicación no está en pantalla completa.
Configuré OnTouchListener
de un ImageView e implementé el método onTouch
, pero si la imagen se escala con una matriz, ¿cómo calculo la ubicación del toque?
¿O el evento de movimiento lo tiene en cuenta automáticamente al devolver getX()
y getY()
?
La respuesta de Zorgbargle es correcta, pero hay otra consideración al cargar imágenes desde la carpeta de recursos y esa es la densidad del dispositivo.
Las imágenes de la escala de Android se basan en la densidad del dispositivo, por lo que si solo tiene la imagen en la carpeta mdpi , también debe dividir los puntos por la densidad para encontrar el punto real en la imagen:
float[] point = new float[] {event.getX(), event.getY()};
Matrix inverse = new Matrix();
imageView.getImageMatrix().invert(inverse);
inverse.mapPoints(point);
float density = getResources().getDisplayMetrics().density;
point[0] /= density;
point[1] /= density;
getX
y getY
devolverán la ubicación táctil en el sistema de coordenadas de ImageView. Si está buscando el punto dentro del sistema de coordenadas de la imagen, puede usar la matriz inversa de la matriz utilizada por ImageView. He hecho algo como lo siguiente:
// calculate inverse matrix
Matrix inverse = new Matrix();
imageView.getImageMatrix().invert(inverse);
// map touch point from ImageView to image
float[] touchPoint = new float[] {event.getX(), event.getY()};
inverse.mapPoints(touchPoint);
// touchPoint now contains x and y in image''s coordinate system