百度地图SDK3.2.0—自定义缩放按钮

转载注明出处:http://blog.csdn.net/zhshulin/article/details/41378927

百度地图SDK3.0今年6月5号更新之后,全面升级SDK接口设计,不兼容老版本。

本文简介:百度地图自带缩放控件很丑,即使在9月18号发布的3.1.1版本中开放了调整位置的接口依然无法满足我的需要,而且百度地图自己的产品就是位于右侧上下排列的两个缩放按钮,看着舒服,用着方便。故而本文说明的就是模仿这种实现的一个简单方法。

这是一个大神的解决方案,他用的百度地图版本为2.3,接口和当前3.0之后的很多不一样,修改之后发现没有metersToEquatorPixels()方法,故而无法直接实现,但是今天发现百度地图SDK3.1.1已经新增了这种方法,故而有需求的同学可以参考他的解决方案,不过需要自己改一改。

http://blog.csdn.net/xiaanming/article/details/11821523

以下是我的解决方案,非常简单:

首先看一下主Activity中的布局文件,很简单的相对布局:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <!-- 添加地图控件 -->

    <com.baidu.mapapi.map.MapView
        android:id="@+id/mapView"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:clickable="true" />

    <RelativeLayout
        android:id="@+id/ZoomControlView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentRight="true"
        android:layout_marginBottom="20.0dip"
        android:layout_marginRight="5.0dip" >

        <Button
            android:id="@+id/zoomin"
            android:layout_width="40dip"
            android:layout_height="40dip"
            android:background="@drawable/zoomin_seletor" />

        <Button
            android:id="@+id/zoomout"
            android:layout_width="40dip"
            android:layout_height="40dip"
            android:layout_below="@+id/zoomin"
            android:background="@drawable/zoomout_seletor" />
    </RelativeLayout>

</RelativeLayout>

这样你就可以在自己的地图上看到两个缩放控件:

接下来就是隐藏百度默认的缩放控件,然后为自己的控件添加点击事件:

隐藏缩放控件在3.0版本中zoomControlsEnabled(boolean enabled)设为false没效果,不知道后面更新3.1.1中有没有解决,有兴趣的可以自己试试。我的解决方法是:

/**
	 * 隐藏缩放控件
	 *
	 * @param mapView
	 */
	private void hideZoomView(MapView mapView) {
		baiduMap = mapView.getMap();
		// 隐藏缩放控件
		int childCount = mapView.getChildCount();
		View zoom = null;
		for (int i = 0; i < childCount; i++) {
			View child = mapView.getChildAt(i);
			if (child instanceof ZoomControls) {
				zoom = child;
				break;
			}
		}
		zoom.setVisibility(View.GONE);
	}

调用这个方法即可隐藏百度自己的缩放控件,然后我们为自定义的两个缩放按钮添加事件即可:

hideZoomView(mapView);// 隐藏缩放控件
		zoomInBtn = (Button) v.findViewById(R.id.zoomin);
		zoomOutBtn = (Button) v.findViewById(R.id.zoomout);
		zoomInBtn.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				float zoomLevel = baiduMap.getMapStatus().zoom;
				L.i(Float.toString(zoomLevel));
				if(zoomLevel<=18){
//					MapStatusUpdateFactory.zoomIn();
					baiduMap.setMapStatus(MapStatusUpdateFactory.zoomIn());
					zoomOutBtn.setEnabled(true);
				}else{
					Toast.makeText(getActivity(), "已经放至最大!", Toast.LENGTH_SHORT).show();
					zoomInBtn.setEnabled(false);
				}
			}
		});
		zoomOutBtn.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				float zoomLevel = baiduMap.getMapStatus().zoom;
				if(zoomLevel>4){
					baiduMap.setMapStatus(MapStatusUpdateFactory.zoomOut());
					zoomInBtn.setEnabled(true);
				}else{
					zoomOutBtn.setEnabled(false);
					Toast.makeText(getActivity(), "已经缩至最小!", Toast.LENGTH_SHORT).show();
				}
			}
		});

这样我们就得到了我们想要的效果了。

源码下载

时间: 2024-10-06 00:07:27

百度地图SDK3.2.0—自定义缩放按钮的相关文章

Android 百度地图 SDK v3.0.0 (二) 定位与结合方向传感器

在上一篇博客中,我们成功把地图导入了我们的项目.本篇我们准备为地图添加:第一,定位功能:第二,与方向传感器结合,通过旋转手机进行道路的方向确认.有了这两个功能,地图已经可以为我服务了~~~~ 效果图: 好了,可以代码,为了方便,我把所有的按钮都放到了menu菜单中. 1.初次启动定位 [java] view plaincopy /** * 定位的客户端 */ private LocationClient mLocationClient; /** * 定位的监听器 */ public MyLoca

