Android--百度地图学习(第二章)如何给地图覆盖物概述

所有叠加或覆盖到地图的内容,我们统称为地图覆盖物。地图API提供了如下几种覆盖物:
             (1.) Overlay:覆盖物的抽象基类,所有的覆盖物均继承此类的方法,实现用户自定义图层显示。
             (2.)MyLocationOverlay:一个负责显示用户当前位置的Overlay。
             (3.)ItemizedOverlay<Item extends OverlayItem>:Overlay的一个基类,包含了一个OverlayItem列表,相当于一组分条的Overlay,通过继承此类,将一组兴趣点显示在地图上。
             (4.) PoiOverlay:本地搜索图层,提供某一特定地区的位置搜索服务,比如在北京市搜索“公园”,通过此图层将公园显示在地图上 。
 
前边的搭建环境已经介绍完了,现在就不一一的说了,和上一篇的配置一样。如何给地图覆盖物概述?主要是在Activity中书写代码。下面直接贴源码,如果,有什么不明白的,可以给我留言。
 
package com.example.baidumap02;

import java.util.List;

import com.baidu.mapapi.BMapManager;
import com.baidu.mapapi.GeoPoint;
import com.baidu.mapapi.MKGeneralListener;
import com.baidu.mapapi.MapActivity;
import com.baidu.mapapi.MapController;
import com.baidu.mapapi.MapView;
import com.baidu.mapapi.Overlay;

import android.os.Bundle;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Point;
import android.view.Menu;
import android.widget.Toast;

public class MainActivity extends MapActivity {

	private MapView mapview;
	private BMapManager bMapManager;
	
	private String key = "544FAA71566C13CF5A3535787F12CE73970F85EA";
	private MapController mapController;
	GeoPoint geoPoint;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		mapview = (MapView)this.findViewById(R.id.mapview);
		
		bMapManager = new BMapManager(this);
		bMapManager.init(key, new MKGeneralListener() {
			
			@Override
			public void onGetPermissionState(int arg0) {

				if(arg0 == 300){
					Toast.makeText(MainActivity.this, "您输入的key有错误!", 1);
				}
			}
			
			@Override
			public void onGetNetworkState(int arg0) {
				// TODO Auto-generated method stub
				
			}
		});
		
		initMapActivity(bMapManager);
		
		//设置缩放功能
		mapview.setBuiltInZoomControls(true);
		mapController = mapview.getController();
		
		//设置经纬度:成都
		geoPoint = new GeoPoint((int)(30.659*1E6), (int)(104.065*1E6));
		
		mapController.setCenter(geoPoint);//设置一个中心点
		mapController.setZoom(12);
		
		//添加Overlay
		Myoverlay overlay = new Myoverlay();
	    List<Overlay> list = mapview.getOverlays();
		list.add(overlay);
	}

	
	@Override
	protected void onDestroy() {
		// TODO Auto-generated method stub
		super.onDestroy();
		if(bMapManager!=null){
			bMapManager.destroy();
			bMapManager=null;
		}
	}
	
	@Override
	protected void onResume() {
		// TODO Auto-generated method stub
		super.onResume();
		if(bMapManager!=null){
			bMapManager.start();
		}
	}
	
	@Override
	protected void onPause() {
		// TODO Auto-generated method stub
		super.onPause();
		if(bMapManager!=null){
			bMapManager.stop();
		}
	}
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

	@Override
	protected boolean isRouteDisplayed() {
		// TODO Auto-generated method stub
		return false;
	}
	
	class Myoverlay extends Overlay{

		@Override
		public boolean draw(Canvas canvas, MapView mapView, boolean shadow,
				long when) {
			// TODO Auto-generated method stub
			 super.draw(canvas, mapView, shadow, when);
			 Paint paint = new Paint();
			 Point point = new Point();
			 
			 mapView.getProjection().toPixels(geoPoint, point);
			 paint.setStrokeWidth(1);
			 paint.setARGB(255, 255, 0, 0);
			 paint.setStyle(Paint.Style.STROKE);
			 Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.home);
			 canvas.drawBitmap(bmp, point.x, point.y, paint);
			 canvas.drawText("天府广场", point.x, point.y, paint);
			 return true;
		}
		
	}

}

你可能感兴趣的:(Android--百度地图学习(第二章)如何给地图覆盖物概述)