`

Android百度地图添加覆盖物(AndroidSDK_v2.4.1)

阅读更多

 使用网络功能所需权限:

<!--使用网络功能所需权限  -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE">
</uses-permission>
<uses-permission android:name="android.permission.INTERNET">
</uses-permission>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE">
</uses-permission>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE">
</uses-permission>
<!-- SDK离线地图和cache功能需要读写外部存储器 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE">
</uses-permission>
<uses-permission android:name="android.permission.WRITE_SETTINGS">
</uses-permission>
<!-- 获取设置信息和详情页直接拨打电话需要以下权限  -->
<uses-permission android:name="android.permission.READ_PHONE_STATE">
</uses-permission>
<uses-permission android:name="android.permission.CALL_PHONE">
</uses-permission>
<!-- 使用定位功能所需权限,demo已集成百度定位SDK,不使用定位功能可去掉以下6项 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION">
</uses-permission>
<permission android:name="android.permission.BAIDU_LOCATION_SERVICE">
</permission>
<uses-permission android:name="android.permission.BAIDU_LOCATION_SERVICE">
</uses-permission>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION">
</uses-permission>
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION">
</uses-permission>
<uses-permission android:name="android.permission.ACCESS_GPS"/>                  

 
添加对应的开发密钥:

<meta-data android:name="com.baidu.lbsapi.API_KEY" android:value="开发密钥">
</meta-data>

 

 

 DemoApplication.java:

 

package org.lee.android;


import android.app.Application;
import android.content.Context;
import android.widget.Toast;

import com.baidu.mapapi.BMapManager;
import com.baidu.mapapi.MKGeneralListener;
import com.baidu.mapapi.map.MKEvent;


public class DemoApplication extends Application {
	
    private static DemoApplication mInstance = null;
    public boolean m_bKeyRight = true;
    BMapManager mBMapManager = null;

	
	@Override
    public void onCreate() {
	    super.onCreate();
		mInstance = this;
		initEngineManager(this);
	}
	
	public void initEngineManager(Context context) {
        if (mBMapManager == null) {
            mBMapManager = new BMapManager(context);
        }

        if (!mBMapManager.init(new MyGeneralListener())) {
            Toast.makeText(DemoApplication.getInstance().getApplicationContext(), 
                    "BMapManager  初始化错误!", Toast.LENGTH_LONG).show();
        }
	}
	
	public static DemoApplication getInstance() {
		return mInstance;
	}
	
	
	// 常用事件监听,用来处理通常的网络错误,授权验证错误等
    static class MyGeneralListener implements MKGeneralListener {
        
        @Override
        public void onGetNetworkState(int iError) {
            if (iError == MKEvent.ERROR_NETWORK_CONNECT) {
                Toast.makeText(DemoApplication.getInstance().getApplicationContext(), "您的网络出错啦!",
                    Toast.LENGTH_LONG).show();
            }
            else if (iError == MKEvent.ERROR_NETWORK_DATA) {
                Toast.makeText(DemoApplication.getInstance().getApplicationContext(), "输入正确的检索条件!",
                        Toast.LENGTH_LONG).show();
            }
            // ...
        }

        @Override
        public void onGetPermissionState(int iError) {
        	//非零值表示key验证未通过
            if (iError != 0) {
                //授权Key错误:
                Toast.makeText(DemoApplication.getInstance().getApplicationContext(), 
                        "请在 DemoApplication.java文件输入正确的授权Key,并检查您的网络连接是否正常!error: "+iError, Toast.LENGTH_LONG).show();
                DemoApplication.getInstance().m_bKeyRight = false;
            }
            else{
            	DemoApplication.getInstance().m_bKeyRight = true;
            	Toast.makeText(DemoApplication.getInstance().getApplicationContext(), 
                        "key认证成功", Toast.LENGTH_LONG).show();
            }
        }
    }
}

 

 

 

 

 

BaiduMapActivity.java:

 

package org.lee.android;

import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.view.View;

import com.baidu.mapapi.BMapManager;
import com.baidu.mapapi.map.ItemizedOverlay;
import com.baidu.mapapi.map.MapController;
import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.map.OverlayItem;
import com.baidu.mapapi.map.PopupClickListener;
import com.baidu.mapapi.map.PopupOverlay;
import com.baidu.platform.comapi.basestruct.GeoPoint;

public class BaiduMapActivity extends Activity {

	BMapManager mBMapMan = null;
	MapView mMapView = null;
	private MyOverlay mOverlay = null;  
    private PopupOverlay pop = null;  

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		super.onCreate(savedInstanceState);
		// 初始化地图View 
		initBdMapViews();
		//准备要添加的Overlay  
		addMyOverlay();

	}
	
	// 初始化地图View  
    private void initBdMapViews(){
    	mBMapMan = new BMapManager(getApplication());
		mBMapMan.init(null);
		// 注意:请在试用setContentView前初始化BMapManager对象,否则会报错
		setContentView(R.layout.baidumap);
		mMapView = (MapView) findViewById(R.id.bmapsView);
		mMapView.setBuiltInZoomControls(true);
		// 设置启用内置的缩放控件
		MapController mMapController = mMapView.getController();
		// 调整地图中心点  
        mMapController.setCenter(transformToGeoP(39.915, 116.404));  
		mMapController.setZoom(12);// 设置地图zoom级别
    }
	
	//准备要添加的Overlay  
	public void addMyOverlay(){
		double mLat1 = 39.90923;  
		double mLon1 = 116.397428;  
		double mLat2 = 39.9022;  
		double mLon2 = 116.3922;  
		double mLat3 = 39.917723;  
		double mLon3 = 116.3722;  
		// 用给定的经纬度构造GeoPoint,单位是微度 (度 * 1E6)  
		GeoPoint p1 = transformToGeoP(mLat1, mLon1);  
		GeoPoint p2 = transformToGeoP(mLat2, mLon2);    
		GeoPoint p3 = transformToGeoP(mLat3, mLon3);    
		//准备overlay图像数据,根据实情情况修复  
		Drawable mark= getResources().getDrawable(R.drawable.icon_gcoding);  
		//用OverlayItem准备Overlay数据  
		OverlayItem item1 = new OverlayItem(p1,"item1","item1");  
		//使用setMarker()方法设置overlay图片,如果不设置则使用构建ItemizedOverlay时的默认设置  
		OverlayItem item2 = new OverlayItem(p2,"item2","item2");  
		item2.setMarker(mark);  
		OverlayItem item3 = new OverlayItem(p3,"item3","item3");  
		   
		//创建IteminizedOverlay  
		mOverlay = new MyOverlay(mark, mMapView);  
		//将IteminizedOverlay添加到MapView中  
		  
		mMapView.getOverlays().clear();  
		mMapView.getOverlays().add(mOverlay);  
		   
		//现在所有准备工作已准备好,使用以下方法管理overlay.  
		//添加overlay, 当批量添加Overlay时使用addItem(List<OverlayItem>)效率更高  
		mOverlay.addItem(item1);  
		mOverlay.addItem(item2);  
		mOverlay.addItem(item3);  
		mMapView.refresh();  
	}
	
	// 弹出覆盖物  
    public void showPopupOverlay(GeoPoint p1)  
    {  
    	//创建pop对象,注册点击事件监听接口  
    	pop = new PopupOverlay(mMapView,new PopupClickListener() {                  
    	        @Override  
    	        public void onClickedPopup(int index) {  
    	                //在此处理pop点击事件,index为点击区域索引,点击区域最多可有三个  
    	        }  
    	});  
    	View view = getLayoutInflater().inflate(R.layout.pop_layout, null);  
        View pop_layout = view.findViewById(R.id.pop_layout);  
        //将View转化成用于显示的bitmap  
        Bitmap[] bitMaps = { BMapUtil.getBitmapFromView(pop_layout) };  
    	//弹出pop,隐藏pop  
    	pop.showPopup(bitMaps, p1, 32);    
    }  
    
    // 将经纬度转换成GeoPoint  
    private GeoPoint transformToGeoP(double lat, double lng)  
    {  
        return new GeoPoint((int) (lat * 1E6), (int) (lng * 1E6));  
    }  
	
	public class MyOverlay extends ItemizedOverlay<OverlayItem> {  
	    //用MapView构造ItemizedOverlay  
	    public MyOverlay(Drawable mark,MapView mapView){  
	            super(mark,mapView);  
	    }  
	    protected boolean onTap(int index) {  
	        //在此处理item点击事件  
	        System.out.println("item onTap: "+index); 
	        //弹出覆盖物  
            showPopupOverlay(getItem(index).getPoint());  
	        return true;  
	    }  
        public boolean onTap(GeoPoint pt, MapView mapView){  
        	if (pop != null)  
            {  
                //隐藏覆盖物  
                pop.hidePop();  
            }  
            return false;   
        }  
	}

	@Override
	protected void onDestroy() {
		mMapView.destroy();
		if (mBMapMan != null) {
			mBMapMan.destroy();
			mBMapMan = null;
		}
		super.onDestroy();
	}

	@Override
	protected void onPause() {
		mMapView.onPause();
		if (mBMapMan != null) {
			mBMapMan.stop();
		}
		super.onPause();
	}

	@Override
	protected void onResume() {
		mMapView.onResume();
		if (mBMapMan != null) {
			mBMapMan.start();
		}
		super.onResume();
	}

}

 

 

 

 

 

 

baidumap.xml:

 

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

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

</LinearLayout>

 

 

 

 

 

pop_layout.xml

 

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

    <RelativeLayout
        android:id="@+id/pop_layout"
        android:layout_width="fill_parent"
        android:layout_height="120dip"
        android:background="@drawable/pop_layout_bg" >

        <LinearLayout
            android:id="@+id/user_logo_layout"
            android:layout_width="wrap_content"
            android:layout_height="fill_parent"
            android:layout_margin="2dip"
            android:gravity="center" >

            <ImageView
                android:id="@+id/user_logo"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/icon" />
        </LinearLayout>

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="fill_parent"
            android:layout_toRightOf="@+id/user_logo_layout"
            android:gravity="center"
            android:orientation="vertical" >

            <LinearLayout
                android:id="@+id/time_layout"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:orientation="horizontal" >

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginLeft="5dip"
                    android:layout_marginRight="5dip"
                    android:layout_marginTop="5dip"
                    android:text="时间:"
                    android:textColor="#ffffff"
                    android:textSize="15dip" />

                <TextView
                    android:id="@+id/time"
                    android:layout_width="175dip"
                    android:layout_height="wrap_content"
                    android:layout_marginLeft="5dip"
                    android:layout_marginRight="5dip"
                    android:layout_marginTop="5dip"
                    android:text="2014年4月25日"
                    android:textColor="#ffffff"
                    android:textSize="15dip" />
            </LinearLayout>

            <LinearLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_below="@+id/time_layout"
                android:orientation="horizontal" >

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginLeft="5dip"
                    android:layout_marginRight="5dip"
                    android:layout_marginTop="5dip"
                    android:text="地点:"
                    android:textColor="#ffffff"
                    android:textSize="15dip" />

                <TextView
                    android:id="@+id/address"
                    android:layout_width="170dip"
                    android:layout_height="wrap_content"
                    android:layout_marginLeft="5dip"
                    android:layout_marginRight="5dip"
                    android:layout_marginTop="5dip"
                    android:text="安徽省合肥市包河区富广大厦"
                    android:lines="2"
                    android:ellipsize="end"
                    android:textColor="#ffffff"
                    android:textSize="15dip" />
            </LinearLayout>
        </LinearLayout>
    </RelativeLayout>

</RelativeLayout>

 

效果图

 

  • 大小: 97.9 KB
分享到:
评论

相关推荐

    BaiduMap_AndroidSDK_v3.6.0_All.zip

    首先,我们需要了解的是,BaiduMap_AndroidSDK_v3.6.0是一个针对Android平台的百度地图开发工具包,它提供了丰富的地图操作、定位、路线规划等功能,使得开发者能够轻松地在自己的应用中集成地图功能。这个版本的...

    BaiduMap_AndroidSDK_v3.5.0_All

    1. 添加依赖库:BaiduMap_AndroidSDK_v3.5.0_Lib.zip包含了所有必要的jar包,开发者需要将其解压并导入到项目的libs目录下。在Android Studio中,需要在项目的build.gradle文件中添加对应的依赖引用,通常为`...

    BaiduNavi_AndroidSDK_v4.1.1_ALL.zip

    首先,"BaiduNavi_AndroidSDK_v4.1.1_ALL.zip"是百度地图Android SDK的完整包,包含了所有必要的库文件、示例代码和文档,为开发者提供了全方位的开发支持。而"BaiduNavi_AndroidSDK_v4.1.1_Sample.zip"则包含了SDK...

    BaiduMap_AndroidSDK_v5.2.1_Sample_demo

    《百度地图Android SDK v5.2.1 示例Demo详解》 在移动开发领域,百度地图Android SDK...同时,配合“BaiduMap_AndroidSDK_v5.2.1_Docs.zip”中的文档,开发者可以更系统地学习和理解百度地图Android SDK的每一个细节。

    SaaS_AppAnalytics_Android_SDK_V4.0.58.jar

    SaaS_AppAnalytics_Android_SDK_V4.0.58.jar TalkingData移动大数据服务平台;提供全面的产品统计分析服务、权威的移动行业数据解析,帮助你用数据说话。

    BaiduMap_AndroidSDK_v3.7.3_Sample

    总结来说,"BaiduMap_AndroidSDK_v3.7.3_Sample"为开发者提供了详尽的实例代码,涵盖了地图SDK的各个方面,是学习和使用百度地图Android SDK的重要参考资料。通过深入学习和实践,开发者可以快速掌握地图功能的集成...

    百度地图API_BaiduMap_AndroidSDK_v2.1.2

    **百度地图API_BaiduMap_AndroidSDK_v2.1.2**是百度为Android开发者提供的一款集成地图功能的开发工具包,它允许开发者在自己的应用中集成百度地图服务,包括定位、路线规划、地图渲染、地理编码、覆盖物显示等多种...

    ANDROID_SDK_HOME设置

    例如,如果 Android SDK 安装在 K 盘的 android-sdk-windows 目录下,那么可以将 ANDROID_SDK_HOME 环境变量设置为 K:\Android\android-sdk-windows,并将 Path 系统变量设置为 %ANDROID_SDK_HOME%\tools_KP:\...

    Android百度地图添加覆盖物

    在Android开发中,集成百度地图并添加覆盖物(也称为POI,Point of Interest)是一项常见的任务,可以为用户提供丰富的地理位置信息和交互功能。本文将详细介绍如何在Android应用中使用百度地图API实现这一功能。 ...

    百度地图BaiduMap_AndroidSDK_v3.1.0

    包括BaiduMap_AndroidSDK_v3.1.0_Docs.zip、BaiduMap_AndroidSDK_v3.1.0_Lib.zip、BaiduMap_AndroidSDK_v3.1.0_Sample.zip

    Rockchip_Developer_Guide_Android11_SDK_V0.0.1_CN.pdf

    Rockchip_Developer_Guide_Android11_SDK_V0.0.1_CN 安卓11中文瑞芯微开发者向导

    BaiduLBS_AndroidSDK_Lib

    标题:“BaiduLBS_AndroidSDK_Lib”是指百度地图提供的Android SDK库,这是一个专门为Android开发者设计的地理定位和地图服务开发工具包。它允许开发者在自己的应用程序中集成百度地图的功能,如地图展示、定位、...

    BaiduLBS_AndroidSDK_Sample v5.2.1

    BaiduLoc_AndroidSDK_v7.5_Demo.zip BaiduMap_AndroidSDK_v5.2.1_Sample.zip BaiduNavi_AndroidSDK_v4.1.1_Sample.zip BaiduMap_Ar_AndroidSDK_v1.0.0_sample.zip BaiduMap_AndroidPanoramaSDK_v2.6.2_Sample.zip

    BaiduMap_Ar_AndroidSDK_v1.0.0_sample.zip

    本文将详细解析“BaiduMap_AR_AndroidSDK_v1.0.0_sample.zip”这个压缩包中的示例项目,帮助开发者了解如何在Android平台上使用百度地图AR SDK。 首先,我们来看一下核心标签“android baidumap”,这表明了该SDK是...

    BaiduMap_AndroidSDK_v5.2.1_Sample.zip

    本篇文章将深入解析"**BaiduMap_AndroidSDK_v5.2.1_Sample.zip**"这个压缩包中的示例代码,帮助开发者更好地理解和应用百度地图API。 首先,我们来看一下"**BaiduMap_AndroidSDK_v5.2.1_Sample**"这个项目的主要...

    BaiduMap_AndroidSDK_v3.5.0

    在BaiduMap_AndroidSDK_v3.5.0的Sample案例中,包含了多种应用场景的实例代码,如地图基本操作、标注与覆盖物、路线规划、定位服务等。这些案例是学习和理解SDK功能的绝佳资源,可以帮助开发者快速上手。 1. 基本...

    BaiduLoc_AndroidSDK_v9.0.0_Demo.zip

    本文将深入解析“BaiduLoc_AndroidSDK_v9.0.0_Demo”中的关键知识点,帮助开发者更好地理解和运用这一工具。 1. 百度定位SDK介绍: 百度定位SDK是百度地图开放平台提供的一项服务,它整合了GPS、WiFi、基站等多种...

    BaiduMap_AndroidSDK_v5.2.0_Docs.zip

    《百度地图Android SDK v5.2.0技术文档解析》 在移动开发领域,百度地图Android SDK是一款不可或缺的工具,它为开发者提供了丰富的地图服务功能,包括定位、地图展示、路线规划、地理编码等。本篇文章将深入解析v...

    BaiduLBS_AndroidSDK_v6.1.3_All

    BaiduLBS_AndroidSDK_v6.1.3_All是百度提供的一款针对Android平台的最新定位与地图服务SDK,它为开发者提供了强大的功能,包括精确的定位服务、丰富的地图渲染以及高效的路径规划等。本文将深入探讨这一SDK的核心...

    BaiduMap_AndroidSDK_v3.7.3_Docs

    《百度地图Android SDK v3.7.3技术文档解析》 在移动开发领域,百度地图Android SDK是一款不可或缺的工具,它为开发者提供了丰富的地图服务功能,包括定位、地图展示、路线规划、地理编码等。本篇文章将深入解析v...

Global site tag (gtag.js) - Google Analytics