在用户交互之前,GoogleMap不会加载详细地图

时间:2019-08-08 14:44:58

标签: android google-maps android-maps-v2

我正在android上编写一个应用程序,该应用程序将显示google maps中的地图。启动应用程序时,地图以当前位置为中心。当我使用animateCamera时,可以看到整个世界的放大动画,直到它聚焦在当前位置为止。

问题是我需要触摸地图才能以预期的缩放级别显示地图。

这是我触摸屏幕之前得到的: Before touch

这是我触摸屏幕后得到的: After touch

如果我触摸屏幕,图像将保持良好状态,直到我行驶几百米,然后再次无法使用。有时会出现图像,但每10公里仅显示1到2次。

这是我在LocationListener::onLocationChanged内移动相机的方式:

float zoom = 19.0f;

LatLng target = new LatLng(location.getLatitude(), location.getLongitude());
// moving car marker
m_locationMarkerG.setPosition(target);
m_locationMarkerG.setRotation(location.getBearing());

// tilting camera depending on speed
float tilt = Math.min(90, location.getSpeed()*10);
m_mapViewG.animateCamera(CameraUpdateFactory.newCameraPosition(CameraPosition.builder().zoom(zoom).bearing(location.getBearing()).
        target(target).tilt(tilt).build()));

该如何解决?

谢谢

1 个答案:

答案 0 :(得分:0)

找到的解决方案:

必须从主循环程序中调用

animateCamera。从另一个线程(传感器的线程)调用LocationListener。

所以代码变成了:

final float zoom = 19.0f;

final LatLng target = new LatLng(location.getLatitude(), location.getLongitude());

// tilting camera depending on speed
final float tilt = Math.min(90, location.getSpeed()*10);

m_handler.post(new Runnable() {
    public void run() {
        // moving car marker
        m_locationMarkerG.setPosition(target);
        m_locationMarkerG.setRotation(location.getBearing());

        // moving camera
        m_mapViewG.animateCamera(CameraUpdateFactory.newCameraPosition(CameraPosition.builder().zoom(zoom).bearing(location.getBearing()).target(target).tilt(tilt).build()));
    }
});