2012-11-08 81 views
0

當我在我的Android 2.2手機上使用ItemizedOverlay將引腳放置在MapView中時,位置是正確的,但是當我在4.0和4.1手機上使用它時,放置是錯誤的。該針腳放置在地圖的下方,但具有相同的x座標。MapView座標錯誤

我發現4.XX設備上MapView左上角的像素值不是(0.0),因爲它在我的2.2設備上。我可以看到不同之處在於操作欄的高度(如圖中突出顯示的高度),並找到了一些代碼來獲取它的高度。現在,放置引腳時,我從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

我解決了這個問題,但它不是最漂亮的解決方案。

我檢查操作欄的大小。如果存在,我運行問題中顯示的代碼。如果大小返回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。該代碼展示瞭如何在地圖上獲取引腳,如何移動它們,以及如何在屏幕像素之間進行轉換以及如何在緯線/經緯度上繪製地圖,這些都在200行左右。