Android 获取用户触摸的真实x和y坐标
我需要将onTouch事件的X,Y坐标映射到ImageView中的位图X,Y坐标。为此,我使用以下方法 然而,这种方法似乎只在以下情况下起作用:Android 获取用户触摸的真实x和y坐标,android,bitmap,imageview,ontouchlistener,Android,Bitmap,Imageview,Ontouchlistener,我需要将onTouch事件的X,Y坐标映射到ImageView中的位图X,Y坐标。为此,我使用以下方法 然而,这种方法似乎只在以下情况下起作用: a) 完全放大图像(一直放大) b) 在任何情况下,如果我使我的应用程序全屏运行 final int index = event.getActionIndex(); touchLocation = new float[] { event.getX(index), event.getY(index) }; Matrix matr
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的高度,但这并不总是有效
奇怪的是,在全屏上,无论我是否完全放大或缩小我的图像,我都会得到正确的坐标计算,但对于任何其他活动类型,这都不会正确映射点 我无法从粘贴的代码中分辨出确切的问题是什么,但看起来您应该使用:并在计算时考虑到这一点。试试这种方法
int[] viewCoords = new int[2];
imageView.getLocationOnScreen(viewCoords);
int touchX = (int) event.getX();
int touchY = (int) event.getY();
int imageX = touchX - viewCoords[0]; // viewCoords[0] is the X coordinate
int imageY = touchY - viewCoords[1]; // viewCoords[1] is the y coordinate
您将通过这种方式获得x和y坐标覆盖onTouchEvent(MotionEvent事件),然后调用event.getX()和event.getY()以获得用户触摸的坐标位置[它们将是浮动的]。(by:@antonyt)步骤1:在应用程序中创建一个自定义的CustomFrameLayout扩展
FrameLayout
,该自定义FrameLayout可以在构造函数中获取一个接口对象。(将在步骤3中创建接口)
步骤2:写入/重写onInterceptTouchEvent方法
步骤3:制作一个接口来发送/接收所需参数
步骤4:在活动/片段中实现步骤3中创建的接口和方法
步骤5:在活动/片段中,使用implement接口创建CustomFrameLayout
的对象
步骤6:在自定义布局的重写方法中,通过接口将值传递给activity
希望这能奏效
制作一个演示会花费更长的时间,我更愿意以评论的形式发布,但仍然以答案的形式发布,以便有一天我可以使用一些示例代码进行改进。我使用此代码获得屏幕上的实际触摸轴:
PointF p = new PointF(event.getX(), event.getY());
View v = this;// your view
View root = v.getRootView();
while (v.getParent() instanceof View && v.getParent() != root) {
p.y += v.getTop();
p.x += v.getLeft();
v = (View) v.getParent();
}
希望这也适用于您请确保您的操作栏和状态高度以像素为单位,而不是以dp为单位
您还可以尝试使用getRawX()和getRawY()代替getX(),getY()您从哪里接收事件?事件是来自图像视图父级的触摸事件,还是来自图像视图本身?我认为您应该参考以下链接:。这将有助于计算正确的触摸X和Y坐标。我也遇到了这个问题。所以您从屏幕上的绝对坐标开始,需要转换为相对于图像左上角的坐标吗?@GilMoshayof事件是从onTouch侦听器接收的。@Joey没有正确映射点,似乎坐标绑定到ImageView,这填充了整个布局开始对,下面是动作条。不是我要找的。我不知道这如何帮助我获得正确的坐标。