Android学习笔记之使用百度地图实现地图控制
PS:吾之荣耀,离别已久.
学习内容:
1.实现地图控制.
2.百度地图开发的一些细节
1.实现地图控制:
这一篇主要写在百度地图上添加一些其他控制.上一篇书写了覆盖物的添加,地理编码和反地理编码,还有如何实现定位.那么这一篇主要是说一下实现地图控制,以及一些细节.由于我也是看着牛人的博客学习的.因此可能有点杂乱无章.
MapView.
地图控制主要是通过使用MapView类中的一些相关函数来实现地图控制.这里的实现地图控制主要是控制Map上的View视图.在Map上添加或者移除一个View.控制缩放控件和比例尺控件,设置缩放控件和比例尺的相关位置.默认的情况下,MapView是自带缩放控件和比例尺的.
//不显示缩放按钮和比例尺
mapView.showZoomControls(false);
mapView.showScaleControl(false);
设置缩放控件和比例尺的相关位置
mapView.setZoomControlsPosition(new Point(150,60));
mapView.setScaleControlsPosition(new Point(150,60));
这里还需要说明一点就是关于MapView的生命周期问题.MapView的生命周期和当前的Activity是紧密关联的.因此我们需要在Activity当中去设置MapView的生命周期.同时在使用MapView控件的时候必须要使用SDKInitializer.initialize(Context)函数去提供全局的Context信息.
MapView的内部函数其实并不是非常的多.也就这么几种View的相应控制,以及生命周期函数的设定.例举一下内部的相关函数.
mapView.addView(View child,LayoutParams params); //在地图上添加子View.并设置相关的参数.
mapView.onDestory(); //生命周期函数,当Activity被销毁的时候.地图控件也被销毁.
mapView.onPause(); //生命周期函数
mapView.onResume(); //生命周期函数
mapView.remove(View view); //移除MapView上的View视图.
mapView.onLayout(boolean changed,int l,int t,int r,int b); //个人认为是指定mapView的布局.官方API没给出解释.
BaiduMap的监听事件控制
在地图上我们可以设置相关的监听函数.监听的接口如下:
setOnMapClickListener(OnMapClickListener) 点击函数.
bdMap.setOnMapClickListener(new OnMapClickListener() { @Override
public boolean onMapPoiClick(MapPoi arg0) {
// TODO Auto-generated method stub
return false;
} @Override
public void onMapClick(LatLng arg0) {
// TODO Auto-generated method stub
//设置地图中心点
msu = msuFactory.newLatLng(arg0);
bdMap.animateMapStatus(msu);
Toast.makeText(getApplicationContext(), "地图中心点移动到"+arg0.toString(), Toast.LENGTH_SHORT).show();
}
});
setOnMapDoubleClickListener(OnMapClickListener) 双击函数.
bdMap.setOnMapDoubleClickListener(new OnMapDoubleClickListener() {
@Override
public void onMapDoubleClick(LatLng arg0) { }
});
setOnMapLongClickListener(OnMapClickListener) 长按函数.
setOnMapStatusChangerListener(OnMapStatusChangerListener) 地图状态变化的监听函数.
这两个就不列举了.主要是BaiduMap的两个
void animateMapStatus(MapStatusUpdate status)
void animateMapStatus(MapStatusUpdate update int duration)
这两个函数表示当地图状态发生变化的时候.以动画的形式进行改变.第一个函数没有指定动画的时间.默认时间为300毫秒.第二个则是指定时间的动画.传递的参数则是MapStatusUpdate参数.不难看出这个类的含义就是当地图状态发生改变时的更新状态.需要将这个改变的状态封装成MapStatusUpdate对象.然后通过使用animateMapStatus()函数去完成这个变化. MapStatusUpdate是一个静态类.因此实例化对象的方式采用MapStatusUpdateFactory工厂来完成对象的实例化. 这个类的内部函数还是非常的多的.我们可以通过使用内部的函数构造出各种各样的MapStatusUpdate对象..
还是传一张图吧.手打真伤不起..
缩小地图(缩小一个级别)
msu = msuFactory.zoomOut();
bdMap.animateMapStatus(msu);
放大地图(放大一个级别)
msu = msuFactory.zoomIn();
bdMap.animateMapStatus(msu);
设置地图中心点
msu = msuFactory.newLatLng(arg0);
bdMap.animateMapStatus(msu);
其他函数就不一一列举了.我们可以看到这个类的内部存在一个newMapStatus(MapStatus status)函数.这个函数是将MapStatus封装成MapStatusUpdate,然后通过调用animateMapStatus(msu);同样可以完成一个地图的状态更新.那么就不得不说一下MapStatus了.这个类的相关函数如下:
这个类可以设置地图的旋转和俯视效果.设置了相关效果之后.将MapStatus封装成MapStatusUpdate对象.就可以实现旋转和俯视效果的地图状态更新了.实现方式:
设置了一个旋转效果的地图状态.
mapStatus = new MapStatus.Builder(bdMap.getMapStatus()).rotate(rotateAngle +=30).build();
msu = msuFactory.newMapStatus(mapStatus);
bdMap.animateMapStatus(msu);
设置了一个俯视效果的地图状态.
mapStatus = new MapStatus.Builder(bdMap.getMapStatus()).overlook(overlookAngle -=10).build();
msu = msuFactory.newMapStatus(mapStatus);
bdMap.animateMapStatus(msu);
这样通过定义MapStatus对象也能够实现一些地图状态的控制.最后再说一个关于地图截图的问题.个人感觉有点不是非常的使用了.现如今的手机都可以通过快捷键去直接实现截屏功能.这个功能就有点不怎么适用了.既然说了,那么还是要简单的说一下.
实现地图的截图需要使用以下函数.
snapshot()函数..SnapshotReadyCallback()为其回调接口.截屏之后我们还可以对截取到的图片进行数据的保存.
bdMap.snapshot(new SnapshotReadyCallback() { @Override
public void onSnapshotReady(Bitmap bitmap) {
// TODO Auto-generated method stub
File file = new File("/mnt/sdcard/test.png");
FileOutputStream fos = null;
try {
fos = new FileOutputStream(file);
if(bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos)){
fos.flush();
fos.close();
}
Toast.makeText(MapControllActivity.this,"屏幕截图成功,图片存在: " + file.toString(),Toast.LENGTH_SHORT).show(); } catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
2.百度地图开发的一些其他细节.
也算是对自己昨天写的东西进行一些相关的补充.上一篇博客写了关于定位的功能.也就是使用LocationClient去实现客户端定位.同时也说了一下内部的监听函数.实现定位首先需要初始化对象.然后注册定位监听.然后设置相关的定位参数.最后开始定位就可以了.
只是忘记了说另一个监听函数:
NotifyListener()
注册位置提醒监听.位置提醒一般表示的是我们设置了某一位置,当我们快要到达这个位置的时候,开启位置监听.可以通过振动的方式来提示我们已经到达了这个位置的附近.因此这个监听的注册是否必要取决于我们的需求.
并且设置了这些相关监听的同时,我们需要在最后去释放这些监听.
释放的方式:重写onDestory函数去释放.
@Override
protected void onDestroy() {
super.onDestroy();
mapview.onDestroy();
locationClient.unRegisterLocationListener(locationListener);
//取消位置提醒
locationClient.removeNotifyEvent(notifyListener);
locationClient.stop();
}
class MyNotifyListener extends BDNotifyListener {
@Override
public void onNotify(BDLocation bdLocation, float distance) {
super.onNotify(bdLocation, distance);
mVibrator.vibrate(1000);//振动提醒已到设定位置附近
Toast.makeText(LocationActivity.this, "震动提醒", Toast.LENGTH_SHORT).show();
}
}
LocationOptions的相关补充.
LocationOptions表示的是定位参数.我们在定位的时候可以通过设置相关的参数去完善定位.
还要说一下这个定位模式的问题:
1. 高精度定位模式:同时使用网络定位和GPS定位,优先返回最高精度的定位结果。
2. 低功耗定位模式:不使用GPS,只使用网络定位(WiFi和基站)。
3. 仅用设备定位模式: 不适用网络定位,只使用GPS进行定位。但是此模式下不支持室内环境的定位。
LocationOptions的一些相关函数:
LocationClientOption locOption = new LocationClientOption();
locOption.setLocationMode(LocationMode.Hight_Accuracy);// 设置定位模式
locOption.setCoorType("bd09ll");// 设置定位结果类型
locOption.setScanSpan(5000);// 设置发起定位请求的间隔时间,ms
locOption.setIsNeedAddress(true);// 返回的定位结果包含地址信息
locOption.setNeedDeviceDirect(true);// 设置返回结果包含手机的方向
还有关于定位是否能够成功.还是发生了失败的原因,我们可以通过使用getLocType()这个方法获取到,返回的值为int类型.
通过这个值我们就可以判断我们的定位是否成功,并且如果发生了错误,我们可以通过捕捉这个int数据来判断我们在什么位置上发生了错误.通过这个错误信息我们就可以去调试.还是比较方便的.
总体也就这么多了.最后再放上一个代码.方便大家去研究.
http://files.cnblogs.com/files/RGogoing/Map_1.rar
Android学习笔记之使用百度地图实现地图控制的更多相关文章
- 【转】Pro Android学习笔记(二三):用户界面和控制(11):其他控件
目录(?)[-] Chronometer计时器控件 倒计时CountDownTimer Switch控件 Space控件 其他控件 Android提供了很多控件,基本上都是view的扩展. Chron ...
- 【转】Pro Android学习笔记(十三):用户界面和控制(1):UI开发
目录(?)[-] UI开发 方式一通过XML文件 方式二通过代码 方式三XML代码 UI开发 先理清一些UI概念: view.widget.control:这三个名词其实没有什么区别,都是一个UI元素 ...
- Android学习笔记之使用百度地图实现路线规划+公交信息检索
PS:装了个deepin,感觉真的很高大上. 学习内容: 1.公交信息检索 2.路线规划 关于百度地图的开发也就这么多了.重要的部分也就那么些.原本打算搞到poi搜索就算了,不过看到了这两个方面还 ...
- Android学习笔记之使用百度地图实现Poi搜索
PS:装个系统装了一天.心力憔悴.感觉不会再爱了. 学习内容: 1.使用百度Map实现Poi搜索. 2.短串分享 3.在线建议查询 百度地图的研究也算是过半了.能够实现定位,实现相关信息的搜索,实 ...
- 【转】 Pro Android学习笔记(二七):用户界面和控制(15):FrameLayout
FrameLayout FrameLayout通常只包含一个控件.如果我们在FrameLayout中设置多个控件,则第二个控件会堆叠在第一个控件上面,如此类推,一层一层地叠上去.下面的例子,我们在Fr ...
- 【转】 Pro Android学习笔记(二八):用户界面和控制(16):GridLayout
网格布局:GridLayout 我个人觉得GridLayout的设计还不很完善,每个网格的大小,由填充的cell决定,即默认是wrap很容易整个GridLayout超出屏幕.下面是一个例子: < ...
- 【转】Pro Android学习笔记(十七):用户界面和控制(5):日期和时间控件
目录(?)[-] DatePicker和TimePicker控件 DigitalClock和AnalogClock控件 DatePicker和TimePicker控件 使用DatePicker和Tim ...
- 【转】Pro Android学习笔记(十四):用户界面和控制(2):Text类控制
目录(?)[-] TextView 例子1在XML中设置autoLink属性 例子2在代码中设置autoLink属性 EditText AutoCompleteTextView MultiAutoCo ...
- udacity android 学习笔记: lesson 4 part a
udacity android 学习笔记: lesson 4 part a 作者:干货店打杂的 /titer1 /Archimedes 出处:https://code.csdn.net/titer1 ...
随机推荐
- github host你懂得,如果你是程序员请不要乱传,求求了
可用截止测试时间 2015-01-12 github相关的hosts 207.97.227.239 github.com 65.74.177.129 www.github.com 207.97.227 ...
- NGUI 减少drawcall规则
前置说明一: Unity中的drawcall定义: 每次引擎准备数据并通知GPU的过程称为一次Draw Call. Unity(或者说基本所有图形引擎)生成一帧画面的处理过程大致可以这样简化描述:引擎 ...
- linux上挂载windows共享文件夹
linux上挂载windows共享文件夹 1.共享windows目录 挂载之前得创建一个有password的用户(当前用户也能够),并将你要挂载的目录进行共享,并赋予读写权限 如图. watermar ...
- Scala 深入浅出实战经典 第43讲:主要介绍类型变量bound
王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-64讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 ...
- http协议读书笔记3-Web服务器
一.web服务器的实现 web服务器逻辑实现了HTTP协议和相关的TCP连接处理,管理着web资源,并负责提供Web服务器的管理功能.web服务器逻辑和操作系统共同负责管理TCP连接.底层操作系统负责 ...
- 【转载】酷酷的CSS3三角形运用
转载:http://www.cnblogs.com/keepfool/p/5616326.html 概述 在早期的前端Web设计开发年代,完成一些页面元素时,我们必须要有专业的PS美工爸爸,由PS美工 ...
- asp.net 后台获取flv视频地址进行播放
源码下载:http://download.csdn.net/detail/njxiaogui/7609687 前台:.aspx <table> <tr> <td>& ...
- 笔记 - 本地拦截genymotion或者Android模拟器的网络请求
我们在主机上面运行了Burp或者fiddler,那么代理已经监听在本机的8080端口了. 那么我们需要在模拟器中进行如下设置: 1.在设置中,长按当前连接的wifi网络,弹出如下: 2. 点击修改网络 ...
- Linux之date
近期学习需要根据不同的日期的数据,做同样的操作,如果一遍遍的手动操作,太笨重了,有些愚公的味道.所以就想着在shell下,将时间当做变量,然后重复其他的操作. 这里的需求是得到从某天(例如:2014- ...
- MySQL的表分区
什么是表分区通俗地讲表分区是将一大表,根据条件分割成若干个小表.mysql5.1开始支持数据表分区了.如:某用户表的记录超过了600万条,那么就可以根据入库日期将表分区,也可以根据所在地将表分区.当然 ...