百度地图3.1.0(二)基于MapFragment的基本地图

基于Fragment的百度Map也很简单 直接看例子吧: AndroidManifest.xml的配置: 1 <?xml version="1.0" encoding="utf-8"?> 2 <manifest xmlns:android="http://schemas.android.com/apk/res/android" 3 package="com.example.testbaidu_v_3_1" 4

Android 百度地图 SDK v3.0.0 (四) 引入离线地图功能

转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/37758097 一直觉得地图应用支持离线地图很重要啊,我等移动2G屌丝,流量不易,且用且珍惜. 对于官方开发指南对于离线地图的教程,提供了两种方案: 第一,手动导入,先将从官网下载的离线包解压,把vmp文件夹拷入SD卡根目录下的BaiduMapSDK文件夹内.好吧,我表示不能接受,无视了. 第二,接口下载方法如下:mOffline.start(cityid);还比较靠谱,就是没详

百度地图api窗口信息自定义

百度地图加载完后,完全可以用dom方法操作,比较常用的就是点击mark的弹窗,利用jQuery可以很快的创建弹窗,需要注意的就是地图都是异步加载,所以绑定时间要用 jQuery 事件 - delegate() 方法 原文链接http://www.w3school.com.cn/jquery/event_delegate.asp #pop为弹窗容器,#info为弹窗信息 将#info设置成绝对定位信息窗就可以流动了 demo <!DOCTYPE html> <html> <he

百度地图3.1.0(一)Hello BaiduMap

1:在工程里新建libs文件夹,将开发包里的baidumapapi_vX_X_X.jar拷贝到libs根目录下,将libBaiduMapSDK_vX_X_X.so拷贝到libs\armeabi目录下 如图所示: 2:在AndroidManifest中添加开发密钥.所需权限等信息 1 <application 2 <meta-data 3 android:name="com.baidu.lbsapi.API_KEY" 4 android:value="开发者 key

Android 百度地图 SDK v3.0.0 (四) 离线地图功能介绍

转载请注明出处:http://blog.csdn.net/lmj623565791/article/details/37758097 一直认为地图应用支持离线地图非常重要啊.我等移动2G屌丝,流量不易.且用且珍惜. 对于官方开发指南对于离线地图的教程,提供了两种方案: 第一.手动导入,先将从官网下载的离线包解压,把vmp目录拷入SD卡根目录下的BaiduMapSDK目录内. 好吧,我表示不能接受,无视了. 第二,接口下载方法例如以下:mOffline.start(cityid);还比較靠谱,就是

Android 百度地图 SDK v3.0.0 (一)

转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/37729091 最近公司要把百度地图集成的项目中,于是我就研究了一天百度地图的SDK,当前的版本:Android SDK v3.0.0 . 虽然百度地图网上相关代码比较多,大多可能都是比较旧的版本,且百度地图API的改动感觉也比较大,所以再此跟大家分享一下一天的劳动成功. 下面简单展示下,博客中会介绍的功能: 1.功能介绍 a.首先肯定是导入地图,然后就是地图模式的一些切换,普通

百度地图SDK3.4的使用

使用过百度地图的开发者应该都知道原始百度地图的开发的基本流程,但是随着百度地图的更新,百度地图的api有了翻天覆地的变化,最新版本的sdk为v3.4 2015年4月14日上线,优化了许多接口的设计,简单了地图的开发方式.但是,对没有接触过新版地图开发的人来说,依然是望尘莫及,今天我们就一起来学习下最新版百度地图的开发吧 1.获取开发者KEY 下面是官方的说明: 注意:为了给用户提供更优质的服务,Android SDK自v2.1.3版本开始采用了全新的Key验证体系.因此,当您选择使用v2.1.3

Android 百度地图sdk3.2下 离线地图包的导入

前段时间用百度地图,在使用离线地图包导入的时候发现一个问题,从百度官网下载的离线包无法导入,但是用百度地图的demo可以下载离线包使用,当时对方式没什么要求,能用就行,就用他们demo下载离线包,最近对方式有要求了,必须得使用离线包的方式 然后用百度地图的demo都无法导入,然后去网上一查,呵呵,各种同道中人在饱受折磨,经过仔细观察,发现了一些门道,希望能帮助你们 首先,百度离线地图包下载完,在BaiduMap下vmp下有个文件夹,这要注意了这是以一个字母命名的,h或者l,问题就出现在这两个命名