Android: how to detect touch location on ImageView if the image view is scaled by matrix?
getX
and getY
will return the touch location in the ImageView's coordinate system. If you're looking for the point within the image's coordinate system, you can use the inverse matrix of the matrix used by the ImageView. I've done something like the following:
// calculate inverse matrixMatrix inverse = new Matrix();imageView.getImageMatrix().invert(inverse);// map touch point from ImageView to imagefloat[] touchPoint = new float[] {event.getX(), event.getY()};inverse.mapPoints(touchPoint);// touchPoint now contains x and y in image's coordinate system
Zorgbargle answer is right but there is another consideration when your loading images from resource folder and that's density of the device.
Android scale images base on the device density so you if you only have the image in mdpi folder, you must also divide the points by the density to find the real point on the image:
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;