• 百度地图----->地图类型、定位模式、实时交通、我的位置、加入覆盖物、覆盖物详情及提示


    在百度地图开发平台 http://developer.baidu.com/map/index.php?

    title=androidsdk

    进行创建应用,获取应用的AK,在进行下载BaiduLBS_Android.jar和armeabi--然后放于libs文件夹下。另外获取安全码

    Android SDK安全码组成:数字签名+;+包名。(查看具体配置方法),创建应用,提交后,自己主动下发Ak(配置文件里用到)

    以下是官方的提示:

    第一步:在project里新建libs文件夹。将开发包里的baidumapapi_vX_X_X.jar复制到libs根文件夹下。将libBaiduMapSDK_vX_X_X.so复制到libsarmeabi文件夹下(官网demo里已有这两个文件。假设要集成到自己的project里,就须要自己加入),拷贝完毕后的project文件夹例如以下图所看到的;
    1.JPG
    第二步:在project属性->Java Build Path->Libraries中选择“Add External JARs”,选定baidumapapi_vX_X_X.jar,确定后返回。
    通过以上两步操作后,您就能够正常使用百度地图SDK为您提供的所有功能了。
    注意:因为adt插件升级。若您使用Eclipse adt 22的话,须要对开发环境进行对应的设置,方法例如以下:
    1. 在Eclipse 中选中project。右键选 Properties->Java Build Path->Order and Export 使 Android Private Libraries处于勾选状态;
    2. Project -> clean-> clean all .

    以下也是官方的提示:

    百度地图SDK为开发人员提供了便捷的显示百度地图数据的接口,通过下面几步操作。就可以在您的应用中使用百度地图数据:
    第一步:创建并配置project(详细方法參见project配置部分的介绍);
    第二步:在AndroidManifest中加入开发密钥、所需权限等信息;
    (1)在application中加入开发密钥
    <application>  
        <meta-data  
            android:name="com.baidu.lbsapi.API_KEY"  
            android:value="开发人员 key" />  
    </application>
    2)加入所需权限
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />
    <uses-permission android:name="android.permission.WAKE_LOCK"/>
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.GET_TASKS" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.WRITE_SETTINGS" />
    第三步。在布局xml文件里加入地图控件。
    <com.baidu.mapapi.map.MapView  
        android:id="@+id/bmapView"  
        android:layout_width="fill_parent"  
        android:layout_height="fill_parent"  
        android:clickable="true" />
    第四步。在应用程序创建时初始化 SDK引用的Context 全局变量:
    public class MainActivity extends Activity {  
        @Override  
        protected void onCreate(Bundle savedInstanceState) {  
            super.onCreate(savedInstanceState);   
            //在使用SDK各组件之前初始化context信息,传入ApplicationContext  
            //注意该方法要再setContentView方法之前实现  
            SDKInitializer.initialize(getApplicationContext());  
            setContentView(R.layout.activity_main);  
        }  
    }
    注意:在SDK各功能组件使用之前都须要调用
    SDKInitializer.initialize(getApplicationContext());,因此我们建议该方法放在Application的初始化方法中
    第五步,创建地图Activity,管理地图生命周期。
    public class MainActivity extends Activity {  
        MapView mMapView = null;  
        @Override  
        protected void onCreate(Bundle savedInstanceState) {  
            super.onCreate(savedInstanceState);   
            //在使用SDK各组件之前初始化context信息。传入ApplicationContext  
            //注意该方法要再setContentView方法之前实现  
            SDKInitializer.initialize(getApplicationContext());  
            setContentView(R.layout.activity_main);  
            //获取地图控件引用  
            mMapView = (MapView) findViewById(R.id.bmapView);  
        }  
        @Override  
        protected void onDestroy() {  
            super.onDestroy();  
            //在activity运行onDestroy时运行mMapView.onDestroy(),实现地图生命周期管理  
            mMapView.onDestroy();  
        }  
        @Override  
        protected void onResume() {  
            super.onResume();  
            //在activity运行onResume时运行mMapView. onResume ()。实现地图生命周期管理  
            mMapView.onResume();  
            }  
        @Override  
        protected void onPause() {  
            super.onPause();  
            //在activity运行onPause时运行mMapView. onPause (),实现地图生命周期管理  
            mMapView.onPause();  
            }  
        }

    修正:官方的权限在某些手机上无法成功。为了保险起见,能够用以下的这些权限

     <uses-permission android:name="android.permission.GET_ACCOUNTS" />
        <uses-permission android:name="android.permission.USE_CREDENTIALS" />
        <uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
        <uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" />
        <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
        <uses-permission android:name="android.permission.INTERNET" />
        <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />
        <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
        <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
        <uses-permission android:name="android.permission.READ_PHONE_STATE" />
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
        <uses-permission android:name="android.permission.BROADCAST_STICKY" />
        <uses-permission android:name="android.permission.WRITE_SETTINGS" />
        <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    ***************************************************************************************************项目代码開始*************************************
    開始粘贴项目代码吧 +++++++++天下一大抄。抄来抄去,这里感谢一些hyman大神。

    。。

    先看自己项目的配置文件吧

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.example.homebaimap"
        android:versionCode="1"
        android:versionName="1.0" >
    
        <uses-sdk
            android:minSdkVersion="18"
            android:targetSdkVersion="18" />
    
        <uses-permission android:name="android.permission.GET_ACCOUNTS" />
        <uses-permission android:name="android.permission.USE_CREDENTIALS" />
        <uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
        <uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" />
        <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
        <uses-permission android:name="android.permission.INTERNET" />
        <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />
        <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
        <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
        <uses-permission android:name="android.permission.READ_PHONE_STATE" />
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
        <uses-permission android:name="android.permission.BROADCAST_STICKY" />
        <uses-permission android:name="android.permission.WRITE_SETTINGS" />
        <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    
        <application
            android:allowBackup="true"
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name"
            android:theme="@style/AppTheme" >
            <meta-data
                android:name="com.baidu.lbsapi.API_KEY"
                android:value="h1sIN5FLXGPodE5QCt7VpU7R" />
    
            <activity
                android:name=".MainActivity"
                android:label="@string/app_name" >
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
    
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
    
            <service
                android:name="com.baidu.location.f"
                android:enabled="true"
                android:process=":remote" >
                <intent-filter>
                    <action android:name="com.baidu.location.service_v2.2" >
                    </action>
                </intent-filter>
            </service>
        </application>
    
    </manifest>


    主页面布局

    activity_main.xml

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
    
        <com.baidu.mapapi.map.MapView
            android:id="@+id/id_bmapView"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:clickable="true" />
    
        <RelativeLayout
            android:id="@+id/id_maker_ly"
            android:layout_width="match_parent"
            android:layout_height="220dp"
            android:layout_alignParentBottom="true"
            android:background="#cc4e5a6b"
            android:clickable="true"
            android:visibility="gone" >
    
            <ImageView
                android:id="@+id/id_info_img"
                android:layout_width="fill_parent"
                android:layout_height="150dp"
                android:layout_marginBottom="10dp"
                android:layout_marginLeft="12dp"
                android:layout_marginRight="12dp"
                android:layout_marginTop="10dp"
                android:background="@drawable/img_border"
                android:scaleType="fitXY"
                android:src="@drawable/a01" >
            </ImageView>
    
            <RelativeLayout
                android:layout_width="fill_parent"
                android:layout_height="50dp"
                android:layout_alignParentBottom="true"
                android:background="@drawable/bg_map_bottom" >
    
                <LinearLayout
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_centerVertical="true"
                    android:layout_marginLeft="20dp"
                    android:orientation="vertical" >
    
                    <TextView
                        android:id="@+id/id_info_name"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="老米家泡馍"
                        android:textColor="#fff5eb" />
    
                    <TextView
                        android:id="@+id/id_info_distance"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="距离200米"
                        android:textColor="#fff5eb" />
                </LinearLayout>
    
                <LinearLayout
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_alignParentRight="true"
                    android:layout_centerVertical="true"
                    android:layout_marginRight="20dp"
                    android:orientation="horizontal" >
    
                    <ImageView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:background="@drawable/map_zan"
                        android:clickable="true" />
    
                    <TextView
                        android:id="@+id/id_info_zan"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_gravity="center"
                        android:text="789"
                        android:textColor="#fff5eb" />
                </LinearLayout>
            </RelativeLayout>
        </RelativeLayout>
    
    </RelativeLayout>

    另外drawable里面的一个小文件(无关痛痒。是图像的小处理)

    img_border.xml

    <?xml version="1.0" encoding="utf-8"?>
    <shape xmlns:android="http://schemas.android.com/apk/res/android" >
    
        <stroke
            android:width="20dp"
            android:color="#AAFFFFFF" />
    
        <padding
            android:bottom="2dp"
            android:left="2dp"
            android:right="2dp"
            android:top="2dp" >
        </padding>
    </shape>

    Info(是地图上marker的封装信息类,便于学习,没有从server获取)

    package com.example.homebaimap;
    
    import java.io.Serializable;
    import java.util.ArrayList;
    import java.util.List;
    
    public class Info implements Serializable
    {
    	private static final long serialVersionUID = -1010711775392052966L;
    	private double latitude;
    	private double longitude;
    	//图片
    	private int imgId;
    	//名字
    	private String name;
    	//距离
    	private String distance;
    	//赞
    	private int zan;
    
    	public static List<Info> infos = new ArrayList<Info>();
    
    	static
    	{
    		infos.add(new Info(34.242652, 108.971171, R.drawable.a01, "英伦贵族小旅馆",
    				"距离209米", 1456));
    		infos.add(new Info(34.242952, 108.972171, R.drawable.a02, "沙井国际洗浴会所",
    				"距离897米", 456));
    		infos.add(new Info(34.242852, 108.973171, R.drawable.a03, "五环服装城",
    				"距离249米", 1456));
    		infos.add(new Info(34.242152, 108.971971, R.drawable.a04, "老米家泡馍小炒",
    				"距离679米", 1456));
    	}
    
    	public Info(double latitude, double longitude, int imgId, String name,
    			String distance, int zan)
    	{
    		this.latitude = latitude;
    		this.longitude = longitude;
    		this.imgId = imgId;
    		this.name = name;
    		this.distance = distance;
    		this.zan = zan;
    	}
    
    	public double getLatitude()
    	{
    		return latitude;
    	}
    
    	public void setLatitude(double latitude)
    	{
    		this.latitude = latitude;
    	}
    
    	public double getLongitude()
    	{
    		return longitude;
    	}
    
    	public void setLongitude(double longitude)
    	{
    		this.longitude = longitude;
    	}
    
    	public int getImgId()
    	{
    		return imgId;
    	}
    
    	public void setImgId(int imgId)
    	{
    		this.imgId = imgId;
    	}
    
    	public String getName()
    	{
    		return name;
    	}
    
    	public void setName(String name)
    	{
    		this.name = name;
    	}
    
    	public String getDistance()
    	{
    		return distance;
    	}
    
    	public void setDistance(String distance)
    	{
    		this.distance = distance;
    	}
    
    	public int getZan()
    	{
    		return zan;
    	}
    
    	public void setZan(int zan)
    	{
    		this.zan = zan;
    	}
    
    }
    


    MainActivity

    package com.example.homebaimap;
    
    import java.util.List;
    
    import android.app.Activity;
    import android.content.Context;
    import android.graphics.Color;
    import android.graphics.Point;
    import android.os.Bundle;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.view.View;
    import android.view.Window;
    import android.widget.ImageView;
    import android.widget.RelativeLayout;
    import android.widget.TextView;
    import android.widget.Toast;
    
    import com.baidu.location.BDLocation;
    import com.baidu.location.BDLocationListener;
    import com.baidu.location.LocationClient;
    import com.baidu.location.LocationClientOption;
    import com.baidu.mapapi.SDKInitializer;
    import com.baidu.mapapi.map.BaiduMap;
    import com.baidu.mapapi.map.BaiduMap.OnMapClickListener;
    import com.baidu.mapapi.map.BaiduMap.OnMarkerClickListener;
    import com.baidu.mapapi.map.BitmapDescriptor;
    import com.baidu.mapapi.map.BitmapDescriptorFactory;
    import com.baidu.mapapi.map.InfoWindow;
    import com.baidu.mapapi.map.InfoWindow.OnInfoWindowClickListener;
    import com.baidu.mapapi.map.MapPoi;
    import com.baidu.mapapi.map.MapStatusUpdate;
    import com.baidu.mapapi.map.MapStatusUpdateFactory;
    import com.baidu.mapapi.map.MapView;
    import com.baidu.mapapi.map.Marker;
    import com.baidu.mapapi.map.MarkerOptions;
    import com.baidu.mapapi.map.MyLocationConfiguration;
    import com.baidu.mapapi.map.MyLocationConfiguration.LocationMode;
    import com.baidu.mapapi.map.MyLocationData;
    import com.baidu.mapapi.map.OverlayOptions;
    import com.baidu.mapapi.model.LatLng;
    import com.example.homebaimap.MyOrientationListener.OnOrientationListener;
    
    public class MainActivity extends Activity {
    	private Context context;
    	// 定位相关
    	private LocationMode mLocationMode;
    	private LocationClient mLocationClient;
    	private MyLocationListener mLocationListener;
    	private boolean isFirstIn = true;
    	private double mLatitude;
    	private double mLongtitude;
    	// 自己定义定位图标
    	private BitmapDescriptor mIconLocation;
    	private MyOrientationListener myOrientationListener;
    	private float mCurrentX;
    
    	// 覆盖物相关
    	private BitmapDescriptor mMarker;
    	private RelativeLayout mMarkerLy;
    
    	
    	
    	// 初始化视图控件
    	private MapView mMapView;
    	private BaiduMap mBaiduMap;
    	private void initView() {
    		mMapView = (MapView) findViewById(R.id.id_bmapView);
    		mBaiduMap = mMapView.getMap();
    		// 设置地图缩放级别。标尺大概在500米左右
    		MapStatusUpdate msu = MapStatusUpdateFactory.zoomTo(15.0f);
    		mBaiduMap.setMapStatus(msu);
    	}
    
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		requestWindowFeature(Window.FEATURE_NO_TITLE);
    		// 在使用SDK各组件之前初始化context信息,传入ApplicationContext
    		// 注意该方法要再setContentView方法之前实现
    		SDKInitializer.initialize(getApplicationContext());
    		setContentView(R.layout.activity_main);
    
    		this.context = this;
    		//初始化控件。而且设置缩放级别
    		initView();
    		// 初始化定位
    		initLocation();
    		//初始化覆盖物
    		initMarker();
    
    		/**
    		 * 点击位置信息,回调方法
    		 */
    		mBaiduMap.setOnMarkerClickListener(new OnMarkerClickListener() {
    			@Override
    			public boolean onMarkerClick(Marker marker) {
    				Bundle extraInfo = marker.getExtraInfo();
    				//获取携带的信息
    				Info info = (Info) extraInfo.getSerializable("info");
    				ImageView iv = (ImageView) mMarkerLy
    						.findViewById(R.id.id_info_img);
    				TextView distance = (TextView) mMarkerLy
    						.findViewById(R.id.id_info_distance);
    				TextView name = (TextView) mMarkerLy
    						.findViewById(R.id.id_info_name);
    				TextView zan = (TextView) mMarkerLy
    						.findViewById(R.id.id_info_zan);
    				iv.setImageResource(info.getImgId());
    				distance.setText(info.getDistance());
    				name.setText(info.getName());
    				zan.setText(info.getZan() + "");
    
    				InfoWindow infoWindow;
    				TextView tv = new TextView(context);
    				tv.setBackgroundResource(R.drawable.location_tips);
    				tv.setPadding(30, 20, 30, 50);
    				tv.setText(info.getName());
    				tv.setTextColor(Color.parseColor("#ffffff"));
    
    				final LatLng latLng = marker.getPosition();
    				Point p = mBaiduMap.getProjection().toScreenLocation(latLng);
    				p.y -= 47;
    				LatLng ll = mBaiduMap.getProjection().fromScreenLocation(p);
    
    				infoWindow = new InfoWindow(tv, ll,
    						new OnInfoWindowClickListener() {
    							@Override
    							public void onInfoWindowClick() {
    								mBaiduMap.hideInfoWindow();
    							}
    						});
    				mBaiduMap.showInfoWindow(infoWindow);
    				mMarkerLy.setVisibility(View.VISIBLE);
    				return true;
    			}
    		});
    		//点击屏幕其它地方。取消那些提示。还有位置信息
    		mBaiduMap.setOnMapClickListener(new OnMapClickListener() {
    
    			@Override
    			public boolean onMapPoiClick(MapPoi arg0) {
    				return false;
    			}
    
    			@Override
    			public void onMapClick(LatLng arg0) {
    				mMarkerLy.setVisibility(View.GONE);
    				mBaiduMap.hideInfoWindow();
    			}
    		});
    	}
    
    
    	/********************************************
    	 * 初始化定位
    	 */
    	private void initLocation() {
    		//定位图层显示方式, 默觉得 LocationMode.NORMAL 普通态--还有罗盘。尾随模式
    		mLocationMode = LocationMode.NORMAL;
    		//创建LocationClient,以及监听。以及设置定位监听
    		mLocationClient = new LocationClient(this);
    		mLocationListener = new MyLocationListener();
    		mLocationClient.registerLocationListener(mLocationListener);
    
    		//为locationClient进行必要的设置
    		LocationClientOption option = new LocationClientOption();
    		option.setCoorType("bd09ll");//设置百度经纬度坐标系格式
    		option.setIsNeedAddress(true);//某处
    		option.setOpenGps(true);//打开gps
    		option.setScanSpan(1000);//每隔多少秒请求
    		mLocationClient.setLocOption(option);//设置必要的參数
    		// 视图展现的时候,先初始化一个自己定义图标
    		mIconLocation = BitmapDescriptorFactory
    				.fromResource(R.drawable.navi_map_gps_locked);
    		//传感器对象监听
    		myOrientationListener = new MyOrientationListener(context);
    
    		//监听到改变时候,进行赋最新的值x值
    		myOrientationListener
    				.setOnOrientationListener(new OnOrientationListener() {
    					@Override
    					public void onOrientationChanged(float x) {
    						mCurrentX = x;
    					}
    				});
    
    	}
    	private class MyLocationListener implements BDLocationListener {
    		@Override
    		public void onReceiveLocation(BDLocation location) {
    
    			//创建的位置数据
    			MyLocationData data = new MyLocationData.Builder()//
    					.direction(mCurrentX)//
    					.accuracy(location.getRadius())//
    					.latitude(location.getLatitude())//
    					.longitude(location.getLongitude())//
    					.build();
    			mBaiduMap.setMyLocationData(data);
    			// 设置自己定义图标
    			MyLocationConfiguration config = new MyLocationConfiguration(
    					mLocationMode, true, mIconLocation);
    			mBaiduMap.setMyLocationConfigeration(config);
    
    			// 更新经纬度
    			mLatitude = location.getLatitude();
    			mLongtitude = location.getLongitude();
    			//当用户第一次获取定位时候,定位到自己的位置
    			if (isFirstIn) {
    				LatLng latLng = new LatLng(location.getLatitude(),
    						location.getLongitude());
    				MapStatusUpdate msu = MapStatusUpdateFactory.newLatLng(latLng);
    				mBaiduMap.animateMapStatus(msu);
    				isFirstIn = false;
    
    				Toast.makeText(context, location.getAddrStr(),
    						Toast.LENGTH_SHORT).show();
    			}
    
    		}
    	}
    	/**********************************************************
    	 * 初始化覆盖物
    	 */
    	private void initMarker() {
    		//初始化覆盖物控件
    		mMarker = BitmapDescriptorFactory.fromResource(R.drawable.maker);
    		mMarkerLy = (RelativeLayout) findViewById(R.id.id_maker_ly);
    	}
    	//____________________________________________________________________
    	@Override
    	protected void onResume() {
    		super.onResume();
    		// 在activity运行onResume时运行mMapView. onResume (),实现地图生命周期管理
    		mMapView.onResume();
    	}
    
    	@Override
    	protected void onStart() {
    		super.onStart();
    		// 开启定位
    		mBaiduMap.setMyLocationEnabled(true);
    		if (!mLocationClient.isStarted())
    			mLocationClient.start();
    		// 开启方向传感器
    		myOrientationListener.start();
    	}
    
    	@Override
    	protected void onPause() {
    		super.onPause();
    		// 在activity运行onDestroy时运行mMapView.onDestroy(),实现地图生命周期管理
    		mMapView.onPause();
    	}
    
    	@Override
    	protected void onStop() {
    		super.onStop();
    
    		// 停止定位
    		mBaiduMap.setMyLocationEnabled(false);
    		mLocationClient.stop();
    		// 停止方向传感器
    		myOrientationListener.stop();
    
    	}
    
    	@Override
    	protected void onDestroy() {
    		super.onDestroy();
    		// 在activity运行onDestroy时运行mMapView.onDestroy(),实现地图生命周期管理
    		mMapView.onDestroy();
    	}
    	//____________________________________________________________________
    	@Override
    	public boolean onCreateOptionsMenu(Menu menu) {
    		getMenuInflater().inflate(R.menu.main, menu);
    		return true;
    	}
    
    	/**
    	 * 定位到我的位置
    	 */
    	private void centerToMyLocation() {
    		//创建最新的经度维度
    		LatLng latLng = new LatLng(mLatitude, mLongtitude);
    		MapStatusUpdate msu = MapStatusUpdateFactory.newLatLng(latLng);
    		//去移动到最新的位置上去
    		mBaiduMap.animateMapStatus(msu);
    	}
    
    	@Override
    	public boolean onOptionsItemSelected(MenuItem item) {
    		switch (item.getItemId()) {
    		case R.id.id_map_common:
    			//普通
    			mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);
    			break;
    
    		case R.id.id_map_site:
    			//卫星
    			mBaiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE);
    			break;
    
    		case R.id.id_map_traffic:
    			//显示实时交通
    			if (mBaiduMap.isTrafficEnabled()) {
    				mBaiduMap.setTrafficEnabled(false);
    				item.setTitle("实时交通(off)");
    			} else {
    				mBaiduMap.setTrafficEnabled(true);
    				item.setTitle("实时交通(on)");
    			}
    			break;
    		case R.id.id_map_location:
    			//实现定位--我的位置
    			centerToMyLocation();
    			break;
    		case R.id.id_map_mode_common:
    			mLocationMode = LocationMode.NORMAL;
    			break;
    		case R.id.id_map_mode_following:
    			mLocationMode = LocationMode.FOLLOWING;
    			break;
    		case R.id.id_map_mode_compass:
    			mLocationMode = LocationMode.COMPASS;
    			break;
    		case R.id.id_add_overlay:
    			addOverlays(Info.infos);
    			break;
    		default:
    			break;
    		}
    
    		return super.onOptionsItemSelected(item);
    	}
    
    	/*********************************************
    	 * 加入覆盖物
    	 * 循环得到经纬度,得到图标
    	 * 依据MarkerOptions设置经纬度,设置图标
    	 * 讲marker携带info,完毕地图上的加入
    	 * 
    	 */
    	private void addOverlays(List<Info> infos) {
    		//清屏
    		mBaiduMap.clear();
    		//经度维度
    		LatLng latLng = null;
    		//
    		OverlayOptions options;
    		//将marker放到地图上
    		Marker marker = null;
    		for (Info info : infos) {
    			// 经纬度
    			latLng = new LatLng(info.getLatitude(), info.getLongitude());
    			// 图标--制定marker地图上的位置(图标,放到最上层为5)
    			options = new MarkerOptions().position(latLng).icon(mMarker)
    					.zIndex(5);
    			//加入
    			marker = (Marker) mBaiduMap.addOverlay(options);
    			//marker携带值
    			Bundle arg0 = new Bundle();
    			arg0.putSerializable("info", info);
    			marker.setExtraInfo(arg0);
    		}
    
    		//移动位置
    		MapStatusUpdate msu = MapStatusUpdateFactory.newLatLng(latLng);
    		mBaiduMap.setMapStatus(msu);
    
    	}
    
    
    
    }
    


    MyOrientationListener

    package com.example.homebaimap;
    
    import android.content.Context;
    import android.hardware.Sensor;
    import android.hardware.SensorEvent;
    import android.hardware.SensorEventListener;
    import android.hardware.SensorManager;
    
    public class MyOrientationListener implements SensorEventListener {
    	// 传感器管理工具
    	private SensorManager mSensorManager;
    	private Context mContext;
    	// 传感器
    	private Sensor mSensor;
    	private float lastX;
    
    	//获取环境变量
    	public MyOrientationListener(Context context) {
    		this.mContext = context;
    	}
    
    	// 開始监听
    	@SuppressWarnings("deprecation")
    	public void start() {
    		//获取监听管理者
    		mSensorManager = (SensorManager) mContext
    				.getSystemService(Context.SENSOR_SERVICE);
    		if (mSensorManager != null) {
    			// 获得方向传感器--水平的这里用
    			mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION);
    		}
    
    		//假设手指支持传感器
    		if (mSensor != null) {
    			/**
    			 * 注冊方向改变监听--listener自己实现了传this就可以。传感器,精度,
    			onSensorChanged实现监听的方法
    			 */
    			mSensorManager.registerListener(this, mSensor,
    					SensorManager.SENSOR_DELAY_UI);
    		}
    	}
    
    	// 结束监听
    	public void stop() {
    		mSensorManager.unregisterListener(this);
    	}
    
    	@Override
    	public void onAccuracyChanged(Sensor arg0, int arg1) {
    		// TODO Auto-generated method stub
    
    	}
    
    	// 传感器改变须要的回调方法
    	@SuppressWarnings({ "deprecation" })
    	@Override
    	public void onSensorChanged(SensorEvent event) {
    		//假设检測到方向改变
    		if (event.sensor.getType() == Sensor.TYPE_ORIENTATION) {
    			//假设方向发生改变时候,event会携带一个类型--这里是水平。以及会携带三个数据xyz--这里是x值,而且获取x值
    			float x = event.values[SensorManager.DATA_X];
    
    			//发生变化
    			if (Math.abs(x - lastX) > 1.0) {
    				if (mOnOrientationListener != null) {
    					//这里有一个接口方法。传入最新的x值
    					mOnOrientationListener.onOrientationChanged(x);
    				}
    			}
    
    			lastX = x;
    
    		}
    	}
    
    	private OnOrientationListener mOnOrientationListener;
    
    	public void setOnOrientationListener(
    			OnOrientationListener mOnOrientationListener) {
    		this.mOnOrientationListener = mOnOrientationListener;
    	}
    
    	public interface OnOrientationListener {
    		void onOrientationChanged(float x);
    	}
    
    }
    

    另外还有那个menu文件(无关痛痒的)

    <menu xmlns:android="http://schemas.android.com/apk/res/android" >
    
        <item
            android:id="@+id/id_map_common"
            android:showAsAction="never"
            android:title="普通地图"/>
        <item
            android:id="@+id/id_map_site"
            android:showAsAction="never"
            android:title="卫星地图"/>
        <item
            android:id="@+id/id_map_traffic"
            android:showAsAction="never"
            android:title="实时交通(off)"/>
        <item
            android:id="@+id/id_map_location"
            android:showAsAction="never"
            android:title="我的位置"/>
        <item
            android:id="@+id/id_map_mode_common"
            android:showAsAction="never"
            android:title="普通模式"/>
        <item
            android:id="@+id/id_map_mode_following"
            android:showAsAction="never"
            android:title="尾随模式"/>
        <item
            android:id="@+id/id_map_mode_compass"
            android:showAsAction="never"
            android:title="罗盘模式"/>
        <item
            android:id="@+id/id_add_overlay"
            android:showAsAction="never"
            android:title="加入覆盖物">
        </item>
    
    </menu>


  • 相关阅读:
    Unity3d启动事件
    UI 科学
    LOL
    流光
    PlayerPrefs
    C++
    Android Home
    状态机
    架构设计
    AI
  • 原文地址:https://www.cnblogs.com/wzjhoutai/p/7071369.html
Copyright © 2020-2023  润新知