#android #google-maps-android-api-2 #multi-window
#Android #google-maps-android-api-2 #многооконное
Вопрос:
Я анимирую камеру до a 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:
Решение состоит в том, чтобы выбрать минимальный показатель между шириной и высотой, поскольку в многооконном режиме высота может быть меньше ширины:
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);
}