Android 如何在GoogleMap活动完全加载之前显示progressbar
我的一个活动中有一个地图视图。每当单击按钮并打开包含Mapview的活动时,它都会冻结当前活动UI,直到包含Mapview的活动完全加载。我的onCreate()方法中有以下代码: 活动本身在MapreadyCallback上实现:Android 如何在GoogleMap活动完全加载之前显示progressbar,android,google-maps,android-asynctask,android-progressbar,Android,Google Maps,Android Asynctask,Android Progressbar,我的一个活动中有一个地图视图。每当单击按钮并打开包含Mapview的活动时,它都会冻结当前活动UI,直到包含Mapview的活动完全加载。我的onCreate()方法中有以下代码: 活动本身在MapreadyCallback上实现: @Override public void onMapReady(GoogleMap googleMap) { MapsInitializer.initialize(JobDetail.this); mGoogleMap = googleMap;
@Override
public void onMapReady(GoogleMap googleMap) {
MapsInitializer.initialize(JobDetail.this);
mGoogleMap = googleMap;
googleMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
if(latitude!= null && longitude!= null){
googleMap.addMarker(new MarkerOptions().position(new LatLng(latitude,longitude)).title(post_location));
CameraPosition markposition = CameraPosition.builder().target(new LatLng(latitude,longitude)).zoom(16).bearing(0).tilt(45).build();
googleMap.moveCamera(CameraUpdateFactory.newCameraPosition(markposition));
}
}
如何使屏幕变暗并显示进度条,直到googlemapview的活动完全加载并准备好显示?我已经阅读了一些建议使用Asynctask的答案,但是如何使用GoogleMapView实现这一点?您可以做的是:在调用activity时显示进度,在onmaReady()中,您可以取消或隐藏进度,并将visibility属性更改为VISIBLE。 诸如此类:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mProgressBar = (ProgressBar) findViewById(R.id.progressbar);
mMapView = (MapView) findViewById(R.id.map);
mMapView.setVisibility(View.INVISIBLE);
progressBar.setVisibility(View.VISIBLE);
}
@Override
public void onMapReady(GoogleMap googleMap) {
MapsInitializer.initialize(JobDetail.this);
mGoogleMap = googleMap;
googleMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
if(latitude!= null && longitude!= null){
googleMap.addMarker(new MarkerOptions().position(new LatLng(latitude,longitude)).title(post_location));
CameraPosition markposition = CameraPosition.builder().target(new LatLng(latitude,longitude)).zoom(16).bearing(0).tilt(45).build();
googleMap.moveCamera(CameraUpdateFactory.newCameraPosition(markposition));
}
mMapView.setVisibility(View.VISIBLE);
progressBar.setVisibility(View.INVISIBLE);
}
它将冻结UI,直到活动完全加载
我不认为加载地图应该首先冻结UI。我有一个应用程序,在一个活动中,地图占据了整个房地产,而在另一个活动中,地图占据了半个屏幕以及一些图像和文本视图。在这两种情况下,我看不到UI中有任何冻结。请参阅下面我的代码片段
mMapView = (MapView) rootView.findViewById(R.id.mapView);
mMapView.onCreate(savedInstanceState);
mMapView.onResume(); // needed to get the map to display immediately
try {
Log.i(TAG, "initializing map");
MapsInitializer.initialize(mContext);
} catch (Exception e) {
Log.e(TAG, "error while initializing map screen" + e);
e.printStackTrace();
}
mMapView.getMapAsync(new OnMapReadyCallback() {
@Override
public void onMapReady(GoogleMap mMap) {
googleMap = mMap;
googleMap.setOnCameraIdleListener(new GoogleMap.OnCameraIdleListener() {
@Override
public void onCameraIdle() {
mCameraReady = true;
if(latitude!= null && longitude!= null){
googleMap.addMarker(new MarkerOptions().position(new LatLng(latitude,longitude)).title(post_location));
CameraPosition markposition = CameraPosition.builder().target(new LatLng(latitude,longitude)).zoom(16).bearing(0).tilt(45).build();
googleMap.moveCamera(CameraUpdateFactory.newCameraPosition(markposition));
}
googleMap.setOnCameraIdleListener(null);
}
});
}
});
它和你的差不多,只是
MapsInitializer.initialize()
的点希望这能有所帮助。谢谢您的帮助。请看我编辑的问题。我的意思是,在进入包含MapView的活动之前,它会冻结当前的活动UI。我怀疑它是在谷歌地图准备展示之前加载的。我也不知道地图视图如何冻结当前的活动。我认为冻结根本不是因为地图组件。您是否尝试从活动中删除映射组件并检查冻结问题是否消失?
mMapView = (MapView) rootView.findViewById(R.id.mapView);
mMapView.onCreate(savedInstanceState);
mMapView.onResume(); // needed to get the map to display immediately
try {
Log.i(TAG, "initializing map");
MapsInitializer.initialize(mContext);
} catch (Exception e) {
Log.e(TAG, "error while initializing map screen" + e);
e.printStackTrace();
}
mMapView.getMapAsync(new OnMapReadyCallback() {
@Override
public void onMapReady(GoogleMap mMap) {
googleMap = mMap;
googleMap.setOnCameraIdleListener(new GoogleMap.OnCameraIdleListener() {
@Override
public void onCameraIdle() {
mCameraReady = true;
if(latitude!= null && longitude!= null){
googleMap.addMarker(new MarkerOptions().position(new LatLng(latitude,longitude)).title(post_location));
CameraPosition markposition = CameraPosition.builder().target(new LatLng(latitude,longitude)).zoom(16).bearing(0).tilt(45).build();
googleMap.moveCamera(CameraUpdateFactory.newCameraPosition(markposition));
}
googleMap.setOnCameraIdleListener(null);
}
});
}
});