android 百度地图改变MyLocationOverlay默认图标(两种方法)

Android应用中使用百度地图API定位自己的位置(二) 阅读详情

       开放地图API无外乎google ,百度,高德等.其它的还有很多,不过比较好用的就这三种了,如果不需要出国(台湾例外),则最好使用百度地图,性能比高德好的多,无聊的时候自己可以测试测试.

     下面我简单介绍下百度地图的应用.首先地图所需要的key就不多说了.

      在这里我要说明一点:大家在加入jar包的时候一定要加入到libs文件夹中,(不可以是lib),不然运行会出现下面这个错误,我也为此纠结过.希望对你们有帮助,在此write it for you.

       

大家可以参考官方文档和给出的DEMO进行学习,有问题大家一起研究.

在这里我重点说明一下如何改变百度地图在定位自己时的默认蓝色圆圈.

  • Overlay:覆盖物的抽象基类,所有的覆盖物均继承此类的方法,实现用户自定义图层显示。
  • MyLocationOverlay:一个负责显示用户当前位置的Overlay。
第一种方法很简单,我们只需要创建一个继承MyLocationOverlay的类重写其drawMyLocation方法即可.

protected void drawMyLocation(android.graphics.Canvas canvas,
                              MapView mapView,
                              android.location.Location lastFix,
                              GeoPoint myLocation,
                              long when)
绘制“我的位置”点。默认情况下,绘制一个动画的“蓝色点”,可能由一个蓝色圆盘所围绕来标识精度。而且, 如果用户的位置移动到屏幕的边缘,我们已经在构造函数力提供了一个 MapController , 将使用滚动来重新确定地图的中心。
Parameters:
canvas - 待绘制的画布。
mapView - 调用绘制方法的mapView。
lastFix - 最后一个收到的位置信息。
myLocation - 最后一个位置的坐标,萃取成为一个方便的GeoPoint 。
when - 绘制的时间,毫秒。

@Override
	protected void drawMyLocation(Canvas canvas, MapView mapView,
			Location lastFix, GeoPoint myLocation, long when) {
		try {
			Projection projection = mapView.getProjection();
			Point point = new Point();
			projection.toPixels(myLocation, point);

			int x = point.x - bitmap.getWidth() / 2;
			int y = point.y - bitmap.getHeight();
			canvas.drawBitmap(bitmap, x, y, new Paint());

		} catch (Exception e) {
			super.drawMyLocation(canvas, mapView, lastFix, myLocation, when);
		}
	}

这里简单说明一下:point获取到的是我们在屏幕上的点.而我们要显示的图标应该在这个点的正上方,因此x,y的计算大家都不难理解了.

接下来的操作和原来的一样,只需要调用即可.

/***
	 * 初始化map
	 */
	void InitMap() {
		bMapManager = new BMapManager(this);
		bMapManager.init(Key, this);
		super.initMapActivity(bMapManager);

		mMapView = (MapView) findViewById(R.id.bmapsView);
		mMapView.setBuiltInZoomControls(true); // 设置启用内置的缩放控件
		mMapView.setDrawOverlayWhenZooming(true);// 缩放图标仍然show

		mMapController = mMapView.getController();
		
		mMapController.setZoom(16); // 设置地图zoom级别
	}

/***
	 * 添加自己的overlay
	 */
	void addMyOverLay() {
		locationOverlay = new LocationOverLay(MainActivity.this, mMapView);
		overlays = mMapView.getOverlays();
		Bitmap bitmap = BitmapFactory.decodeResource(getResources(),
				R.drawable.location);
		locationOverlay.setBitmap(bitmap);
		overlays.add(locationOverlay);
	}

@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		setTitle("jjhappyforever...");
		InitMap();
		addMyOverLay();

	}

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

	@Override
	protected void onPause() {
		if (bMapManager != null) {
			bMapManager.getLocationManager().removeUpdates(this);
			locationOverlay.disableMyLocation();
			locationOverlay.disableCompass(); // 打开指南针
			bMapManager.stop();
		}
		super.onPause();
	}

	@Override
	protected void onResume() {
		if (bMapManager != null) {
			bMapManager.getLocationManager().requestLocationUpdates(this);
			locationOverlay.enableMyLocation();
			locationOverlay.enableCompass(); // 打开指南针
			bMapManager.start();
		}

		super.onResume();
	}
/***
	 * Location 监听
	 * 
	 * @param arg0
	 */
	@Override
	public void onLocationChanged(Location location) {
		// 获取自己的经纬度点
		GeoPoint geoPoint = new GeoPoint((int) (location.getLatitude() * 1e6),
				(int) (location.getLongitude() * 1e6));
		mMapController.setCenter(geoPoint);
		
	}
定位居中显示.
示例显示:



第二种方案:

