Android中百度地图的使用方法之覆盖物功能(一)

地图的主要用法:

①图层展示。普通图、卫星图及交通流量图

②定位

③自定义绘制点、线等几何图形

④覆盖物功能

⑤离线地图

POI搜索

⑦地理编码

⑧路径规划

⑨公交路线查询

扫描二维码关注公众号,回复: 1946257 查看本文章

覆盖物功能

覆盖物功能:Overlay

OverlayMarkerInfoWindow的结合使用

1.InfoWindow

(1)作用:在地图中显示一个信息窗口

(2)构造方法:

public InfoWindow(View var1LatLng var2InfoWindow.OnInfoWindowClickListener var3) {
    if(var1 != null && var2 != null) {
        this.b = var1;
        this.c = var2;
        this.d = var3;
    else {
        throw new IllegalArgumentException("view and position can not be null");
    }
}

public InfoWindow(BitmapDescriptor var1LatLng var2InfoWindow.OnInfoWindowClickListener var3) {
    if(var1 != null && var2 != null) {
        this.a = var1;
        this.c = var2;
        this.d = var3;
    else {
        throw new IllegalArgumentException("bitmapDescriptor and position can not be null");
    }
}

虽然其中有一个View对象类型的参数,但是用inflate加载到里面我们自定义的布局文件时,它屏蔽了所有的布局样式,只加载布局中的文字。而且,布局中的任何点击事件都没有响应,这是一个大坑,以后要注意,(网页版的可以)但也有另一种解决方法,就是下面的。

2.AndroidsetTag()/getTag

(1)作用:View中的setTag(Onbect)表示给View添加一个格外的数据,以后可以用getTag()将这个数据取出来。

(2)好处:绑定数据,特别是绑定数据到view。而且可以用getTag()取得,很方便,而且是任意类型的数据

/**
 * 根据info信息在布局上的控件上布置
 */
private void popupInfo(LinearLayout mMarkerLyBridgeInfo info){

    ViewHolder viewHolder = null;
    if (mMarkerLy.getTag() == null)
    {
        viewHolder = new ViewHolder();

        viewHolder.infoName = (TextView) mMarkerLy
                .findViewById(R.id.info_name);
        viewHolder.infoNumber = (TextView) mMarkerLy
                .findViewById(R.id.info_number);

        mMarkerLy.setTag(viewHolder);//有缓存作用
    }
    viewHolder = (ViewHolder) mMarkerLy.getTag();

    viewHolder.infoName.setText(info.getBridgeName());
    viewHolder.infoNumber.setText(info.getBridgeNumber());

}

/**
 * 复用弹出面板mMarkerLy的控件
 *
 */
private class ViewHolder
{
    TextView infoName;
    TextView infoNumber;
}

Marker传数据

BridgeInfo bridgeInfo=new BridgeInfo(Double.parseDouble(lat),Double.parseDouble(lon),name,number,id);

Bundle bundle = new Bundle();
bundle.putSerializable("info",bridgeInfo);
mMarkerA.setExtraInfo(bundle);

Marker接收数据

// 获得marker中的数据
final BridgeInfo info = (BridgeInfo) marker.getExtraInfo().get("info");

百度地图对Marker有对点击和拖动的监听setOnMarkerClickListenersetOnMarkerDragListener。若要对Marker可以进行拖动

OverlayOptions ooA = new MarkerOptions()
        .position(llA)
        .icon(bd)
        .zIndex(9)
        .perspective(true)//开启近大远小
        .draggable(true);//设置可拖动
mMarkerA = (Marker) (mBaiduMap.addOverlay(ooA));

目前我对百度地图中的覆盖了解多一点,向其他的功能了解相对比较少。但POI和地理编码功能都是比较常用的,也是比较简单。网上一搜一大堆资料,一看就懂了。我在这里就不多说啦!若你是第一次开发百度地图,百度APIkey申请时要注意一些问题。详情请看我的博客:http://blog.csdn.net/wanliguodu/article/details/49366407

如需要源码可给我留言!

猜你喜欢

转载自blog.csdn.net/wanliguodu/article/details/50812270