gpt4 book ai didi

java - 获取相对于 View 的触摸坐标(ScreenToClient 等效?)

转载 作者:IT老高 更新时间:2023-10-28 21:04:27 24 4
gpt4 key购买 nike

我在我的 android 应用程序中向用户显示了一张图片。

我希望能够分辨出他们“触摸”图像的位置。

我可以通过实现 OnTouchListener 轻松获取屏幕坐标

 private OnTouchListener image_Listener = new OnTouchListener(){
@Override
public boolean onTouch(View v, MotionEvent event) {
if(event.getAction() == MotionEvent.ACTION_UP) {
float x = event.getX();
float y = event.getY();
return true;
}
return false;
}
};

但是,这些是绝对坐标。我真正需要的是将其转换为相对于 View 的坐标的函数..

我已经进行了一些挖掘,但除了我自己尝试实现 ScreenToClient 方法之外,我似乎无法找到任何东西..

有没有人知道解决这个问题的好方法,还是我只能自己动手?

这似乎是一种可用的方法 - 这就是我要问的原因。

感谢大家的宝贵时间。

编辑:我不太确定坐标是否已经相对于 View 。我本可以发誓阅读坐标是绝对的,但经过一些修补后 - 我的工作按预期工作.. 对不起,噪音家伙。

最佳答案

只是为了回答,触摸在某种程度上与 View 相关。是的,它们是触摸的原始屏幕坐标。但是,由于您将触摸事件注册到 View 本身,它只会在用户实际触摸 View 时触发。这意味着,即使屏幕坐标是原始屏幕坐标,它们也在 View 本身的范围内。

如果你想获得被触摸 View 的 x/y 坐标,那么你可以用屏幕坐标减去左坐标和 y 坐标的顶部坐标,如下所示:

private OnTouchListener image_Listener = new OnTouchListener(){
@Override
public boolean onTouch(View v, MotionEvent event) {
if(event.getAction() == MotionEvent.ACTION_UP) {
float screenX = event.getX();
float screenY = event.getY();
float viewX = screenX - v.getLeft();
float viewY = screenY - v.getTop();
return true;
}
return false;
}
};

这样,如果用户在屏幕下方触摸了 40 x 像素,但左边距设置为 10,那么 viewX 将为 30。如果您将 View 向下移动 40 x 像素并且用户触摸了 View 中的同一个点,它仍然是 30。

如果您在 View 中包含填充作为填充,即使它不显示任何内容,它仍然会被视为 View 。

编辑:

我应该指出,皮埃尔所说的是真的。如果您触摸一个 View ,那么即使您将手指拖到 View 边界之外,它也会继续接收触摸事件,直到手指被抬起。这意味着,ACTION_UP 可以为您的 View 接收不在边界内的触摸坐标。

关于java - 获取相对于 View 的触摸坐标(ScreenToClient 等效?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8451808/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com