2010-08-10 35 views
9

我創建了一個自定義OverlayItem類,以便我基本上可以擁有一種OverlayItem,其Drawable標記將根據我傳入的某些數據的狀態自行設置。自定義OverlayItem沒有繪製

我試圖通過在我的第一次嘗試中使用OverlayItem類中的setMarker方法來完成此操作。一旦沒有工作,我試圖覆蓋getMarker方法,並讓它返回相應的標記來表示數據。

這些嘗試都沒有在地圖上繪製,但如果它們被註釋掉,標記繪製得很好(除非它們當然使用默認標記,這不是我想要的)。

這裏是我的我的自定義OverlayItem類代碼(註釋掉的方法我都試過,他們沒有工作):

private class MyOverlayItem extends OverlayItem { 
    private Context mContext; 
    private MyData mData; 

    public MyOverlayItem(GeoPoint point, MyData data, Context context) { 
     super(point, data.getWhat(), data.getWhere()); 
     this.mContext = context; 
     this.mData = data; 

     /*if(data.getTemp() > 200) 
      this.setMarker(res.getDrawable(R.drawable.icon_data_hot_l)); 
     else if(data.getTemp() > 100) 
      this.setMarker(res.getDrawable(R.drawable.icon_data_neutral_l)); 
     else 
      this.setMarker(res.getDrawable(R.drawable.icon_data_frozen_l));*/ 
    } 

    /*@Override 
    public Drawable getMarker(int stateBitset) { 
     Resources res = this.mContext.getResources(); 
     if(this.mData.getTemp() > 200) 
      return res.getDrawable(R.drawable.icon_data_hot_l); 
     else if(this.mData.getTemp() > 100) 
      return res.getDrawable(R.drawable.icon_data_neutral_l); 
     return res.getDrawable(R.drawable.icon_data_frozen_l); 
    }*/ 
} 

有沒有辦法做什麼,我試圖做...或者是否需要爲我的數據的每個狀態創建一個唯一的OverlayItem類? (Ew。)

回答

4

我已經能夠使標記出現,但它們看起來是顛倒的(至少,我認爲它們可能只是它們的影子位於左上方而不是右下方) 。

所有我需要做的就是加入這一行:

this.mMarker.setBounds(0, 0, this.mMarker.getIntrinsicWidth(), this.mMarker.getIntrinsicHeight()); 

...以及此行方向正確標記(我加了這個時候,我ItemizedOverlay增加了棕褐色覆蓋項:

overlay.setMarker(boundCenterBottom(overlay.getMarker(0))); 
1

嘗試覆蓋覆蓋類的onDraw()方法。

+1

你的意思是繪製(...)方法?這看起來好像太複雜了,太多的解決方法。 該文檔指出,「一個項目可以通過其OverlayItem.getMarker(int)方法提供替代標記,如果該方法返回null,則使用默認標記」,所以我不能覆蓋getMarker方法並讓它畫出不同的標記? – celestialorb 2010-08-10 20:45:22

2

的API狀態的標記需要範圍要顯示...

@celestialorb無論你的片段中的一個單獨做工作(或礦用兩種工作反正) 當你單獨使用setBounds()時,你會得到你所要做的事......設置標記的邊界框。標記的OverlayItem的點狀和陰影狀態的方向等被設置爲默認狀態(沒有看到它們,但它們沒有做我想做的...):)

mOverlay.setMarker(boundCenterBottom (mOverlay.getMarker(0)));爲您完成全部工作,設置邊界並將標記的底部放在該點上(因此是時尚的方法名稱)。現在

,作爲最佳實踐,更亮的燈泡比我將不得不附和......