【发布时间】:2015-07-31 17:15:25
【问题描述】:
我需要将 onTouch 事件的 X、Y 坐标映射到 ImageView 内的 Bitmap X、Y 坐标上,我使用以下方法。
但是,这种方法似乎只在以下情况下才有效:
a) 完全放大图像(一直)
b)如果我让我的应用程序全屏显示,无论如何都可以工作
final int index = event.getActionIndex();
touchLocation = new float[] {
event.getX(index), event.getY(index)
};
Matrix matrix = new Matrix();
ImageView view = getImageView();
view.getImageMatrix().invert(matrix);
matrix.postTranslate(view.getScrollX(), view.getScrollY());
matrix.mapPoints(touchLocation);
// touchLocation[0] is real x and [1] is real y
但是我的活动是一个 ActionBar 活动,所以我在 Y 轴上的位置有点错误。我尝试扣除 ActionBar 和 StatusBar 的高度,但这并不总是有效。
奇怪的是,在全屏上,我是否完全放大或缩小图像并不重要,我总是得到正确的坐标计算但是对于任何其他活动类型,这将无法正确映射点。
【问题讨论】:
-
您从哪里接收事件?事件是来自图像视图父级的触摸事件,还是来自图像视图本身?
-
我认为你应该参考这个链接:How to get actionbar height。这将有助于计算正确的触摸 X 和 Y 坐标。我也遇到过这个问题。
-
所以您从屏幕上的绝对坐标开始,需要转换为相对于图像左上角的坐标?
-
@GilMoshayof 事件是从 onTouch 监听器接收到的。
-
@Joey 没有正确映射点,似乎坐标绑定到 ImageView,它填满了整个布局,从 ActionBar 下方开始。
标签: android bitmap imageview ontouchlistener