所有叠加或覆盖到地图的内容,我们统称为地图覆盖物。地图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;
}
}
}