- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我在我的 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/
我做了一些函数,这样当你点击一个窗口时它会拖动窗口(就像你在普通窗口上拖动标题栏一样)。但是,每当我尝试拖动它时,它都会一直移动到屏幕上的坐标 0,0。 (一旦你看到代码,你就会理解标题。)我尝试了
我有几个自定义绘制的 CStatic 使用 SetWindowRgn给他们每个人一个不规则(非矩形)的形状。我需要使每个控件后面的区域无效 OnEraseBkgnd ,我想使用 CWnd::Inval
我目前大量使用这样的代码来确定控件在窗口客户区内的位置: CRect rect; GetDlgItem(IDC_CONTROL_ID)->GetWindowRect(&rect); ScreenToC
我似乎无法调用 UltimateListCtrl.ScreenToClient(pos)。我不断收到类型错误。我输入一个 (x,y) 元组,然后得到 TypeError: ScreenToClient
我在我的 android 应用程序中向用户显示了一张图片。 我希望能够分辨出他们“触摸”图像的位置。 我可以通过实现 OnTouchListener 轻松获取屏幕坐标 private OnTouch
正如MSDN所说 BOOL ScreenToClient( _In_ HWND hWnd, LPPOINT lpPoint ); ScreenToClient 的第二个 para 是指向 P
我是一名优秀的程序员,十分优秀!