Android中的屏幕和视图坐标

时间:2011-01-12 16:54:05

标签: android view draw

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

但如果我理解绘画画布的权利,将会使用其他坐标。

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

也许你可以帮助我。

提前谢谢你,

穆尔

UPD

我有点困惑。我正在使用osmdroid,他们正在绘制叠加作为画布。

因此,如果我正在比较它们用于使用MotionEvent坐标绘图的画布坐标,我什么都不懂。

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

MotionEvent的坐标为252.0 / 223.0

3 个答案:

答案 0 :(得分:1)

他错了。 Canvas不会使用任何不同的东西。您只需考虑画布在屏幕上的位置与用户触摸的位置有关。

答案 1 :(得分:0)

如果您在画布上的位置0,0处绘制,则会在左上角绘制。所以你不需要做任何特别的事情。

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

答案 2 :(得分:0)

  

这些是矩形(左,右,下,上)的坐标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)