我有一个经典的ImageView
,其大小调整为适合其父级match_parent
在两个轴上,scaleType
为fitCenter
。
然而,我从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)
}
}
答案 0 :(得分:0)
你可以用数学方法计算它。
计算身高与身高之比图像的宽度,然后计算显示的图像的实际宽度。
从图像视图的宽度中减去图像的实际宽度,并除以2。
这将为您提供图像左侧灰色区域的宽度。只需从您获得的X坐标中减去此数字,您就可以从实际图像中获得相对X位置。