222.map4-百度地图添加覆盖物

所有叠加或覆盖到地图的内容,我们统称为地图覆盖物。如标注、矢量图形元素(包括:折线和多边形和圆)、定位图标等。覆盖物拥有自己的地理坐标,当您拖动或缩放地图时,它们会相应的处理。
覆盖物包括:本地覆盖物和搜索覆盖物
本地覆盖物的抽象基类:OverlayOptions(核心类)
圆形覆盖物: CircleOptions
文字覆盖物: TextOptions
marker覆盖物: MarkerOptions
圆点覆盖物:DotOptions
ground 覆盖物:GroundOverlayOptions
圆点覆盖物:DotOptions
多边形覆盖物:PolygonOptions
折线覆盖物:PolylineOptions

弧线覆盖物:ArcOptions

搜索覆盖物抽象类: OverlayManager (核心类)
本地搜索覆盖物:PoiOverlay
驾车路线覆盖物:DrivingRouteOverlay
步行路线覆盖物:WalkingRouteOverlay
换乘路线覆盖物:TransitOverlay
公交路线覆盖物:BusLineOverlay

地图添加圆圈

package com.ldw.zbqq;

import android.os.Bundle;

import com.baidu.mapapi.map.CircleOptions;

/*
 * 覆盖物,地图上画圆形图像
 */
public class CircleOptionsDemo extends BaseActivity {
	
	//重写onCreate添加新方法,画覆盖物
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		
		draw();
	}

	private void draw() {
		// 定义一个圆
		// 圆心 + 半径
		
		// 颜色 + 是否填充 + 圆的线宽
		
		// 覆盖物的操作 
		// ① 创建自己
		CircleOptions circleOptions = new CircleOptions();
		// ② 给自己设置数据
		circleOptions.center(hmPos)// 圆心
		.radius(1000)// 半径 单位是米
		.fillColor(0x60FF0000);// 透明度 红 绿 蓝
//		.stroke(new Stroke(10, 0x600FF000));// 边框 参数1 线宽 参数2 颜色
		// ③ 把覆盖物添加到地图中
		baiduMap.addOverlay(circleOptions);
	}
}

添加文字

package com.ldw.zbqq;

import android.graphics.Typeface;
import android.os.Bundle;

import com.baidu.mapapi.map.TextOptions;

/*
 * 文字覆盖
 */
public class TextOptionsDemo extends BaseActivity {
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		
		draw();
	}

	private void draw() {
		TextOptions textOptions = new TextOptions();
		textOptions.fontColor(0x60FF0000)
		.text("文字") // 文字内容
		.position(hmPos) // 位置
		.fontSize(24)// 字体大小
		.typeface(Typeface.SERIF);// 字体,对称的
//		.rotate(30);// 旋转
		baiduMap.addOverlay(textOptions);
	}
}
MarkerOptions

某个类型的覆盖物,包含多个类型相同、显示方式相同、处理方式相同的项时,使用此类。或者用来标记位置。
开发步骤
设置 marker 覆盖物的位置坐标:position(LatLng position)
设置 marker 覆盖物的标题:title(java.lang.String title)
设置 Marker 覆盖物的图标:icon(BitmapDescriptor icon)
设置 marker 是否允许拖拽,默认不可拖拽:draggable(boolean draggable)
准备好泡泡的layout
在MapView中添加该泡泡
addView(View child, LayoutParams params)
LayoutParams:MapViewLayoutParams
layoutMode(MapViewLayoutParams.ELayoutMode.mapMode)设置为地图模式, yOffset(-5)设置y轴离position的距离
在处理onMarkerClick时更新Layout,利用LayoutParams传递点位信息,同时可以获取标题信息,设置给TextView

图片的切换

//给向东的点添加一个切换动画,图片切换
		ArrayList<BitmapDescriptor> bitmaps = new ArrayList<BitmapDescriptor>();
		bitmaps.add(bitmapDes);
		bitmaps.add(BitmapDescriptorFactory.fromResource(R.drawable.icon_geo));
		markerOptions = new MarkerOptions().title("向东")
				.position(new LatLng(latitude, longitude + 0.001))
				.icons(bitmaps)// 显示多个图片来回切换 帧动画
				.period(10);// 设置多少帧刷新一次图片资源,Marker动画的间隔时间,值越小动画越快
		baiduMap.addOverlay(markerOptions);

