前两天参加了高德在北航举办的公开课,感觉非常不错。完成老师布置的作业之后,还顺利地拿到了高德开发者认证证书!!

现在来跟大家分享一下,如何快速学习【高德地图Android SDK】的开发。一天包会!连环境如何配置,都在视频里有喔。

基础知识

Android 导航 SDK 是一款针对在线导航的产品,产品功能涵盖路径规划、模拟导航、GPS 定位、自定义导航界面、获取导航播报信息等。此外,该产品的导航路径计算与实时交通信息相结合,力求为用户提供更加合理、准确、人性化的导航服务。Android 导航 SDK 还支持步行路线规划和导航,使您的出行更加顺畅。

开发文档:http://lbs.amap.com/api/android-navi-sdk/summary/

视频教学

一、如何使用Android SDK进行开发01—LBS开放平台简介及环境搭建

点击查看视频教学:http://v.163.com/paike/V8H1BIE6U/VA4PLC1AI.html

二、如何使用Android SDK进行开发02—marker标记

点击查看视频教学:http://v.163.com/paike/V8H1BJ7FL/VA4PMIKG3.html

三、如何使用Android SDK进行开发03—地图Overlay添加

点击查看视频教学:http://v.163.com/paike/V8H1BJ7FL/VA4POFD2H.html

四、如何使用Android SDK进行开发04—搜索功能

点击查看视频教学:http://v.163.com/paike/V8H1BIE6U/VA748DN20.html

课后习题

完成课后习题,就能得到高德开发者认证证书呢!老师布置的作业是这样说的:

题目

做一个简单的记录GPS运动轨迹的小软件。

功能点
1、实时记录gps定位信息,在地图上绘制轨迹。(定位、折线overlay)
2、如果在某个位置点逗留时间超过30秒,还需要使用marker标记。(标记marker)

提交方式
1)发送邮件至<xudong.tang@autonavi.com>
2)需提交一个zip包,里面包含apk和源程序

参与讨论

高德认证开发者QQ群号 253476702

代码揭秘

1、地图显示示意图

地图显示代码

public class BasicMapActivity extends Activity {
private MapView mapView;
private AMap aMap; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// R 需要引用包import com.amapv2.apis.R;
setContentView(R.layout.basicmap_activity);
mapView = (MapView) findViewById(R.id.map);
mapView.onCreate(savedInstanceState);// 必须要写
init();
} /**
* 初始化AMap对象
*/
private void init() {
if (aMap == null) {
aMap = mapView.getMap();
}
} /**
* 方法必须重写
*/
@Override
protected void onResume() {
super.onResume();
mapView.onResume();
} /**
* 方法必须重写
*/
@Override
protected void onPause() {
super.onPause();
mapView.onPause();
} /**
* 方法必须重写
*/
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
mapView.onSaveInstanceState(outState);
} /**
* 方法必须重写
*/
@Override
protected void onDestroy() {
super.onDestroy();
mapView.onDestroy();
}
}

标记示意图

2、标记代码

private void addMarkersToMap()
{
//声明一个动画帧集合。
ArrayList giflist = new ArrayList();
//添加每一帧图片。
giflist.add(BitmapDescriptorFactory.fromResource(R.drawable.navi_map_flash));
giflist.add(BitmapDescriptorFactory.fromResource(R.drawable.navi_map_flash1));
//设置远小近大效果,2.1.0版本新增;设置刷新一次图片资源的周期。
CHENGDU = aMap.addMarker(new MarkerOptions().anchor(0.5f, 0.5f)
.position(Constants.CHENGDU).title("成都市")
.snippet("成都市:30.679879, 104.064855").icons(giflist)
.perspective(true).draggable(true).period(50));
CHENGDU.showInfoWindow();// 设置默认显示一个infowinfow
markerOption = new MarkerOptions();
markerOption.position(Constants.XIAN);
markerOption.title("西安市").snippet("西安市:34.341568, 108.940174");
markerOption.perspective(true);
markerOption.draggable(true);
markerOption.icon(BitmapDescriptorFactory.fromResource(R.drawable.arrow));
XIAN = aMap.addMarker(markerOption);
// 添加带有系统默认icon的marker
drawMa

3、折线示意图

折线代码

private void setUpMap()
{
mColorBar.setOnSeekBarChangeListener(this);
mAlphaBar.setOnSeekBarChangeListener(this);
mWidthBar.setOnSeekBarChangeListener(this);
aMap.moveCamera(CameraUpdateFactory.zoomTo(4));
// 绘制一个虚线三角形
polyline = aMap.addPolyline((new PolylineOptions())
.add(Constants.SHANGHAI, Constants.BEIJING, Constants.CHENGDU)
.width(10).setDottedLine(true).geodesic(true)
.color(Color.argb(255, 1, 1, 1)));
// 绘制一个乌鲁木齐到哈尔滨的大地曲线
aMap.addPolyline((new PolylineOptions())
.add(new LatLng(43.828, 87.621), new LatLng(45.808, 126.55))
.geodesic(true).color(Color.RED));
}
/**
* Polyline中对填充颜色,透明度,画笔宽度设置响应事件
*/
@Override
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser)
{
if (polyline == null)
{
return;
}
if (seekBar == mColorBar)
{
polyline.setColor(Color.argb(progress, 1, 1, 1));
}
else if (seekBar == mAlphaBar)
{
float[] prevHSV = new float[3];
Color.colorToHSV(polyline.getColor(), prevHSV);
polyline.setColor(Color.HSVToColor(progress, prevHSV));
}
else if (seekBar == mWidthBar)
{
polyline.setWidth(progress);
}
}

