2012-11-08 2 views
0

Android 2.2 휴대 전화에서 ItemizedOverlay를 사용하여 MapView에 핀을 배치하면 배치가 올바르지 만 4.0 및 4.1 휴대 전화에서 배치를 수행하면 배치가 잘못됩니다. 핀은지도에서 더 아래쪽에 있지만 동일한 x 좌표로 배치됩니다.MapView 좌표가 잘못됨

내 2.2 장치에서와 같이 4.XX 장치에서 MapView의 왼쪽 위 모서리의 픽셀 값이 (0.0)이 아니라는 것을 알았습니다. 차이점은 액션 막대의 높이 (이미지에서 강조 표시된 것과 같음)를 볼 수 있었고 높이를 얻으려면 코드를 찾았습니다. 이제, 핀을 배치 할 때 MapView의 y 좌표에서 작업 표시 줄의 높이를 뺍니다. 내 4.XX 장치에서 올바른 결과를 얻을 수 있지만 이제 2.2 장치에서 배치가 잘못되었습니다.

내 화면 상단에 추가 기능이 있지만 높이는 모든 기기에서 동일합니다.

모든 기기의 MapView에서 올바른 좌표를 얻으려면 어떻게해야합니까?

내가 사용하는 코드였다 : 다음, 당신을 당신이 여기에 대한거야,하지만 당신은지도에 핀을 넣어하려는 경우 정확히 확인

final WindowManager w = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); 
final Display d = w.getDefaultDisplay(); 
final DisplayMetrics m = new DisplayMetrics(); 
d.getMetrics(m); 
int totalHeight =mapView.getLayoutParams().height; 
int statusbarHeight = totalHeight - mapView.getMeasuredHeight(); 

Example of action bar

답변

0

나는이 문제를 해결했지만 가장 좋은 해결책은 아니다.

조치 표시 줄의 크기를 확인합니다. 존재하는 경우 질문에 표시된 코드를 실행합니다. size가 null을 반환하면 액션 바가 존재하지 않는다는 것을 의미하므로 코드를 실행하지 않습니다.

코드는 다음과 같습니다

// Check if an action bar exist (Android 4.XX) 
private void getActionBarHeight() { 
    // TODO Auto-generated method stub 
    final WindowManager w = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); 
    final Display d = w.getDefaultDisplay(); 
    final DisplayMetrics m = new DisplayMetrics(); 
    d.getMetrics(m); 
    actionBarHeight = m.heightPixels; 

    try { // If the action bar exist 
     TypedValue tv = new TypedValue(); 
     context.getTheme().resolveAttribute(android.R.attr.actionBarSize, tv, true); 
     getResources().getDimensionPixelSize(tv.resourceId); 
    } catch (Exception e) { // If it doesn't exist 
     actionBarHeight = -1; 
    } 
} 
1

하지 않음 ItemizedOverlay을 사용해야하는데, 이는 화면 좌표가 아닌지도의 위도/경도 좌표를 필요로합니다.

사용 예제 here이 있습니다. 이 코드는지도에 핀을 가져 오는 방법, 이동하는 방법, 화면 픽셀과 lat/lon지도를 서로 연결하는 방법을 200 줄 내외로 보여줍니다.