【问题标题】:Custom OverlayItem not drawing自定义 OverlayItem 未绘制
【发布时间】:2010-08-10 20:07:58
【问题描述】:

我创建了一个自定义的 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.)

【问题讨论】:

    标签: android google-maps overlay drawable


    【解决方案1】:

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

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

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

    ...以及这条线以正确定位标记(我在 ItemizedOverlay 添加棕褐色覆盖项时添加了这个:

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

    【讨论】:

      【解决方案2】:

      API 声明标记需要显示边界...

      @celestialorb 你的任何一个 sn-ps 都可以单独完成工作(或者我的任何一个都可以使用) 当你单独使用 setBounds() 时,你会得到你告诉它做的事情......设置标记的边界框。 OverlayItem 的 Point 和 Marker 的阴影状态等的方向设置为默认值(没有查找这些,但它们没有做我想要的......):)

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

      现在,至于最佳实践,比我必须插话的更亮的灯泡...

      【讨论】:

        【解决方案3】:

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

        【讨论】:

        • 你的意思是draw(...)方法吗?这似乎太复杂了,而且解决方法太多了。文档指出,“一个项目可以通过其 OverlayItem.getMarker(int) 方法提供备用标记。如果该方法返回 null,则使用默认标记,”所以我不应该能够覆盖 getMarker 方法并拥有它绘制不同的标记?
        【解决方案4】:

        这是另一种方法:

        GoogleMaps: custom ItemizedOverlay and OverlayItem, the correct way to show different marker

        我想我更喜欢这个答案...谢谢!

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多