我们bMapManager.getLocationManager().requestLocationUpdates(this);获取自身的GeoPoint.那么我们可以根据该GeoPoint创建一个Overlay.其实MyLocationOverlay是Overlay的一个子类,这样我们就不难理解了。发话不多说了,

在这里我们根据自身的GeoPoint添加一个Overlay

/***
	 * Location 监听
	 * 
	 * @param arg0
	 */
	@Override
	public void onLocationChanged(Location location) {
		// 获取自己的经纬度点
		GeoPoint geoPoint = new GeoPoint((int) (location.getLatitude() * 1e6),
				(int) (location.getLongitude() * 1e6));
		mMapController.setCenter(geoPoint);
		 addOverLay(geoPoint);
	}

/***
	 * 添加overlay
	 */
	void addOverLay(GeoPoint geoPoint) {
		overlays = mMapView.getOverlays();
		Bitmap bitmap = BitmapFactory.decodeResource(getResources(),
				R.drawable.location);
		overlay = new MyOverlay(mMapView, bitmap);
		overlay.setGeoPoint(geoPoint);
		overlays.add(overlay);//添加自定义overlay
	}

public class MyOverlay extends Overlay {
	private MapView mapView;
	private Projection projection;
	private Point point;// 屏幕对象的点
	private Bitmap bitmap;

	private GeoPoint geoPoint;// 经纬度点

	public void setGeoPoint(GeoPoint geoPoint) {
		this.geoPoint = geoPoint;
	}

	public MyOverlay(MapView mapView, Bitmap bitmap) {
		super();
		this.mapView = mapView;
		this.bitmap = bitmap;
	}

	@Override
	public void draw(Canvas canvas, MapView arg1, boolean arg2) {
		projection = mapView.getProjection();
		point = new Point();
		projection.toPixels(geoPoint, point);// 将GeoPoint 转换成point.
		int x = point.x - bitmap.getWidth() / 2;
		int y = point.y - bitmap.getHeight();

		canvas.drawBitmap(bitmap, x, y, new Paint());
	}
}

示例显示:



总结:这里我只是学习就用两种方法实现,在做应用时候,大家最好用第一种,实现MyLocationOverlay就可以了,简单另外api还提供好多封装的方法,我们不需要在自己实现.


如有问题请留言 大笑 .








百度地图开发(二)之添加覆盖物 + 地理编码和反地理编码 之前写过一篇关于百度地图开发的blog,主要介绍了百度地图的基本地图的显示。     详见:Android百度地图开发(一)之初体验     下面来看一下地图上覆盖物的添加,以及地理编码和反地理编码。 添加覆盖物     在地图上添加覆盖物,一般需要以下几个步骤:     1. 定义坐标点,有可能是一个,有可能是多个(比如:多边形覆盖物)。     2. 构造OverlayOption 阅读详情

相关推荐

SAP SD模块定价过程后台配置简介

只有手工输入定价时(例如,在定价中的定价浏览屏幕中),或者只有从外部处理转移这些定价时(例如,成本核算),才将这些定价包括在确定(价格确定、输出确定,批次确定)之中。定价过程的定义和分配是SD模块中最核心的配置,包含了条件表、条件类型、存取顺序、发票类型、客户定价过程等,确定了销售订单已什么价格销售、税率、附加折扣等多个条件行程有一个定价过程。12、小计:记录该条件类型在VBAP表中是否存储,以及其后续用途,如记入信贷,占用信贷额度,记入成本等,如果需要金额暂用信贷额度的话,在小计这里选择A即可。

我小时候很黑的博客 3712

