Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/189.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android中的屏幕和视图坐标_Android_View_Draw - Fatal编程技术网

Android中的屏幕和视图坐标

Android中的屏幕和视图坐标,android,view,draw,Android,View,Draw,如果用户触摸屏幕,我可以使用MotionEvent getX()和getY()的方法获取该触摸的坐标 但若我对画布的绘制理解正确,将使用其他坐标 我同事的意思是,这些是视图和屏幕坐标。但他不知道是否有一些转换方法 也许你能帮我 提前谢谢大家, 穆尔 UPD 我有点困惑。我使用的是osmdroid,它们将覆盖层绘制为画布 所以,如果我将他们用于绘制的画布坐标与MotionEvent坐标进行比较,我什么都不懂 这些是我打印出来的矩形(左、右、下、上)16899.0/16948.0-86483.0/-

如果用户触摸屏幕,我可以使用MotionEvent getX()和getY()的方法获取该触摸的坐标

但若我对画布的绘制理解正确,将使用其他坐标

我同事的意思是,这些是视图和屏幕坐标。但他不知道是否有一些转换方法

也许你能帮我

提前谢谢大家,

穆尔

UPD

我有点困惑。我使用的是osmdroid,它们将覆盖层绘制为画布

所以,如果我将他们用于绘制的画布坐标与MotionEvent坐标进行比较,我什么都不懂

这些是我打印出来的矩形(左、右、下、上)16899.0/16948.0-86483.0/-86515.0的坐标


运动事件的坐标是252.0/223.0,他错了。画布没有使用任何不同的东西。你只需考虑画布在屏幕上的位置与用户触摸的位置有关。

< P>如果你画在画布上的位置0,0,你会画在左上角。所以你不必做任何特别的事

也许您的朋友对屏幕/窗口位置有点困惑:http://developer.android.com/reference/android/view/View.html#getLocationInWindow(int[]

这些是我打印出来的矩形(左、右、下、上)16899.0/16948.0-86483.0/-86515.0的坐标

MotionEvent的坐标为0/0至252/223

看起来osmdroid正在转换坐标。这对于地图来说是有意义的,所以如果你在0,0处画一些东西,你会在你的位置画一些东西

我假设返回的坐标是地图坐标,从位置(0,0)开始,因为一个16899.0+86483.0=103382.0像素高,16948.0+86515.0=103463.0像素宽的图像是一个10200千兆像素的图像,消耗了近30 Tb的内存,我怀疑smarphone是否可以有这么多的内存空闲

因此,对于您的应用程序,我建议采用如下方法:

touch = touch coordinates
scale = map scale
top = top left of the map

point_on_map = top + (touch*scale)