Я хочу что-то сделать после загрузки карт Google (карты были заполнены), есть ли способ добиться этого?
Android googlemaps v2 завершает загрузку события или обратного вызова
Ответы (1)
Как отмечает qubz, ViewTreeObserver можно использовать для выполнения обратного вызова после завершения загрузки карты, поэтому пользователь получит, например. правильное расположение сразу после запуска:
@Override
public void onCreate(Bundle savedInstanceState) {
// This is a small hack to enable a onMapLoadingCompleted-functionality to the user.
final View mapView = getSupportFragmentManager().findFragmentById(R.id.google_map_fragment).getView();
if (mapView.getViewTreeObserver().isAlive()) {
mapView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@SuppressWarnings("deprecation")
// We use the new method when supported
@SuppressLint("NewApi")
// We check which build version we are using.
@Override
public void onGlobalLayout() {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) {
mapView.getViewTreeObserver().removeGlobalOnLayoutListener(this);
} else {
mapView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
}
// Send notification that map-loading has completed.
onMapFinishedLoading();
}
});
}
}
protected void onMapFinishedLoading() {
// Do whatever you want to do. Map has completed loading at this point.
Log.i(TAG, "Map finished loading.");
GoogleMap mMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.google_map_fragment))
.getMap();
mMap.moveCamera(CameraUpdateFactory.zoomIn());
}
person
Alexander Pacha
schedule
10.06.2013
К сожалению, это не всегда возвращает загруженную карту, а только видимый и измеренный вид. В настоящее время я не нашел никакого способа, но публикую отложенный Runnable с задержкой x-миллисекунд.
- person joecks; 13.08.2013
Первый: Чего вы хотите добиться? Например, если вы хотите приблизиться к определенной начальной позиции, этот метод finishLoading() будет работать нормально. Загрузка плиток будет асинхронной в фоновом режиме все время, когда пользователь прокручивает страницу, поэтому насколько значимым будет обратный вызов, если определенная часть полностью загружена? Кстати: выполнение задержки чрезвычайно опасно, потому что либо вы слишком долго блокируете своего пользователя (приложение не отвечает), либо вы слишком короткие, и данные не будут загружены готовыми. Поскольку это будет зависеть от скорости соединения для передачи данных, это явно недопустимо!
- person Alexander Pacha; 14.08.2013
Иногда
getViewTreeObserver
не активен в слушателе, даже если жив до addOnGlobalLayoutListener
.
- person xpto; 25.10.2013
MarkerDemoActivity.java
из SDK есть что-то около строки 198, гдеmapView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() { @Override public void onGlobalLayout() { ... ) } });
используется для проверки того, имеет ли карта размер. Я пробовал играть с этим и не добился успеха. - person qubz   schedule 20.01.2013