【问题标题】:Add extra padding around CameraUpdateFactory.newLatLngBounds在 CameraUpdateFactory.newLatLngBounds 周围添加额外的填充
【发布时间】:2017-04-16 21:15:33
【问题描述】:

我需要在我显示的地图上的标记周围添加额外的填充。

这是目前为止的代码,但顶部和底部或西部和东部标记位于屏幕边缘。

 @Override
public void onMapReady(GoogleMap googleMap) {
    mMap = googleMap;


    mMap.setOnMapLoadedCallback(new GoogleMap.OnMapLoadedCallback() {
        @Override
        public void onMapLoaded() {
            LatLngBounds.Builder builder = new LatLngBounds.Builder();
            for (int i = 0; i < arrayList.size(); i++) {
                options.position(latlngs.get(i));
                options.title(arrayList.get(i).getArea().toString());
                options.snippet(arrayList.get(i).getRegion().toString());
                mMap.addMarker(options);
                builder.include(latlngs.get(i));
            }
            LatLngBounds bounds = builder.build();
            int padding = 0;
            CameraUpdate cameraUpdate = CameraUpdateFactory.newLatLngBounds(bounds, padding);

            mMap.moveCamera(cameraUpdate);            }
    });

}

这是我得到的:

这就是我想要的: 那么如何添加一些填充以便我可以看到所有标记,但不能让标记与地图边缘对接呢?感谢您的任何意见。

【问题讨论】:

    标签: java android google-maps


    【解决方案1】:

    您的代码中已经有了填充值。

    只需将int padding = 0; 的值增加到更高的值(例如int padding = 100;

    【讨论】:

      【解决方案2】:

      设置填充值> 0
      示例:
      int padding = 50;

      【讨论】:

      • 50 似乎效果很好,我想我尝试了 5 但它不起作用,并假设填充影响了地图的其他方面。很高兴解决了这个问题。非常感谢,
      【解决方案3】:

      我还建议@Zumry Mohamed 来自线程:Android map v2 zoom to show all the markers 的解决方案,这对我来说效果最好:

      width = getResources().getDisplayMetrics().widthPixels;
      height = getResources().getDisplayMetrics().heightPixels;
      padding = (int) (width * 0.20); // offset from edges of the map - 20% of screen
      CameraUpdate cameraUpdate = CameraUpdateFactory.newLatLngBounds(bounds,, width, height, padding);
      

      【讨论】:

      • 感谢您,因为我升级到 kotlin,但它现在坏了,我需要在工作后修复它。
      【解决方案4】:

      这是用于设置地图的填充。在下面的方法中,您可以制作地图以将相机聚焦在 latlngbounds 上,并且您提供的填充将从所有侧面给出。

      CameraUpdateFactory.newLatLngBounds(LatLngBounds bounds, int padding)
      

      可用于指定特定方向的填充的第二种方法:

      GoogleMap.setPadding(     10,      20,      20,     50);
      

      这里的参数是像素(Int),左,上,右,下。 我以下列方式使用了上述两种方法。

      fun moveCameraToPolyLine(polyline: Polyline, googleMap: GoogleMap?) {
          val builder = moveCameraToPolyline(polyline)
          builder.let {builder->
              googleMap?.let {googleMap ->
                  googleMap.animateCamera(CameraUpdateFactory.newLatLngBounds(builder!!.build(), 300))
      setDirectionalPaddingToGoogleMap(300,300,300,600)
              }
          }
      }
      
      //left,top,right,bottom in pixels
      fun setDirectionalPaddingToGoogleMap(googleMap: GoogleMap?,left :Int,top : Int, right : Int, bottom : Int){
          googleMap?.setPadding(left,top,right,bottom)
      }
      

      【讨论】: