接着上一篇 自定义地图   自定义地图 继续写自定义导航

高德地图就不写了 官方文档有的 自己去看好了 写的比我好 简单清晰

首先看一下 效果

效果01

可以看出 功能很齐全 但并不是我们想要的

再看一下 我需要的

效果02

效果03

效果04

到这里以后 我就说一下思路

/**

* 思路

*

* 初始化基础地图

* 初始化导航

* 规划路线

* 创建导航图层 并添加规划好的路线

* 自定义需要的一些属性 和 功能 去除高德提供的一些不重要的图层信息

* 将路线添加到地图并开始导航

*

*/

直接上代码

/*思路 * * 初始化基础地图 * 初始化导航 * 规划路线 * 创建导航图层 并添加规划好的路线 *

自定义需要的一些属性 和 功能 去除高德提供的一些不重要的图层信息 * 将路线添加到地图并开始导航 * */

public class

AMapRouteActivity extends Activity implements AMapNaviViewListener,

AMapNaviListener {

private AMapNaviView navi_map;

private AMapNavi aMapNavi;

private List startPointList = new ArrayList<>();// 起点的集合

private List endPointList = new ArrayList<>(); // 终点的集合

private List wayPointList = new ArrayList<>(); // 途径点的集合

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_amaproute);

// 初始化地图并创建地图

navi_map = (AMapNaviView) findViewById(R.id.navi_map);

navi_map.setAMapNaviViewListener(this);

navi_map.onCreate(savedInstanceState);

// 获取地图属性 并设置相关属性

AMapNaviViewOptions options = navi_map.getViewOptions();

// 关闭高德提供的导航图层

options.setLayoutVisible(false);

// 关闭高德提供的导航路线绘制

options.setAutoDrawRoute(false);

// 设置自车位置

options.setCarBitmap(BitmapFactory.decodeResource(this.getResources(),R.mipmap.map_owner_img));

// 设置导航属性

navi_map.setViewOptions(options);

initAMapNavi();

// 添加导航路线 起点 终点 途径点

NaviLatLng start = new NaviLatLng();

NaviLatLng end = new NaviLatLng();

NaviLatLng way1 = new NaviLatLng();

NaviLatLng way2 = new NaviLatLng();

start.setLatitude(30.291779);

start.setLongitude(120.040998);

startPointList.add(start);

end.setLatitude(30.406169);

end.setLongitude(120.305117);

endPointList.add(end);

way1.setLatitude(30.270999);

way1.setLongitude(120.163277);

way2.setLatitude(30.291124);

way2.setLongitude(120.212892);

wayPointList.add(way1);

wayPointList.add(way2);

}

//初始化导航对象

private void initAMapNavi() {

aMapNavi = AMapNavi.getInstance(getApplicationContext());

aMapNavi.addAMapNaviListener(this);

}

// 重写地图的生命周期与activity 同步

@Override

protected void onResume() {

super.onResume();

navi_map.onResume();

}

@Override

protected void onPause() {

super.onPause();

navi_map.onPause();

}

@Override

protected void onDestroy() {

super.onDestroy();

navi_map.onDestroy();

}

@Override

public void onNaviSetting() {

}

// 取消导航监听

@Override

public void onNaviCancel() {

}

// 推出导航监听

@Override

public boolean onNaviBackClick() {

return false;

}

@Override

public void onNaviMapMode(int i) {

}

@Override

public void onNaviTurnClick() {

}

@Override

public void onNextRoadClick() {

}

@Override

public void onScanViewButtonClick() {

}

@Override

public void onLockMap(boolean b) {

}

@Override

public void onNaviViewLoaded() {

}

@Override

public void onInitNaviFailure() {

// 路线规划对象初始化失败

}

@Override