百度地图中加载海量点(addOverlay

js脚本如下:               var map = new BMap.Map("map", {});                        // 创建Map实例     map.centerAndZoom(new BMap.Point(105.000, 38.000), 5);     // 初始化地图,设置中心点坐标和地图级别     map.enableScro...

Andrewniu的博客 1万+

药物代谢仿真软件:PKSim_(6).案例研究与实践应用

通过本章的案例研究和实践应用,我们展示了如何利用PKSim软件构建药物动力学模型、进行参数估计、仿真预测和结果分析。这些方法不仅有助于优化药物代谢研究过程,还可以在药物研发中提供重要的数据支持。通过模型的构建和验证,我们可以更好地理解药物在体内的动态变化过程,为临床试验和药物治疗提供科学依据。

kkchenjj的博客 632

百度地图加载大量覆盖物addOverlay耗时问题解决方案

需求: 使用百度地图添加覆盖物,方法addOverlay,接口返回覆盖物列表,每一个覆盖物需要的图片还有文字都由接口决定,覆盖物点击需要对应跳转。 MarkerOptions markerOptions = new MarkerOptions() .position(latLng) ...

u013359807的博客 1万+

百度地图API踩坑(二)

一天更新两篇文章我觉得可以了,请各位大佬点个赞好么,之前有人问我为什么要做JavaScript API GLde 好了,废话不多少,开始本章的踩坑了,

m0_52719001的博客 1942

百度地图 () 添加覆盖物

百度地图 () 添加覆盖物

yuanchun的知识整理 4553

android百度地图更换定位图标,android百度地图定位,改变MyLocationOverlay默认图标(原始为蓝色点)(两种方法)...

开放地图API无外乎google ,百度,高德等.其它的还有很多,不过比较好用的就这三种了,如果不需要出国(台湾例外),则最好使用百度地图,性能比高德好的多,无聊的时候自己可以测试测试.。下面我简单介绍下百度地图的应用.首先地图所需要的key就不多说了.。在这里我要说明一点:大家在加入jar包的时候一定要加入到libs文件夹中,(不可以是lib),不然运行会出现下面这个错误,我也为此纠结过.希望对...

weixin_42355252的博客 1322

android百度地图定位,改变MyLocationOverlay默认图标(原始为蓝色点)(两种方法

开放地图API无外乎google ,百度,高德等.其它的还有很多,不过比较好用的就这三种了,如果不需要出国(台湾例外),则最好使用百度地图,性能比高德好的多,无聊的时候自己可以测试测试.。 下面我简单介绍下百度地图的应用.首先地图所需要的key就不多说了.。 在这里我要说明一点:大家在加入jar包的时候一定要加入到libs文件夹中,(不可以是lib),不然运行会出现下面这个错误,我也为此纠结过

l724225271的专栏 2万+

Android 百度地图开发(二)--- 定位功能之MyLocationOverlay,PopupOverlay的使用

这一篇文章主要讲解的是百度地图的定位功能,然后还有MyLocationOverlay和PopupOverlay两个地图覆盖物的使用,Overlay是“图层”或“覆盖物”的意思,MyLocationOverlay从名字上面理解就是我的位置图层,他能够实现在地图上显示当前位置的图标以及指南针,MyLocationOverlay只负责显示我的位置,位置数据请使用百度定位SDK获取,将获取的位置数据放在一

Mobile Internet developer 13万+

android百度地图自定义图层,百度地图开发之百度地图定位图层基本使用方法讲解...

():基本介绍:百度地图可以直接提供定位功能,并且把位置信息以图层的形式标注在地图上面(PopupView),同时还支持自定义设置图标,这样便于用户直接查看位置信息。要实现以上的方法,我们主要需要用到MyLocationOverlay(在地图上面显示当前位置的一个覆盖物(图层)),PopupOverlay弹出的pop信息类似于Popupwindow。还有以下一些有关定位的类:LocationCl...

weixin_42470145的博客 1769

android 百度地图自定义圆,更改默认图标等常用方法

总结了一下百度地图常用的方法(前提是集成百度地图环境成功): 1:定位到已经经纬度,只需要改变LatLng的参数即可。有两种方法方法1://定义Maker坐标点 LatLng point = new LatLng(39.963175, 116.400244); //构建Marker图标 BitmapDescriptor bitmap = BitmapDescrip

lmq121210的博客 3354

Android应用动态替换icon(动态替换会有某些问题)

Android 动态替换Icon Android通过动态替换icon来实现展示不同的icon。 实现方式 1、在清单文件中配置启动的activity的别名activity-alias 类似这样: <activity android:name=".ui.SplashActivity" android:configChanges...

钢铁烈阳--非花非雾 5152

百度地图API】如何给自定义覆盖物添加事件

摘要:   给marker、lable、circle等Overlay添加事件很简单,直接addEventListener即可。那么,自定义覆盖物的事件应该如何添加呢?我们一起来看一看~ ----------------------------------------------------------------------------------------- 一、定义构造函数并继承Ove...

weixin_34247299的博客 452

百度地图:设置复杂的自定义覆盖物,addOverlay添加自定义覆盖物ComplexCustomOverlay

地图JS API示例中心,以示例的形式介绍百度地图JS API如何使用,为开发者提供丰富的应用参考。地图JS API示例 | 百度地图开放平台。

我驾驶汽车从不是为了从A点到达B点,我喜欢去感受汽车,与之交流,与之融为一体。 1951

电商购物平台Flutter双端APP源码Flutter App

电商购物平台Flutter双端APP源码,是电商CMS购物系统的配套APP,可以编译生成Android和iOS端APP。- 固定产品价格的数字格式- Firebase白屏修复- 购物车摘要问题已修复- 推特登录- 应用默认语言- 通过离线支付为钱包充值- 小错误修复- 添加了接送点选项- 应用启动时自动加载业务设置- 为 facebook 和 google 修复了社交登录问题- 登录持久性问题已修复- 嵌入警告已修复- 注册页面翻译问题已修复- 重构代码以实现可重用性

上一篇: android 瀑布流效果(仿蘑菇街)
下一篇: android 百度地图描绘POI
jjhappyforever.
博客等级 码龄14年 999粉丝 65原创
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值