Android:如果图像视图按矩阵缩放,如何在ImageView上检测触摸位置?

Android:如果图像视图按矩阵缩放,如何在ImageView上检测触摸位置?,android,matrix,touch,imageview,scale,Android,Matrix,Touch,Imageview,Scale,我设置了ImageView的OnTouchListener,并实现了onTouch方法,但是如果使用矩阵缩放图像,我如何计算触摸的位置 或者,当返回getX()和getY()时,运动事件是否会自动考虑这一点?尝试使用getRawX()和getRawY()。请注意,这不会根据视图的大小进行调整,因此如果应用程序不是全屏的,您可能必须进行偏移。getX和getY将返回ImageView坐标系中的触摸位置。如果要查找图像坐标系中的点,可以使用ImageView使用的矩阵的逆矩阵。我做了如下工作: //

我设置了ImageView的
OnTouchListener
,并实现了
onTouch
方法,但是如果使用矩阵缩放图像,我如何计算触摸的位置


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

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

getX
getY
将返回ImageView坐标系中的触摸位置。如果要查找图像坐标系中的点,可以使用ImageView使用的矩阵的逆矩阵。我做了如下工作:

// 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文件夹中只有图像,则还必须将点除以密度,以找到图像上的真实点:

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;