Android Java通过Volley响应为Google Maps API添加多标记及自动缩放问题
问题根因
你修改后的代码仅将构造好的MarkerOptions对象存入了列表,没有调用googleMap.addMarker()方法将标记实际渲染到地图上,所以仅能正常缩放到标记所在区域,但看不到任何标记。
修复方案
1. 新增标记渲染逻辑
在解析接口返回数据、构造MarkerOptions的循环中,添加将标记添加到地图的代码:
for(int i=0; i<jsonArray.length();i++){ jsonObject = jsonArray.getJSONObject(i); LatLng vnr = new LatLng(jsonObject.getDouble("latitude"), jsonObject.getDouble("longitude")); MarkerOptions vnrMarker = new MarkerOptions(); vnrMarker.position(vnr); vnrMarker.title(jsonObject.getString("name")); vnrMarker.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED)); // 新增行:将标记渲染到谷歌地图 googleMap.addMarker(vnrMarker); markerList.add(vnrMarker); }
2. 可选优化:添加边界构造的空判断
如果接口返回的服务商列表为空,直接构造LatLngBounds会触发崩溃,建议在showAllMarkers方法开头添加非空判断,同时可以针对单标记场景优化缩放体验:
private void showAllMarkers(GoogleMap googleMap) { // 空数据直接返回,避免崩溃 if (markerList == null || markerList.isEmpty()) { return; } LatLngBounds.Builder builder = new LatLngBounds.Builder(); for (MarkerOptions m : markerList) { builder.include(m.getPosition()); } // 单标记场景直接指定缩放级别,避免自动缩放层级过高 if (markerList.size() == 1) { CameraUpdate cu = CameraUpdateFactory.newLatLngZoom(markerList.get(0).getPosition(), 15f); googleMap.animateCamera(cu); return; } LatLngBounds bounds = builder.build(); int width = getResources().getDisplayMetrics().widthPixels; int height = getResources().getDisplayMetrics().heightPixels; int padding = (int) (width * 0.30); CameraUpdate cu = CameraUpdateFactory.newLatLngBounds(bounds, width, height, padding); googleMap.animateCamera(cu); }
内容的提问来源于stack exchange,提问作者The Only Smart Boy
相关产品推荐
相关产品推荐

