自定义OverlayItem不绘制

我创build了一个自定义OverlayItem类,这样我就可以拥有一种OverlayItem,它的Drawable标记将根据我传入的一些数据的状态进行设置。

我试图完成这个,我第一次尝试,利用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)。

Solutions Collecting From Web of "自定义OverlayItem不绘制"

我已经能够使标记出现,但是它们看起来是颠倒的(至less我认为它们可能只是它们的影子在左上方而不是在右下方)。

我所需要做的就是添加这一行:

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

…以及这条线来正确定位标记(我添加这个时,我的ItemizedOverlay添加棕褐色覆盖项目:

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

API指出标记需要显示边界…

@celestialorb当你单独使用setBounds()时,你会得到你要做的事情…你的标记的边界框被设置。 标记的OverlayItem的Point和Shadow状态的方向等被设置为默认(没有看那些,但他们不做我想要的…):)

mOverlay.setMarker(boundCenterBottom(mOverlay.getMarker(0))); 为您完成全部工作,设置边界并将标记的底部放在该点上(因此是时尚的方法名称)。

现在,至于最佳做法,比我更亮的灯泡将在…

尝试覆盖overlay类的onDraw()方法。

这是另一种方法:

GoogleMaps:自定义的ItemizedOverlay和OverlayItem,显示不同标记的正确方法

我想我喜欢这个答案,虽然…谢谢!