我正在开发一个用于跟踪 GPS 数据的应用程序,它的界面中有一个大的 GoogleMap 显示正在跟踪的内容。事情按照我想要的方式进行,直到活动因任何原因(电话、主页按钮等)暂停,然后我恢复活动。
初始启动后,地图不会对任何用户交互做出反应,到目前为止这对我有用。任何将相机动画到某个位置的调用都有效,标记被绘制,用户位置和方位也是如此。在暂停-恢复循环之后,情况正好相反。地图接受用户的所有手势,但不对任何呼叫作出反应。我无法为相机设置动画、绘制标记或显示用户位置。
我尝试了很多东西,试图在恢复时强制重新加载地图设置并在暂停时将地图归零,但似乎没有任何效果。
这是我设置地图的地方,在 onCreate 中调用(并在 onResume 中尝试过):
private void setupMap(){
getSupportFragmentManager().beginTransaction().replace(R.id.trackeractivity_map, new SupportMapFragment()).commit();
FragmentManager fragmentManager = getSupportFragmentManager();
SupportMapFragment supportMapFragment = (SupportMapFragment) fragmentManager.findFragmentById(R.id.trackeractivity_map);
mMap = supportMapFragment.getMap();
mMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
mMap.setMyLocationEnabled(true);
}
这是我更新用户位置并为相机设置动画的地方:
private void updateUserLocation(double lat, double lon){
Log.d(TAG, "updateUserLocation - " + lat + " : " + lon);
mLastLocationLat = lat;
mLastLocationLon = lon;
if (mMap != null){
CameraPosition userPos = new CameraPosition(new LatLng(lat, lon), mMap.getMaxZoomLevel()-4, 0, 0);
mMap.animateCamera(CameraUpdateFactory.newCameraPosition(userPos));
}
}
这就是我向轨道添加新标记的地方:
private void updateMapOverlay(double lat, double lon){
Log.d(TAG, "updateMapOverlay - " + lat + " : " + lon + " - Type " + mCurrentType);
MarkerOptions marker = new MarkerOptions();
marker.position(new LatLng(lat, lon));
marker.draggable(false);
marker.icon(BitmapDescriptorFactory.fromResource(getTypeDrawableID(mCurrentType)));
mMap.addMarker(marker);
}
以及布局中的地图片段:
<fragment
android:id="@+id/trackeractivity_map"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="10dp"
class="com.google.android.gms.maps.SupportMapFragment"
/>
如您所见,我正在使用 supportfragmentmanager,并且该活动还使用了 JFeinstein 的 SlidingMenu - 顺便说一句,效果很好。
即使在暂停恢复之后,对地图工作有任何帮助吗?