百度地图在android中的使用 实现多个覆盖物

本文提供了一个使用百度地图SDK在Android应用中展示商家位置的例子。通过二维数组存储经纬度坐标,实现了在地图上标记多个餐厅位置,并为每个标记添加了信息窗口显示详细信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这里是我自己写的一个小demo,可以供大家参考

在这里面我使用的是二维数组保存的经纬度,到时候大家可以根据自己的需求更改

果断贴上代码

布局我用的是最简单的布局

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#f3f2f2"
    android:orientation="vertical">

    <com.baidu.mapapi.map.MapView
        android:id="@+id/map"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:clickable="true"/>


</RelativeLayout>

贴上activity
package com.sxyrd.yrdapp.ui;

import android.graphics.Point;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

import com.baidu.mapapi.map.BaiduMap;
import com.baidu.mapapi.map.BitmapDescriptor;
import com.baidu.mapapi.map.BitmapDescriptorFactory;
import com.baidu.mapapi.map.InfoWindow;
import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.map.Marker;
import com.baidu.mapapi.map.MarkerOptions;
import com.baidu.mapapi.map.OverlayOptions;
import com.baidu.mapapi.model.LatLng;
import com.sxyrd.yrdapp.R;
import com.sxyrd.yrdapp.base.BaseActivity;
import com.sxyrd.yrdapp.utils.Utils;

/**
 * Created by Fly0116 on 2016/4/26 0026.
 * 商家地图显示
 */
public class BusMapActivity extends BaseActivity {
    private MapView mMapView;
    BaiduMap mBaiduMap = null;
    Marker marker=null;

    @Override
    protected int getLayoutId() {
        return R.layout.activity_bussion_map;
    }

    @Override
    public void initView() {
        mMapView = (MapView) findViewById(R.id.map);
        mBaiduMap = mMapView.getMap();
    }

    @Override
    public void initData() {
        //创建InfoWindow展示的view
        double[][] numsix={{39.93923,116.357428},{39.91923, 116.327428},
                {39.89923, 116.347428}, {39.89923, 116.367428},
                {39.91923, 116.397428},{39.963175, 116.400244},
                {39.86923, 116.397428}};
        //构建Marker图标
        BitmapDescriptor bitmap = BitmapDescriptorFactory
                .fromResource(R.mipmap.icon_gcoding);
        for (int i=0;i<numsix.length;i++){
            LatLng pt = new LatLng(numsix[i][0], numsix[i][1]);
            Button button = new Button(getApplicationContext());
            button.setId(2000+i);
            button.setBackgroundResource(R.mipmap.popu);
            button.setText("餐厅标识"+(i+1));
            button.setPadding(5,0,5,0);
            button.setTextColor(getResources().getColor(R.color.black));
            final int finalI = i+1;
            //创建InfoWindow , 传入 view, 地理坐标, y 轴偏移量
            InfoWindow mInfoWindow = new InfoWindow(button, pt, -47);
            //构建MarkerOption,用于在地图上添加Marker
            OverlayOptions option = new MarkerOptions()
                    .position(pt)
                    .icon(bitmap);
            //在地图上添加Marker,并显示
            mBaiduMap.showInfoWindow(mInfoWindow);
            marker = (Marker) (mBaiduMap.addOverlay(option));
            Bundle bundle = new Bundle();
            bundle.putSerializable("info", "餐厅"+finalI);
            marker.setExtraInfo(bundle);

        }
        mBaiduMap.setOnMarkerClickListener(new BaiduMap.OnMarkerClickListener() {
            @Override
            public boolean onMarkerClick(Marker marker) {
                final String name= (String) marker.getExtraInfo().get("info");
                Button button = new Button(getApplicationContext());
                button.setBackgroundResource(R.mipmap.popu);
                button.setText("餐厅标识"+name);
                button.setPadding(5,0,5,8);
                button.setTextColor(getResources().getColor(R.color.black));
                final LatLng ll = marker.getPosition();
                Point p = mBaiduMap.getProjection().toScreenLocation(ll);
                LatLng llInfo = mBaiduMap.getProjection().fromScreenLocation(p);
                InfoWindow mInfoWindow = new InfoWindow(button, llInfo, -47);
                mBaiduMap.showInfoWindow(mInfoWindow);
                button.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        Utils.toast("餐厅标识"+name);
                        mBaiduMap.hideInfoWindow();
                    }
                });
                return true;
            }
        });
    }

    @Override
    public void onClick(View v) {

    }
}

以下是我项目里使用的jar

大家可以参考

如果有什么问题,可以留言,相互探讨

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值