我创建了一个自定义的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)
答案 0 :(得分:4)
我已经能够显示标记,但是它们看起来是颠倒的(至少,我认为它们是,它可能只是它们的阴影位于左上角而不是右下角)。
我需要做的就是添加这一行:
this.mMarker.setBounds(0, 0, this.mMarker.getIntrinsicWidth(), this.mMarker.getIntrinsicHeight());
...以及这条线来正确定位标记(当我的ItemizedOverlay添加棕褐色叠加项时我添加了这个:
overlay.setMarker(boundCenterBottom(overlay.getMarker(0)));
答案 1 :(得分:2)
API声明标记需要显示界限......
@celestialorb你的任何一个片段都可以单独完成这项工作(或者我的工作无论如何都是这样) 当你单独使用setBounds()时,你会得到你告诉它做的...设置标记的边界框。 OverlayItem的Point的方向和Marker的阴影状态等被设置为默认值(看起来不是那些,但它们没有做我想要的......):)
mOverlay.setMarker(boundCenterBottom(mOverlay.getMarker(0)));为你做完整的工作,设置边界并使标记的底部居中于Point(因此是时尚的方法名称)。
现在,就最佳做法而言,比我更明亮的灯泡必须加入......
答案 2 :(得分:1)
尝试覆盖叠加层的onDraw()
方法。
答案 3 :(得分:1)
这是另一种方法:
GoogleMaps: custom ItemizedOverlay and OverlayItem, the correct way to show different marker
我想我更喜欢这个答案......谢谢!