HERE Android Premium SDK 3.18.5点击选择路线功能异常排查
你遇到的点击全量命中、MapRoute实例无法匹配的问题,可通过以下步骤解决:
核心逻辑说明
MapRoute是地图渲染层实例,每次从Route创建都会生成新对象,因此无法通过内存地址匹配。SDK为所有MapObject(包含MapRoute)提供了自定义数据绑定能力,结合官方提供的点击拾取接口即可实现精准匹配。
实现步骤
- 创建MapRoute时绑定唯一标识
在初始化三条路线的MapRoute时,通过setUserData()方法给每个MapRoute绑定对应Route的唯一标识,你可以直接用三条路线的下标(0/1/2),也可以绑定Route实例本身:
- 创建MapRoute时绑定唯一标识
// 假设你已经有存放三条路线的List<Route> routeList List<MapRoute> mapRouteList = new ArrayList<>(); for (int i = 0; i < routeList.size(); i++) { Route route = routeList.get(i); MapRoute mapRoute = new MapRoute(route); // 绑定路线下标作为标识,也可以写mapRoute.setUserData(route)直接绑定Route实例 mapRoute.setUserData(i); // 初始状态:第一条高亮,其余灰色 if (i == 0) { mapRoute.setColor(Color.BLUE); mapRoute.setZIndex(200); } else { mapRoute.setColor(Color.GRAY); mapRoute.setZIndex(100); } map.addMapObject(mapRoute); mapRouteList.add(mapRoute); }
- 用官方拾取接口处理点击事件
你之前点击所有路线都会高亮,是因为没有用SDK提供的pickMapObjects接口做精准命中判断,自行判断坐标会因为路线重叠导致误判。正确的点击处理逻辑如下:
- 用官方拾取接口处理点击事件
@Override public boolean onTap(PointF tapPoint) { // 第二个参数为触摸容差,单位为像素,设置10~15即可适配手指点击误差 map.pickMapObjects(tapPoint, 15, new Map.PickMapObjectsCallback() { @Override public void onPickMapObjectsCompleted(List<MapObject> pickedObjects) { if (pickedObjects == null || pickedObjects.isEmpty()) { return; } // 过滤拾取结果中的MapRoute,默认取最上层的命中对象 MapRoute selectedRoute = null; for (MapObject obj : pickedObjects) { if (obj instanceof MapRoute) { selectedRoute = (MapRoute) obj; break; } } if (selectedRoute == null) { return; } // 取出绑定的标识,匹配对应路线 int selectedIndex = (int) selectedRoute.getUserData(); // 执行路线样式更新:所有路线设为灰色低zIndex,选中路线设为高亮高zIndex for (int i = 0; i < mapRouteList.size(); i++) { MapRoute route = mapRouteList.get(i); if (i == selectedIndex) { route.setColor(Color.BLUE); route.setZIndex(200); } else { route.setColor(Color.GRAY); route.setZIndex(100); } } } }); return true; }
注意事项
- 路线的zIndex分层要固定,未选中路线统一设为低层级,选中路线设为高层级,避免遮挡同时保证拾取优先级正确
- 不需要每次切换选中状态都重新创建MapRoute,直接调用
setColor、setZIndex修改属性即可,性能更好 - 如果选择直接绑定Route实例到
userData,匹配时直接和你本地存储的Route列表做equals判断即可,不需要维护下标
内容的提问来源于stack exchange,提问作者Darrin Reed
相关产品推荐
相关产品推荐

