Android: Google MapView показывает индикатор прогресса во время загрузки карты

Есть ли способ прослушивания, если MapView все еще загружается? Потому что я хочу показать индикатор прогресса (например, песочные часы), в то время как MapView загружает фрагменты карты.

Любое решение?

Solutions Collecting From Web of "Android: Google MapView показывает индикатор прогресса во время загрузки карты"

Документация onDraw для MapView говорит

«Мы рисуем фон карты (загружая плитки в зависимости от ситуации)»

Вы можете попробовать расширить MapView и скрывать индикатор прогресса, как onDraw. Но я предполагаю, что MapTiles загружаются асинхронно, чтобы ваш индикатор выполнения завершился до того, как все MapTiles были загружены.

Вы можете использовать OnCameraChangeListener и OnMapLoadedCallback для имитации этого поведения.

Из документации GoogleMap.OnCameraChangeListener :

Public abstract void onCameraChange (позиция CameraPosition)

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

Это называется основной нитью.

Из документации GoogleMap.OnMapLoadedCallback :

Public abstract void onMapLoaded ()

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

Как указано там, onMapLoaded() будет вызываться только один раз, поэтому стратегия может заключаться в том, чтобы запрашивать один onCameraChange GoogleMap.OnMapLoadedCallback каждый раз, когда onCameraChange .

Вот пример (очень простой), чтобы проиллюстрировать ответ:

 public class MapsActivity extends FragmentActivity implements OnCameraChangeListener, OnMapLoadedCallback { private GoogleMap googleMap; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_maps); SupportMapFragment mapFragment=(SupportMapFragment)getSupportFragmentManager().findFragmentById(R.id.map); googleMap = mapFragment.getMap(); googleMap.setOnCameraChangeListener(this); } @Override public void onMapLoaded() { //TODO: Hide your progress indicator } @Override public void onCameraChange(final CameraPosition cameraPosition) { googleMap.setOnMapLoadedCallback(this); //TODO: Show your progress indicator } } 

В текущей реализации MapView нет прямого API для этого.