public void onInitNaviSuccess() {

// 路线规划对象初始化成功

/**

* 方法:

*  int strategy=mAMapNavi.strategyConvert(congestion, avoidhightspeed, cost, hightspeed, multipleroute);

* 参数:

* @congestion 躲避拥堵

* @avoidhightspeed 不走高速

* @cost 避免收费

* @hightspeed 高速优先

* @multipleroute 多路径

*

* 说明:

*      以上参数都是boolean类型,其中multipleroute参数表示是否多条路线,如果为true则此策略会算出多条路线。

* 注意:

*      不走高速与高速优先不能同时为true

*      高速优先与避免收费不能同时为true

*/

int i = 0;

try{

// 设置属性

i = aMapNavi.strategyConvert(true, false, false, false, false);

}catch (Exception e){

e.printStackTrace();

}

/**

* 驾车路线规划

* startPointList 起点经纬度

* endPointList  终点经纬度

* wayPointList  途径点经纬度

* i              路线规划属性

*/

aMapNavi.calculateDriveRoute(startPointList,endPointList,wayPointList,i);

}

// 开始导航

@Override

public void onStartNavi(int i) {

}

@Override

public void onTrafficStatusUpdate() {

}

// 位置变化监听

@Override

public void onLocationChange(AMapNaviLocation aMapNaviLocation) {

}

@Override

public void onGetNavigationText(int i, String s) {

}

@Override

public void onEndEmulatorNavi() {

}

@Override

public void onArriveDestination() {

}

@RequiresApi(api = Build.VERSION_CODES.KITKAT)

@Override

public void onCalculateRouteSuccess() {

// 路线规划成功回调

/**

* 创建导航图层对象 并设置地图对象 规划成功后的路线 以及导航监听

*/

RouteOverLay routeOverlay = new RouteOverLay(navi_map.getMap(), aMapNavi.getNaviPath(), this);

//设置起点的图标

routeOverlay.setStartPointBitmap(BitmapFactory.decodeResource(this.getResourse.R.mipmap.map_start_img));

//设置终点的图标

routeOverlay.setEndPointBitmap(BitmapFactory.decodeResource(this.getResources(),

R.mipmap.map_end_img));

//设置途经点的图标

View inflate = LayoutInflater.from(AppManager.getAppManager().currentActivity()).inflate(R.layout.map_custom_marker_img,

null);

RoundImageView roundImg = (RoundImageView) inflate.findViewById(R.id.map_custom_marker);

roundImg.setImageBitmap(BitmapFactory.decodeResource(AppManager.getAppManager().currentActivity().getResources(),R.mipmap.map_passheand_one));

BitmapDescriptor bitmap = BitmapDescriptorFactory.fromBitmap(convertViewToBitmap(inflate));

Bitmap bitmap1 = bitmap.getBitmap();

routeOverlay.setWayPointBitmap(bitmap1);

try {

// 设置线宽

routeOverlay.setWidth(60);

} catch (AMapNaviException e) {

//宽度须>0

e.printStackTrace();

}

int color[] = new int[10];

color[0] = Color.BLACK;

color[1] = Color.RED;

color[2] = Color.BLUE;

color[3] = Color.YELLOW;

color[4] = Color.GRAY;

//以途径点的index分隔,用不同的颜色绘制路段

routeOverlay.addToMap(color, aMapNavi.getNaviPath().getWayPointIndex());

// 开启导航  NaviType.EMULATOR模拟导航  NaviType.GPS实时导航

aMapNavi.startNavi(NaviType.EMULATOR);

}

/**

* view 转为 bitmap 对象

* @param view

* @return

*/

public static Bitmap convertViewToBitmap(View view) {

view.destroyDrawingCache();

view.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED),

View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));

view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight());

view.setDrawingCacheEnabled(true);

return view.getDrawingCache(true);

}

@Override

public void onCalculateRouteFailure(int i) {

// 路线规划失败

}

@Override

public void onReCalculateRouteForYaw() {

}

@Override

public void onReCalculateRouteForTrafficJam() {

}

// 途径点回调

@Override

public void onArrivedWayPoint(int i) {

}

//GPS是否开启

@Override

public void onGpsOpenStatus(boolean b) {

}

// 导航信息变化

@Override

public void onNaviInfoUpdate(NaviInfo naviInfo) {

}

@Override

