我创建了一个自定义的overlayitem类,这样我就可以拥有一种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类来对应我的数据的每个状态?(电子战)

最佳答案

我已经能够使标记出现,但是它们看起来是颠倒的(至少,我认为它们是,可能只是它们的阴影在左上角而不是右下角)。
我只需要加上这一行:

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

…以及这一行以正确定位标记(我在itemizedoverlay添加tan覆盖项时添加了此项:
overlay.setMarker(boundCenterBottom(overlay.getMarker(0)));

08-16 14:56