Mark覆盖,创建了2个点来添加餐厅的图标位置,并添加了点击事件,点击的时候会弹出pop,通过arrayList让某一个点实现图片切换达到闪动的目的

package com.ldw.zbqq;

import java.util.ArrayList;

import android.os.Bundle;
import android.view.View;

import com.baidu.mapapi.map.BaiduMap.OnMarkerClickListener;
import com.baidu.mapapi.map.BitmapDescriptor;
import com.baidu.mapapi.map.BitmapDescriptorFactory;
import com.baidu.mapapi.map.MapViewLayoutParams;
import com.baidu.mapapi.map.Marker;
import com.baidu.mapapi.map.MarkerOptions;
import com.baidu.mapapi.model.LatLng;
import android.view.ViewGroup.LayoutParams;
import android.widget.TextView;

/*
 * mark覆盖物
 */
public class MarkerOptionsDemo extends BaseActivity{

	private View pop;
	private TextView title;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);

		draw();
		
		// 点击某一个Marker 在脑袋上弹出pop
		initPop();
		
		
		
	}

	private void initPop() {
		// 加载pop 添加到mapview 设置为隐藏
		//布局填充
		pop = View.inflate(getApplicationContext(), R.layout.pop, null);
		//创建一个布局
		LayoutParams params = new MapViewLayoutParams.Builder()
		.layoutMode(MapViewLayoutParams.ELayoutMode.mapMode)// 按照经纬度设置位置
		.position(hmPos)// 不能传null 设置为mapMode时 必须设置position
		.width(MapViewLayoutParams.WRAP_CONTENT)
		.height(MapViewLayoutParams.WRAP_CONTENT)
		.build();
		//pop添加到mapView中
		//params必须是百度地图的params
		mapview.addView(pop, params);
		//一开始隐藏pop
		pop.setVisibility(View.INVISIBLE);
		title = (TextView) pop.findViewById(R.id.title);
		
		
	}

	private void draw() {
		//描述一张图片,听过工厂类创建这个对象
		BitmapDescriptor bitmapDes = BitmapDescriptorFactory
				.fromResource(R.drawable.eat_icon);
		
		MarkerOptions markerOptions = new MarkerOptions();
		markerOptions.position(hmPos)// 设置位置
				.icon(bitmapDes)// 设置图标
				.draggable(true)// 设置是否可以拖拽 默认是否
				.title("餐厅");// 设置标题
		//添加到图层
		baiduMap.addOverlay(markerOptions);
		
		//添加一个新的坐标点
		markerOptions = new MarkerOptions().title("向北")
				.position(new LatLng(latitude + 0.001, longitude))
				.icon(bitmapDes);
		baiduMap.addOverlay(markerOptions);
		
		//给向东的点添加一个切换动画,图片切换
		ArrayList<BitmapDescriptor> bitmaps = new ArrayList<BitmapDescriptor>();
		bitmaps.add(bitmapDes);
		bitmaps.add(BitmapDescriptorFactory.fromResource(R.drawable.icon_geo));
		markerOptions = new MarkerOptions().title("向东")
				.position(new LatLng(latitude, longitude + 0.001))
				.icons(bitmaps)// 显示多个图片来回切换 帧动画
				.period(10);// 设置多少帧刷新一次图片资源,Marker动画的间隔时间,值越小动画越快
		baiduMap.addOverlay(markerOptions);
		
		//添加地图上面的点击事件
		baiduMap.setOnMarkerClickListener(new MyListener());
	}
	
	class MyListener implements OnMarkerClickListener{

		@Override
		public boolean onMarkerClick(Marker arg0) {
			// 当点击时 更新pop的位置 设置为显示
			LayoutParams params = new MapViewLayoutParams.Builder()
			.layoutMode(MapViewLayoutParams.ELayoutMode.mapMode)// 按照经纬度设置位置
			.position(arg0.getPosition())// 不能传null
			.width(MapViewLayoutParams.WRAP_CONTENT)
			.height(MapViewLayoutParams.WRAP_CONTENT)
			.yOffset(-5)// 距离position的像素 向下是正值 向上是负值
			.build();
			mapview.updateViewLayout(pop, params);
			pop.setVisibility(View.VISIBLE);//pop可见
			title.setText(arg0.getTitle());//设置标题
			
			return true;
		}
		
	}
}

