Обнаруживать, когда загружены карты Android v2

Я пишу приложение, которое будет делать 9 снимков карты вокруг области, когда пользователь нажимает кнопку.

В цикле, используя это для перемещения и сохранения:

map.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(mStartLat + (mMultiOffsetX + mWidth), mStartLng + (mMultiOffsetY + mHeight)), mZoom)); 
map.snapshot(this);

и в onSnapshotReady:

final String fileName = Environment.getExternalStorageDirectory().getAbsolutePath() + String.format("/test_maps/map_%f_%f.png", Double.valueOf(mStartLat + (mMultiOffsetX * mWidth)), Double.valueOf(mStartLng + (mMultiOffsetY * mHeight)));
FileOutputStream fos = new FileOutputStream(new File(fileName));
bmp.compress(CompressFormat.PNG, 0, fos);

К сожалению, карта иногда заканчивается загрузкой, когда снимок сделан, поэтому вы получаете: Partially blurred map snapshot

Итак, есть ли способ обнаружить или установить прослушиватель для завершения загрузки карты?

Ответы

Ответ 1

OnMapLoadedCallback не срабатывает до тех пор, пока не будут загружены плитки на карте. Только один раз, так что вам придется называть его девять раз, чтобы сделать девять снимков.

Когда у вас есть ссылка на карту, установите обратный вызов.

mMap.setOnMapLoadedCallback(this);

При срабатывании события onMapLoaded выполняется моментальный снимок.

@Override
public void onMapLoaded() {
if (mMap != null) {
    mMap.snapshot(this);
}
}

Дополнительную информацию см. в документации: https://developers.google.com/maps/documentation/android/reference/com/google/android/gms/maps/GoogleMap.OnMapLoadedCallback

Удача

**** история ожидания этой функции.

Обновление:       Статус: Исправлено       Ярлыки: Fixed-Oct2013

Комментарий № 3 по вопросу 5779 от schr... @google.com: Возможность получать уведомления, когда карта полностью загружена/отображена http://code.google.com/p/gmaps-api-issues/issues/detail?id=5779

В последнюю версию API Android Google Maps v2 добавлен интерфейс обратного вызова, загруженный картой.

Дополнительную информацию см. в документации: https://developers.google.com/maps/documentation/android/reference/com/google/android/gms/maps/GoogleMap.OnMapLoadedCallback

Спасибо всем за главную роль 5779 и 61675 Danny117

**** изменить ****

Пожалуйста, начните эту проблему, если вы придете сюда. http://code.google.com/p/android/issues/detail?id=61675 Ваши клики по звездам побудят Google переместиться по этой проблеме.

Обновление карты 13 вызывает проблемы с сервисами Google Play, поэтому вы еще не можете использовать новый OnMapLoadedCallback. Вы можете скомпилировать его, но карта api генерирует сообщение об ошибке в устаревших службах Google Play. Требуется 4030500, но найдено 3266130

* edit * Новый OnMapLoadedCallback

Обновление:       Статус: Исправлено       Ярлыки: Fixed-Oct2013

Комментарий № 3 по вопросу 5779 от schr... @google.com: Возможность получать уведомления, когда карта полностью загружена/отображена http://code.google.com/p/gmaps-api-issues/issues/detail?id=5779

В последнюю версию API Android Google Maps v2 добавлен интерфейс обратного вызова, загруженный картой.

Дополнительную информацию см. в документации: https://developers.google.com/maps/documentation/android/reference/com/google/android/gms/maps/GoogleMap.OnMapLoadedCallback

Спасибо всем за главную роль 5779. Danny117

**** Следующие устаревшие *****

Похоже, его ждет решение для обновления. Я щелкнул звездой для вас, поскольку я собирался работать над этой функцией на моей собственной карте api v2.

редактировать *** Это предлагаемый новый обратный вызов для отображения карты. Все, кто посещает, проследуют по ссылке и ставят эту проблему. http://code.google.com/p/gmaps-api-issues/issues/detail?id=5779

*** предыдущий обратный вызов snapshop не будет изменен. Все, кто посещает, проследуют по ссылке и ставят эту проблему. http://code.google.com/p/gmaps-api-issues/issues/detail?id=5712

https://developers.google.com/maps/documentation/android/reference/com/google/android/gms/maps/GoogleMap.SnapshotReadyCallback

Ответ 2

Как я понял, этот вопрос еще не решен. Не знаю, почему, но для меня, когда карта закончила загрузку, вызывается OnCameraChangeListener. Поэтому я просто использую это, чтобы обнаружить, когда карта закончила загрузку.

googleMap.setOnCameraChangeListener(new OnCameraChangeListener() {
        @Override
        public void onCameraChange(CameraPosition arg0) {
            map.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(
                    mStartLat + (mMultiOffsetX + mWidth), mStartLng
                            + (mMultiOffsetY + mHeight)), mZoom));
            map.snapshot(this);
        }
    });

Ответ 3

Попробуйте использовать класс ViewStub, чтобы помочь вам с ленивой загрузкой вашей карты. Вы можете определить, когда карта загружается с помощью этого кода:

public void onShowMap(View v) {
    // where you put the MapView layout in ViewStub view
    ViewStub.setVisibility(View.VISIBLE);
}