具有填充的Whay executenewLatLngBounds()函数对相机位置填充没有影响

时间:2016-01-05 09:17:32

标签: android google-maps camera position

当地图准备就绪时,调用onMapReady(GoogleMap googleMap)方法,在此方法showMapDetails(pickUp, dest)内执行,两个标记将添加到地图中,并且相机位置应该与填充内部的标记相匹配。不幸的是,指定的填充对地图的相机位置没有影响,即使logcat显示其值为100" Log.i("padding", padding+"");"

private void showMapDetails(LatLng pickUp, LatLng dest) {
        BitmapDescriptor pickUpMarker = BitmapDescriptorFactory.fromResource(R.drawable.ic_marker);
        mGoogleMap.addMarker(new MarkerOptions().position(pickUp).icon(pickUpMarker));
        BitmapDescriptor destMarker = BitmapDescriptorFactory.fromResource(R.drawable.ic_end_marker);
        mGoogleMap.addMarker(new MarkerOptions().position(dest).icon(destMarker));
        mGoogleMap.animateCamera(createTravelCameraPosition(pickUp, dest));
    }

private CameraUpdate createTravelCameraPosition(LatLng pickUp, LatLng dest) {
        LatLngBounds.Builder builder = new LatLngBounds.Builder();
        builder.include(pickUp);
        builder.include(dest);
        builder.build();
        float dpi = getResources().getDisplayMetrics().density;
        float dp = getResources().getDimension(R.dimen.latlng_bounds_mdpi_padding);
        int padding = (int) (dp*dpi);
        Log.i("padding", padding+"");
        return CameraUpdateFactory.newLatLngBounds(builder.build(), padding);
    }

1 个答案:

答案 0 :(得分:0)

基于[CameraUpdateFactory.newLatLngBounds](https://developers.google.com/android/reference/com/google/android/gms/maps/CameraUpdateFactory.html#newLatLngBounds(com.google.android.gms.maps.model.LatLngBounds,int))说明

  

在地图经过布局之前,请勿使用此相机更新更改相机(为了使此方法正确确定合适的边界框和缩放级别,地图必须具有大小)。否则将抛出IllegalStateException。地图可用是不够的(即getMap()返回一个非空对象);包含地图的视图也必须经过布局,以确定其尺寸。如果您无法确定是否已发生这种情况,请改用newLatLngBounds(LatLngBounds,int,int,int)并手动提供地图的尺寸​​。

它建议您可以使用重写方法提供尺寸和填充,如果您不确定它是否被触发。