4

小さなデバイスで動作するように、デバイスのパーセンテージLatLngBoundsに基づいてパディング セットを使用してカメラをアニメーション化しています。width

これは 4 インチ ディスプレイの小型デバイスでも機能しますが、Android 7.0 のマルチウィンドウ モードとそれ以前のマルチウィンドウ モードをサポートするデバイスでは失敗します。ギャラクシー 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すべてのデバイス幅とマルチウィンドウ モードでパディングを適切に設定するにはどうすればよいですか?

4

1 に答える 1

8

解決策は、幅と高さの間の最小メトリックを選択することです。これは、マルチウィンドウ モードでは高さが幅よりも小さくなる可能性があるためです。

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);
}
于 2016-10-24T19:22:18.830 に答える