You need to enable JavaScript to run this app. Google Map API标记距离过远无法全部显示,如何让标记适配手机屏幕?
优惠活动
大模型
产品
解决方案
定价
更多

Google Map API标记距离过远无法全部显示,如何让标记适配手机屏幕?

解决方案

你需要通过LatLngBounds计算所有标记的坐标范围,控制地图相机缩放到该范围即可实现所有标记适配屏幕显示,同时可自定义内边距避免标记被屏幕边缘截断。

核心修改逻辑

  • 构建包含所有标记坐标的LatLngBounds对象
  • 在地图加载完成的回调中调用相机更新方法,将视图移动到刚好覆盖所有标记的范围

修改后的完整代码

static final LatLng HAMBURG = new LatLng(46.227638, 2.213749); // 示例坐标
static final LatLng HAMBURG_2 = new LatLng(-44.339565,147.637862); // 示例坐标

MapView map;
map = findViewById(R.id.mapView);

map.onCreate(null);
map.getMapAsync(new OnMapReadyCallback() {
    @Override
    public void onMapReady(final GoogleMap googleMap) {
        // 添加两个标记
        googleMap.addMarker(new MarkerOptions()
                .position(HAMBURG)
                .title("First Pit Stop")
                .icon(BitmapDescriptorFactory
                        .defaultMarker(BitmapDescriptorFactory.HUE_RED)));
        googleMap.addMarker(new MarkerOptions()
                .position(HAMBURG_2)
                .title("Wrong Turn!")
                .icon(BitmapDescriptorFactory
                        .defaultMarker(BitmapDescriptorFactory.HUE_RED)));

        googleMap.setOnMapLoadedCallback(new GoogleMap.OnMapLoadedCallback() {
            @Override
            public void onMapLoaded() {
                // 添加折线
                PolylineOptions options = new PolylineOptions().width(5).color(Color.BLACK);
                options.add(HAMBURG, HAMBURG_2);
                googleMap.addPolyline(options);
                
                // 构建包含所有标记的坐标边界
                LatLngBounds.Builder boundsBuilder = new LatLngBounds.Builder();
                boundsBuilder.include(HAMBURG);
                boundsBuilder.include(HAMBURG_2);
                LatLngBounds bounds = boundsBuilder.build();
                
                // 第二个参数是屏幕内边距,单位为像素,可根据需求调整
                CameraUpdate cameraUpdate = CameraUpdateFactory.newLatLngBounds(bounds, 100);
                // 若需要缩放动画可替换为googleMap.animateCamera(cameraUpdate)
                googleMap.moveCamera(cameraUpdate);
            }
        });

        map.onResume();
    }
});

注意事项

  • 内边距数值可根据你的页面布局灵活调整,若地图区域顶部有悬浮标题栏,可使用重载方法newLatLngBounds(bounds, paddingLeft, paddingTop, paddingRight, paddingBottom)单独设置四个方向的内边距
  • 后续新增标记时,只需将新标记的LatLng加入boundsBuilder即可自动适配所有标记的显示范围
  • 必须在地图加载完成的回调中执行边界适配逻辑,避免地图尺寸未初始化导致的适配错误

内容的提问来源于stack exchange,提问作者kam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.20 11:15:05