我有一個MapView,其上有各種標記。第一次進入MapActivity時,我在標記上設置了可繪製的邊界,並且一切都很好。標記和陰影全部顯示正確。但是當我點擊另一個活動並返回時,陰影或標記不再正確綁定。有時只有一些標記受到影響。誰能告訴我這裏發生了什麼?這是一些代碼。下面是我設置上的標記繪製邊界:Android MapView標記陰影在活動恢復後移動
InputStream is = assetManager.open(imageName);
drawable = Drawable.createFromStream(is, null);
int width = drawable.getIntrinsicWidth();
int height = drawable.getIntrinsicHeight();
drawable.setBounds(-width/2, -height, width - (width/2), 0);
這裏是我如何創建/覆蓋項目添加到地圖:
GeoPoint point = createGeoPoint(lat, lon);
OverlayItem overlayItem = new OverlayItem(point, character.get_id(), "");
Drawable image = drawable;
overlayItem.setMarker(image);
itemizedOverlay.addOverlay(overlayItem);
從我所知道的,疊加層不會被重新添加到地圖中,這只是在onResume()事件之後重繪。有任何想法嗎?
更新:我實際上已經想通了,只有類型的圖像挖掘移動,它不是影子,而是移動的圖像。因此,有A型的X圖像和B型的Y圖像,並且我點擊任何類型A的圖像,當我返回到MapActivity時,類型A的所有圖像都與它們的陰影對齊,而所有類型的圖像B仍然正確對齊。
另一個更新:我輸出界限到日誌,並看到界限在返回到地圖屏幕後發生變化。當最初加入的標記物,其邊界是:
[矩形(-25,-48 - 25,1)]
但返回到地圖屏幕時,界限已經改變到:
[Rect(0,0 - 50,49)]
...爲什麼會這樣呢?
又一次更新:我有一個解決方法...但我仍然想回答爲什麼發生這種情況。解決方法是重寫draw方法,並在調用draw方法時設置邊界(到底部)。這裏是代碼:
@Override
public void draw(Canvas canvas) {
int dWidth = getIntrinsicWidth();
int dHeight = getIntrinsicHeight();
setBounds(-dWidth/2, -dHeight, dWidth/2, 0);
super.draw(canvas);
}
我相信這個問題不在上面的代碼中,如果沒有更多的信息或更多的代碼,將很難幫助你。如果問題僅出現在您觸摸某個項目後纔出現,則可能是您的onTap方法存在問題。您是否在觸摸時更改繪圖(即從正常狀態變爲選定狀態或變焦狀態)? – Luis
除了打開一項新活動外,我在onTap方法上做得並不多。我在onTap()中註釋了代碼(以及它的各個部分),除非新的活動已啓動,否則不會看到錯誤。我已經追蹤了邊界的變化,它是在離開新開始的活動並返回到地圖屏幕之後。我猜想當返回到地圖屏幕時會發生重繪,並且onTabsChange()會在tapped drawable(s)上被調用。 – broadbear
你檢查過你的簡歷方法嗎?從活動返回後,您不需要讀取標記(它們應該保留在內存中)。你在那裏做任何事情可能會混亂嗎?爲了您的信息,我已經完成了幾個從mapview調用活動的應用程序,但都沒有顯示這個問題。 – Luis