基类

package com.ldw.zbqq;

import com.baidu.mapapi.map.BaiduMap;
import com.baidu.mapapi.map.MapStatusUpdate;
import com.baidu.mapapi.map.MapStatusUpdateFactory;
import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.model.LatLng;

import android.app.Activity;
import android.os.Bundle;

/*
 * 基类,后面直接来继承
 */
public class BaseActivity extends Activity {

	protected BaiduMap baiduMap;
	protected MapView mapview;
	protected double latitude = 22.6934487;// 纬度
	protected double longitude = 114.5112523;// 经度
	protected LatLng hmPos = new LatLng(latitude, longitude);
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		
		initManager();
		setContentView(R.layout.common);
		init();
	}
	
	private void initManager() {
//		SDKInitializer.initialize(getApplicationContext()); // 不能传递Activity,必须是全局Context
	}

	private void init() {
		// 设置地图级别(V2.X 3-19 V1.X 3-18)
		// ① 修改了文件的格式 优化了空间的使用(北京 110M 15M)
		// ② 增加了级别 3D效果(18 19)

		mapview = (MapView) findViewById(R.id.mapview);

		baiduMap = mapview.getMap();
		// BaiduMap: 管理具体的某一个MapView : 旋转,移动,缩放,事件。。

		// 描述地图状态将要发生的变化 使用工厂类MapStatusUpdateFactory创建
		MapStatusUpdate mapstatusUpdate = MapStatusUpdateFactory.zoomTo(15);// 默认的级别12
		// 设置缩放级别
		baiduMap.setMapStatus(mapstatusUpdate);

		// LatLng latlng = new LatLng(arg0, arg1);// 坐标 经纬度 参数1 纬度 参数2 经度
		MapStatusUpdate mapstatusUpdatePoint = MapStatusUpdateFactory
				.newLatLng(hmPos);
		// 设置中心点 默认是天安门
		baiduMap.setMapStatus(mapstatusUpdatePoint);

		// mapview.showZoomControls(false);// 默认是true 显示缩放按钮
		//
		// mapview.showScaleControl(false);// 默认是true 显示标尺
	}
	@Override
	protected void onDestroy() {
		mapview.onDestroy();
		super.onDestroy();
	}
	@Override
	protected void onResume() {
		mapview.onResume();
		super.onResume();
	}

	@Override
	protected void onPause() {
		mapview.onPause();
		super.onPause();
	}
}

MainActivity.java列表显示

package com.ldw.zbqq;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;

import com.baidu.mapapi.SDKInitializer;

public class MainActivity extends Activity {

	private static String[] objects = new String[] { "hello world", "图层",
		"圆形覆盖物", "展示文字", "marker覆盖物", "矩形范围内搜索", "圆形区域", "全城搜索", "驾车路线",
		"步行路线", "公交换乘", "我的位置" };
private static Class[] clazzs = new Class[] { HelloWorld.class,
		LayerDemo.class,CircleOptionsDemo.class,TextOptionsDemo.class,MarkerOptionsDemo.class,PoiSearchInBoundsDemo.class};
private ListView list;
private ArrayAdapter<String> adapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
	super.onCreate(savedInstanceState);
	setContentView(R.layout.activity_main);
	list = (ListView) findViewById(R.id.list);

	adapter = new ArrayAdapter<String>(getApplicationContext(),
			R.layout.item, objects);

	list.setAdapter(adapter);
	list.setOnItemClickListener(new OnItemClickListener() {

		@Override
		public void onItemClick(AdapterView<?> parent, View view,
				int position, long id) {
			Intent intent = new Intent(getApplicationContext(),
					clazzs[position]);
			startActivity(intent);
		}
	});

	//注册代码,这个是异步的方法,列表一打开的时候就注册了,防止后面加载数据的时候还没有注册完
	SDKInitializer.initialize(getApplicationContext()); // 不能传递Activity,必须是全局Context
}
    
}



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值