Android:如何检测ImageView上的触摸位置,如果图像视图是由matrix缩放?

我设置了一个ImageView的onTouch并实现onTouch方法,但是如果使用matrix缩放图像,我该如何计算触摸的位置?

或者,运动事件在返回getX()getY()时会自动考虑到这一点?

Solutions Collecting From Web of "Android:如何检测ImageView上的触摸位置,如果图像视图是由matrix缩放?"

getXgetY将返回ImageView坐标系中的触摸位置。 如果您正在寻找图像坐标系中的点,则可以使用ImageView使用的matrix的逆matrix。 我做了如下的事情:

 // 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 

Zorgbargle的答案是正确的,但是当你从资源文件夹加载图像时,还有另一个考虑因素,那就是设备的密度。

Android根据设备密度缩放图像,所以如果您只有mdpi文件夹中的图像 ,则还必须按密度划分点以在图像上find实际点:

 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; 

尝试使用getRawX()和getRawY()。 请注意,这不会根据视图大小进行调整,因此如果应用程序不是全屏,则可能需要进行偏移。