Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/207.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何在GoogleMap活动完全加载之前显示progressbar_Android_Google Maps_Android Asynctask_Android Progressbar - Fatal编程技术网

Android 如何在GoogleMap活动完全加载之前显示progressbar

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;

我的一个活动中有一个地图视图。每当单击按钮并打开包含Mapview的活动时,它都会冻结当前活动UI,直到包含Mapview的活动完全加载。我的onCreate()方法中有以下代码:

活动本身在MapreadyCallback上实现:

@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()
    的点
  • 我等待相机准备好,然后再画标记和缩放
  • 我认为1无所谓,因为电话本身是不必要的。那就试试看


    希望这能有所帮助。

    谢谢您的帮助。请看我编辑的问题。我的意思是,在进入包含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);
                }
            });
        }
    });