4、定位示意图

定位代码

/**
* AMapV2地图中简单介绍显示定位小蓝点
*/
public class MultyLocationActivity extends Activity implements LocationSource, AMapLocationListener {
private AMap aMap;
private MapView mapView;
private OnLocationChangedListener mListener;
private LocationManagerProxy mAMapLocationManager; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.locationsource_activity);
mapView = (MapView) findViewById(R.id.map);
mapView.onCreate(savedInstanceState);
init();
} /**
* 初始化AMap对象
*/
private void init() {
if (aMap == null) {
aMap = mapView.getMap();
setUpMap();
}
} private void setUpMap() {
Map.setLocationSource(this);// 设置定位监听
aMap.getUiSettings().setMyLocationButtonEnabled(true);// 设置默认定位按钮是否显示
aMap.setMyLocationEnabled(true);// 设置为true表示显示定位层并可触发定位,false表示隐藏定位层并不可触发定位,默认是false
// 设置定位的类型为定位模式:定位(AMap.LOCATION_TYPE_LOCATE)、跟随(AMap.LOCATION_TYPE_MAP_FOLLOW)
// 地图根据面向方向旋转(AMap.LOCATION_TYPE_MAP_ROTATE)三种模式
aMap.setMyLocationType(AMap.LOCATION_TYPE_LOCATE);
} /**
* 此方法需存在
*/
@Override
protected void onResume() {
super.onResume();
mapView.onResume();
} /**
* 此方法需存在
*/
@Override
protected void onPause() {
super.onPause();
mapView.onPause();
deactivate();
} /**
* 此方法需存在
*/
@Override
protected void onDestroy() {
super.onDestroy();
mapView.onDestroy();
} /**
* 此方法已经废弃
*/
@Override
public void onLocationChanged(Location location) {
} /**
* 定位成功后回调函数
*/
@Override
public void onLocationChanged(AMapLocation amapLocation) {
if (mListener != null && amapLocation != null) {
if (amapLocation.getAMapException().getErrorCode() == 0) {
mListener.onLocationChanged(amapLocation);// 显示系统小蓝点
}
}
} /**
* 激活定位
*/
@Override
public void activate(OnLocationChangedListener listener) {
mListener = listener;
if (mAMapLocationManager == null) {
mAMapLocationManager = LocationManagerProxy.getInstance(this);
//此方法为每隔固定时间会发起一次定位请求,为了减少电量消耗或网络流量消耗,
//注意设置合适的定位时间的间隔,并且在合适时间调用removeUpdates()方法来取消定位请求
//在定位结束后,在合适的生命周期调用destroy()方法
//其中如果间隔时间为-1,则定位只定一次
mAMapLocationManager.requestLocationData(
LocationProviderProxy.AMapNetwork, 60*1000, 10, this);
}
} /**
* 停止定位
*/
@Override
public void deactivate() {
mListener = null;
if (mAMapLocationManager != null) {
mAMapLocationManager.removeUpdates(this);
mAMapLocationManager.destroy();
}
mAMapLocationManager = null;
}
}

最新文章

  1. Mac系统终端命令行不执行命令 总出现command not found解决方法
  2. UESTC 250
  3. kibana使用操作部分
  4. Light OJ 1296 - Again Stone Game (博弈sg函数递推)
  5. (转)MyEclipse设置注释格式
  6. C/C++:作用域、可见性与生存期
  7. ubuntu12.10可用更新源
  8. windows 编程 —— 菜单以及其他资源
  9. Jenkins详细安装与构建部署使用教程(转)
  10. Spring Boot启动过程(二)
  11. Tensorflow开发环境配置及其基本概念
  12. 使用jdk8 stream 统计单词数
  13. Js调用asp.net后台代码
  14. 51Nod 博弈模板题
  15. 从零开始学 Web 之 CSS3(一)CSS3概述,选择器
  16. 在Win7 64位旗舰版下,利用Vs2008编译64位的Qt 4.8.2
  17. netty的decoder encoder
  18. ES6对抽象工厂模式与策略模式结合的实践
  19. 常见排序的JAVA实现和性能测试
  20. 【电子基础】IIC总线工作原理

热门文章

  1. canvas使用1
  2. 用xcode 5 开发访问IOS 7上面的通讯录有问题
  3. 【python】python读取文件报错UnicodeDecodeError: &#39;gbk&#39; codec can&#39;t decode byte 0xac in position 2: illegal multibyte sequence
  4. WordPress基础:在浏览站点时顶部显示工具栏显示隐藏
  5. 关于面试总结8-http协议相关面试题
  6. Nginx中文手冊
  7. spring-framework-3.2.4与hibernate-release-4.3.5下使用HibernateDaoSupport抛出异常
  8. SIP SDP Profile-level-id解析
  9. SVN更新的问题
  10. MySQL Test Suite使用