Android:Google MapView会在地图加载时显示进度指示器

时间:2012-08-30 08:25:58

标签: android google-maps

如果MapView仍在加载,有没有办法听?因为我想在MapView下载地图图块时显示进度指示器(例如沙漏)。

任何解决方案?

3 个答案:

答案 0 :(得分:4)

您可以使用OnCameraChangeListenerOnMapLoadedCallback来模拟此行为。

来自GoogleMap.OnCameraChangeListener的{​​{3}}:

  

public abstract void onCameraChange(CameraPosition position)

     

相机位置发生变化后调用。在动画期间,   可能不会通知该听众中间相机位置。它   总是在动画中调用最终位置。

     

这是在主线程上调用的。

来自GoogleMap.OnMapLoadedCallback的{​​{3}}:

  

public abstract void onMapLoaded()

     

地图完成渲染后调用。这只会被调用   一旦。如果您想收到通知,您必须请求另一个回调   试。

如上所述,onMapLoaded()只会被调用一次,因此策略可能是每次调用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
    }
}

答案 1 :(得分:2)

MapView的onDraw文档说

  

“我们绘制地图背景(适当加载图块)”

您可以尝试在onDraw完成时扩展MapView并隐藏进度指示器。但我的猜测是MapTiles是异步加载的,所以你的进度条会在MapTiles全部加载之前完成。

答案 2 :(得分:0)

在当前的MapView实施中,没有直接的API来执行此操作。