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

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

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

  • 在带有文本和图像的ListView中使用MatrixCursor和SimpleCursorAdapter
  • 如何结合OpenGL使用onSensorChanged传感器数据
  • Android图像视图matrix比例+翻译
  • 用Matrix旋转后得到新的坐标位置
  • 在Android上裁剪图像的视angular转换
  • 水平或垂直翻转位图图像
  • 调整图像尺度android上的IMAGEVIEW
  • Android - 当activity.setContentView完成渲染时是否触发了任何事件?
  • 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()。 请注意,这不会根据视图大小进行调整,因此如果应用程序不是全屏,则可能需要进行偏移。