触摸居中且缩放的ImageView中的坐标

时间:2013-04-19 11:32:24

标签: android touch imageview

我有一个经典的ImageView,其大小调整为适合其父级match_parent在两个轴上,scaleTypefitCenter

Screenshot

然而,我从onTouch事件中获得的坐标是相对于ImageView的边界。如何将它们转换为相对于图像本身的边界?

更新

我最终手动完成了这项工作。这是在Scala中,但可能很容易转换为Java:

// Long press on the screen adds a new interaction at that position
screenView onTouch {
  (v: View, ev: MotionEvent) => {
    // Create the image transformation matrix
    val m = screenView.getImageMatrix
    val d = screenView.getDrawable
    val drawableRect = new RectF(0, 0, d.getIntrinsicWidth, d.getIntrinsicHeight)
    val viewRect = new RectF(0, 0, screenView.getWidth, screenView.getHeight)
    m.setRectToRect(drawableRect, viewRect, Matrix.ScaleToFit.CENTER)
    m.invert(m)

    // Convert the points inside the image
    val points = Array(ev.getX, ev.getY)
    m mapPoints points

    // Compute normalized coordinates
    current_x = points(0) / d.getIntrinsicWidth
    current_y = points(1) / d.getIntrinsicHeight

    // Only continue if we touched inside the image
    !(current_x >= 0 && current_x <= 1 &&
      current_y >= 0 && current_y <= 1)
  }
}

1 个答案:

答案 0 :(得分:0)

你可以用数学方法计算它。

计算身高与身高之比图像的宽度,然后计算显示的图像的实际宽度。

从图像视图的宽度中减去图像的实际宽度,并除以2。

这将为您提供图像左侧灰色区域的宽度。只需从您获得的X坐标中减去此数字,您就可以从实际图像中获得相对X位置。