2011-01-12 106 views
2

如果用戶觸摸屏幕,我可以使用MotionEvent getX()和getY()方法獲取此觸摸的座標。Android中的屏幕和視圖座標

但是,如果我理解它正確的繪製畫布,將使用其他座標。

我的同事的意思是,這些是視圖和屏幕座標。但他不知道,如果有一些轉換方法。

也許你可以幫我。

謝謝你在前進,

穆爾

UPD

我有一點混亂。我正在使用osmdroid,他們正在繪製覆蓋作爲畫布。

所以,如果我比較畫布座標,他們正在使用MotionEvent座標繪圖我什麼都不明白。

這些是矩形的座標(左,右,下,上)16899.0/16948.0 -86483.0/-86515.0我打印出來了。

MotionEvent的座標是252.0/223.0

回答

1

他錯了。畫布不使用任何不同的東西。您只需要考慮畫布在屏幕上的位置,與用戶觸摸的位置相關。

0

如果您在畫布上的位置0,0繪製,則將在左上角繪製。所以你不必做任何特別的事情。

也許你的朋友得到了一個有點混淆屏幕/窗口位置:http://developer.android.com/reference/android/view/View.html#getLocationInWindow(INT [])

+0

我寫了一個更新我的問題 – Tima 2011-01-12 17:37:21

0

這些是矩形的座標(左,右,下,上)16899.0/16948.0 -86483.0/-86515.0我打印出來了。 MotionEvent的

座標是0/0到二百二十三分之二百五十二

貌似osmdroid是trasforming座標。這對地圖有意義,所以如果你在0,0處畫東西,你會在你的位置繪製一些東西。

我想返回的座標是地圖座標,從位置(0,0)開始,因爲圖像16899.0 + 86483.0 = 103382.0像素高,16948.0 + 86515.0 = 103463.0像素寬是10200像素的圖像,消耗了近30Tb記憶,我在懷疑一個smarphone能有這麼多的空閒內存...

因此,對於你的應用程序,我建議這樣的方法:

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

point_on_map = top + (touch*scale)