public void onNaviInfoUpdated(AMapNaviInfo aMapNaviInfo) {

}

@Override

public void updateCameraInfo(AMapNaviCameraInfo[] aMapNaviCameraInfos) {

}

// 区域地图变化

@Override

public void onServiceAreaUpdate(AMapServiceAreaInfo[] aMapServiceAreaInfos) {

}

@Override

public void showCross(AMapNaviCross aMapNaviCross) {

}

@Override

public void hideCross() {

}

@Override

public void showLaneInfo(AMapLaneInfo[] aMapLaneInfos, byte[] bytes, byte[] bytes1) {

}

@Override

public void hideLaneInfo() {

}

@Override

public void onCalculateMultipleRoutesSuccess(int[] ints) {

}

@Override

public void notifyParallelRoad(int i) {

}

@Override

public void OnUpdateTrafficFacility(AMapNaviTrafficFacilityInfo aMapNaviTrafficFacilityInfo) {

}

@Override

public void OnUpdateTrafficFacility(AMapNaviTrafficFacilityInfo[] aMapNaviTrafficFacilityInfos) {

}

@Override

public void OnUpdateTrafficFacility(TrafficFacilityInfo trafficFacilityInfo) {

}

@Override

public void updateAimlessModeStatistics(AimLessModeStat aimLessModeStat) {

}

@Override

public void updateAimlessModeCongestionInfo(AimLessModeCongestionInfoaimLessModeCongestionInfo) {

}

// 行车监听

@Override

public void onPlayRing(int i) {

} }

注释写的很清楚 自己看就好了

如果这个图层的自定义程度 无法满足你的需求 你还可以 这样

/*作者: Nade_S on 2018/6/5. * 绘制导航图层 可完全自定义导航图层 */

public class NaviRouteOverLay extends RouteOverLay {

public NaviRouteOverLay(AMap aMap, AMapNaviPath aMapNaviPath, Context context) {

super(aMap, aMapNaviPath, context);

}

@Override

public void setWidth(float v) throws AMapNaviException {

super.setWidth(v);

}

@Override

public RouteOverlayOptions getRouteOverlayOptions() {

return super.getRouteOverlayOptions();

} }

完全自定义写一个导航图曾类 就好了 一定要先阅读源码 要不然会有你意想不到的惊喜

路线规划 并加载到地图 高德地图并不会自动给你排序 他会按照你提供的途径点顺序呈现在地图上

所以如果你是多路线 按照以上方法 显示到地图上会很low 你有两种方式去实现你想要的效果 一个是通过自定义地图进行多路线规划 一个是通过自定义导航设置途径点进行单路线绘画 但是高德导航并不会进行智能排序

你就需要有你的一套算法进行排序 本人近期已在研究路线规划之最短路线原则算法 下一期敬请期待

路线规划之最短路线原则算法和实现

