it-swarm.com.ru

Определить, когда загружены карты 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

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

15
Ray Britton

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/проблемы/детали? id = 5779

Интерфейс обратного вызова загруженной карты был добавлен в последнюю версию Google Maps Android API 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 генерирует сообщение об ошибке в logcat Сервисы Google Play устарели. Требуется 4030500, но найдено 3266130

* edit * Совершенно новый OnMapLoadedCallback

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

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

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

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

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

**** Следующее устарело *****

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

edit *** Это предлагаемый новый обратный вызов для отображения карты . Всем, кто посещает, перейдите по ссылке и пометьте эту проблему . http://code.google.com/p/gmaps-api-проблемы/проблемы/подробно? 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

46
danny117

Как я увидел, этот вопрос до сих пор не решен ... Не знаю почему, но для меня, когда карта закончила загрузку, вызывается 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);
        }
    });
4
kroky

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

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