2011-01-12 5 views
2

사용자가 화면을 터치하면 MotionEvent getX() 및 getY() 메서드를 사용하여이 터치 좌표를 얻을 수 있습니다.안드로이드의 화면과 뷰 좌표

하지만 캔버스 그리기에 대해 올바르게 이해한다면 다른 좌표가 사용됩니다.

동료가 의미하는 것은 화면 및 화면 좌표입니다. 그러나 그는 변형 방법이 있는지 알지 못했습니다.

어쩌면 나를 도울 수 있습니다.

사전에

뮤르 감사

나는 약간의 혼란이있어

UPD. osmdroid를 사용하고 있습니다. 캔버스로 오버레이를 그리는 중입니다.

그래서 내가 모션 이벤트 좌표로 그리기 위해 사용하는 캔버스 좌표를 비교할 때 아무 것도 이해하지 못합니다.

이들은 사각형의 좌표 (왼쪽, 오른쪽, 아래쪽, 위쪽) 16899.0/16948.0 -86483.0/-86515.0입니다.

MotionEvent의 좌표는 252.0/223.0

답변

1

입니다. Canvas는 다른 것을 사용하지 않습니다. 사용자가 터치 한 위치와 관련하여 화면에서 캔버스의 위치를 ​​고려해야합니다.

0

캔버스에서 위치 0,0에 그릴 경우 왼쪽 상단에 그려집니다. 따라서 특별한 일을 할 필요가 없습니다.

은 아마 친구가 화면/창 위치와 약간 혼란 가지고있다 : http://developer.android.com/reference/android/view/View.html#getLocationInWindow (INT [])

+0

내 질문에 업데이 트를 썼다 : 메모리, I는

그래서 앱이 같은 접근 방식이 제안하는 것은 .... smarphone 무료 메모리 등을 많이 가질 수 있다는 의심이다 – Tima

0

이것들은 직사각형의 좌표입니다 (왼쪽, 오른쪽, 아래, 위) 16899.0/16948.0 -86483.0/-86515.0 제가 인쇄했습니다. MotionEvent의

좌표 osmdroid 좌표를 trasforming처럼

보이는 0/0 252분의 223한다. 이것은지도에 의미가 있습니다. 따라서 0,0에 무엇인가를 그리면 당신은 당신의 위치에 무언가를 그릴 것입니다.

반환 좌표는 위치 (0,0)에서 시작하여지도 좌표라고 가정합니다. 이미지 16899.0 + 86483.0 = 103382.0 픽셀 높이와 16948.0 + 86515.0 = 103463.0 픽셀 너비는 10200 기가 픽셀의 이미지로 거의 30 Tb

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

point_on_map = top + (touch*scale)