android自定义导航,Android 高德地图之自定义导航相关推荐

  1. Android高德地图的自定义底图(午夜蓝主题风格地图)

    官网上介绍:地址链接 从 3D 地图 SDK V4.1.3版本开始支持自定义地图底图功能. 功能说明:支持对部分地图元素自定义颜色,包括:填充色.边框色.文字颜色. 先上图,我自己做出来的自定义地图( ...

  2. Android调用高德地图app语音导航

    直接调用高德地图app进行导航 首先,要先进入高德开放平台,注册登录以后,创建自己的APP,然后会生成appkey 高德开放平台网址: http://lbs.amap.com/ 然后下载jar包导入项 ...

  3. Android Map 开发之高德地图

    android Map 开发之google Map 可参考文档    链接 本文总结的是Android Map 开发之高德地图,以下是详细代码及注释: 如何把 API 添加到我的Android 工程中 ...

  4. 只用一个marker 替换 高德_Android基于高德地图完全自定义Marker的实现方法

    前言 相信做地图社交类APP开发的大家都知道,一般情况下,为了整体的美观和用户体验度,我们需要定制化Marker的样式.本文中实现的方式都是基于高德地图的,百度地图也类似,大家可以照葫芦画瓢,废话不多 ...

  5. Android 应用内实现导航页面,接入百度SDK内置导航,高德SDK内置导航

    1.首先到百度地图开放平台创建应用,获取应用AK http://lbsyun.baidu.com/apiconsole/key 2.到百度语言平台创建应用,获取Secret Key和语言APP ID ...

  6. 【Android】APP嵌入百度地图骑行导航一直初始化引擎失败解决办法

    [Android] APP嵌入百度地图骑行导航一直初始化引擎失败解决办法 最近手头上有个需求需要做骑行导航 首先百度地图开放平台http://lbsyun.baidu.com/ 按提示找到Androi ...

  7. 高德地图安卓 拖拽选点_行车记录仪当“眼睛” 高德地图手机AR导航再次升级...

    来源标题:行车记录仪当"眼睛" 高德地图手机AR导航再次升级 高德地图近日发布新版本,AR驾车导航服务再次升级,支持连接车内行车记录仪.由行车记录仪的摄像头充当"眼睛&q ...

  8. 高德地图上线新能源导航 一站式充电服务缓解里程焦虑

    新能源汽车市场正快速发展,为更好地满足新能源车主的出行需求,高德地图在近日发布的V11.0新版本中,增加了专属的新能源导航,可为车主提供充电站一键查找与导航.充电接续路线规划.长途服务区充电提醒.扫码 ...

  9. 高德地图ar步行导航使用教程分享

    高德地图功能多,最近向用户展示了新功能--ar步行导航.很多小伙伴对这个功能还不太了解.所以换换为大家准备了详细的使用教程共享.一起看看吧! 高德地图ar步行导航使用教程 1.打开高德地图.选择下方& ...

  10. 高德地图——骑行导航

    高德地图--骑行导航 插件:plugin=AMap.Riding //中间不能有途径 1.骑行路线--使用keyword new AMap.Riding({map:map,panel:'panel' ...

最新文章

  1. [二]Java虚拟机 jvm内存结构 运行时数据内存 class文件与jvm内存结构的映射 jvm数据类型 虚拟机栈 方法区 堆 含义...
  2. three.js 贴图只显示颜色_C4D作品“花里胡哨”?我怀疑你贴图方式有问题……
  3. TP5 实现转盘抽奖
  4. MDT2012部署问题,MDT中的驱动是如何工作的
  5. SQL Server 大数据搬迁之文件组备份还原实战
  6. 第4讲 李群与李代数
  7. 查看已连接的WiFi密码
  8. python使用pika库调用rabbitmq的参数使用
  9. 支配树 / Dominator_Tree(待补)
  10. 教女朋友用Python快速绘制图表
  11. linux 桌面 修复工具下载,恢复ubuntu20.04默认桌面管理器
  12. matlab的一点内容
  13. java小知识:如何查看class文件的jdk版本
  14. Find_in_set()函数的使用及in()用法详解
  15. Mean ± SEM or Mean(SD)
  16. canmatrix将DBC转为xlsx文件0基础详细教程
  17. [内附完整源码和文档] 基于Qt5的国际跳棋双人网络对战游戏
  18. python 调用dll 东芝_如何在东芝笔记本电脑和Windows 7上使用python进行文本到语音转换?...
  19. BD243迷你特斯拉线圈套件
  20. 详谈数据库泛型:第一、二、三、四和BCN范式

热门文章

  1. H3C无线AP 瘦模式转胖模式 fit转fat
  2. jzoj5442. 【NOIP2017提高A组冲刺11.1】荒诞
  3. 关于达梦数据库认证介绍
  4. 用户路径分析之利器“桑基图”
  5. 服务器运维环境安全体系(上篇)
  6. try的动词用法_try的用法
  7. java生成pdf文件带页码_java(itext) 简单PDF表格生成工具(带页码)
  8. 从键盘输入十个整数,统计非负数的个数,计算非负数的和
  9. 机器视觉中的常用打光方式(明场照明,暗场照明)
  10. Android 项目必备(十四)--> 开发者选项