在多窗口模式下,使用百分比填充的Google Maps API v2 newLatLngBounds会引发错误

时间:2016-10-24 18:12:17

标签: android google-maps-android-api-2 multi-window

我正在使用基于设备LatLngBounds百分比的填充设置将相机设置为动态width,以便它适用于小型设备。

即使在具有4英寸显示器的小型设备上也能正常工作,但是在Android 7.0中的多窗口模式和之前支持多窗口模式的设备中它会失败,例如。 Galaxy S7。

我在多窗口模式下的设备上遇到以下异常:

Fatal Exception: java.lang.IllegalStateException: Error using newLatLngBounds(LatLngBounds, int, int, int): View size is too small after padding is applied.

这是可疑代码:

private void animateCamera() {

    // ...

    // Create bounds from positions
    LatLngBounds bounds = latLngBounds(positions);

    // Setup camera movement
    final int width = getResources().getDisplayMetrics().widthPixels;
    final int height = getResources().getDisplayMetrics().heightPixels;
    final int padding = (int) (width * 0.40); // offset from edges of the map in pixels
    CameraUpdate cu = CameraUpdateFactory.newLatLngBounds(bounds, width, height, padding);

    mMap.animateCamera(cu);
}

如何正确设置newLatLngBounds中的填充以适用于所有设备宽度和多窗口模式?

1 个答案:

答案 0 :(得分:6)

解决方法是选择宽度和高度之间的最小度量,因为在多窗口模式下,高度可以小于宽度:

private void animateCamera() {

    // ...

    // Create bounds from positions
    LatLngBounds bounds = latLngBounds(positions);

    // Setup camera movement
    final int width = getResources().getDisplayMetrics().widthPixels;
    final int height = getResources().getDisplayMetrics().heightPixels;
    final int minMetric = Math.min(width, height);
    final int padding = (int) (minMetric * 0.40); // offset from edges of the map in pixels
    CameraUpdate cu = CameraUpdateFactory.newLatLngBounds(bounds, width, height, padding);

    mMap.animateCamera(cu);
}