android自定义导航,Android 高德地图之自定义导航
接着上一篇 自定义地图 自定义地图 继续写自定义导航
高德地图就不写了 官方文档有的 自己去看好了 写的比我好 简单清晰
首先看一下 效果
效果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 高德地图之自定义导航相关推荐
- Android高德地图的自定义底图(午夜蓝主题风格地图)
官网上介绍:地址链接 从 3D 地图 SDK V4.1.3版本开始支持自定义地图底图功能. 功能说明:支持对部分地图元素自定义颜色,包括:填充色.边框色.文字颜色. 先上图,我自己做出来的自定义地图( ...
- Android调用高德地图app语音导航
直接调用高德地图app进行导航 首先,要先进入高德开放平台,注册登录以后,创建自己的APP,然后会生成appkey 高德开放平台网址: http://lbs.amap.com/ 然后下载jar包导入项 ...
- Android Map 开发之高德地图
android Map 开发之google Map 可参考文档 链接 本文总结的是Android Map 开发之高德地图,以下是详细代码及注释: 如何把 API 添加到我的Android 工程中 ...
- 只用一个marker 替换 高德_Android基于高德地图完全自定义Marker的实现方法
前言 相信做地图社交类APP开发的大家都知道,一般情况下,为了整体的美观和用户体验度,我们需要定制化Marker的样式.本文中实现的方式都是基于高德地图的,百度地图也类似,大家可以照葫芦画瓢,废话不多 ...
- Android 应用内实现导航页面,接入百度SDK内置导航,高德SDK内置导航
1.首先到百度地图开放平台创建应用,获取应用AK http://lbsyun.baidu.com/apiconsole/key 2.到百度语言平台创建应用,获取Secret Key和语言APP ID ...
- 【Android】APP嵌入百度地图骑行导航一直初始化引擎失败解决办法
[Android] APP嵌入百度地图骑行导航一直初始化引擎失败解决办法 最近手头上有个需求需要做骑行导航 首先百度地图开放平台http://lbsyun.baidu.com/ 按提示找到Androi ...
- 高德地图安卓 拖拽选点_行车记录仪当“眼睛” 高德地图手机AR导航再次升级...
来源标题:行车记录仪当"眼睛" 高德地图手机AR导航再次升级 高德地图近日发布新版本,AR驾车导航服务再次升级,支持连接车内行车记录仪.由行车记录仪的摄像头充当"眼睛&q ...
- 高德地图上线新能源导航 一站式充电服务缓解里程焦虑
新能源汽车市场正快速发展,为更好地满足新能源车主的出行需求,高德地图在近日发布的V11.0新版本中,增加了专属的新能源导航,可为车主提供充电站一键查找与导航.充电接续路线规划.长途服务区充电提醒.扫码 ...
- 高德地图ar步行导航使用教程分享
高德地图功能多,最近向用户展示了新功能--ar步行导航.很多小伙伴对这个功能还不太了解.所以换换为大家准备了详细的使用教程共享.一起看看吧! 高德地图ar步行导航使用教程 1.打开高德地图.选择下方& ...
- 高德地图——骑行导航
高德地图--骑行导航 插件:plugin=AMap.Riding //中间不能有途径 1.骑行路线--使用keyword new AMap.Riding({map:map,panel:'panel' ...
最新文章
- [二]Java虚拟机 jvm内存结构 运行时数据内存 class文件与jvm内存结构的映射 jvm数据类型 虚拟机栈 方法区 堆 含义...
- three.js 贴图只显示颜色_C4D作品“花里胡哨”?我怀疑你贴图方式有问题……
- TP5 实现转盘抽奖
- MDT2012部署问题,MDT中的驱动是如何工作的
- SQL Server 大数据搬迁之文件组备份还原实战
- 第4讲 李群与李代数
- 查看已连接的WiFi密码
- python使用pika库调用rabbitmq的参数使用
- 支配树 / Dominator_Tree(待补)
- 教女朋友用Python快速绘制图表
- linux 桌面 修复工具下载,恢复ubuntu20.04默认桌面管理器
- matlab的一点内容
- java小知识:如何查看class文件的jdk版本
- Find_in_set()函数的使用及in()用法详解
- Mean ± SEM or Mean(SD)
- canmatrix将DBC转为xlsx文件0基础详细教程
- [内附完整源码和文档] 基于Qt5的国际跳棋双人网络对战游戏
- python 调用dll 东芝_如何在东芝笔记本电脑和Windows 7上使用python进行文本到语音转换?...
- BD243迷你特斯拉线圈套件
- 详谈数据库泛型:第一、二、三、四和BCN范式
热门文章
- H3C无线AP 瘦模式转胖模式 fit转fat
- jzoj5442. 【NOIP2017提高A组冲刺11.1】荒诞
- 关于达梦数据库认证介绍
- 用户路径分析之利器“桑基图”
- 服务器运维环境安全体系(上篇)
- try的动词用法_try的用法
- java生成pdf文件带页码_java(itext) 简单PDF表格生成工具(带页码)
- 从键盘输入十个整数,统计非负数的个数,计算非负数的和
- 机器视觉中的常用打光方式(明场照明,暗场照明)
- Android 项目必备(十四)--> 开发者选项