我在一个视图片段中有两个地图(请参见下面的屏幕截图),尽管这些地图可以正确运行,并且可以通过getMapAsync()访问一个地图,但我无法理解如何运行另一个getMapAsync()并将其与第一个地图区分开。
两张地图一起运作良好:
一个相当简单的视图布局(称为“ fragment_map.xml”):
<com.google.android.gms.maps.MapView
android:id="@+id/mapview"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
<android.support.v7.widget.CardView
android:id="@+id/map_card"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_marginLeft="5dp"
android:layout_marginTop="5dp">
<com.google.android.gms.maps.MapView
android:layout_width="100dp"
android:layout_height="100dp"
android:id="@+id/miniMap"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_marginLeft="0dp"
android:layout_marginTop="0dp" />
</android.support.v7.widget.CardView>
在活动中(或本例中的片段):
private MapView mv, miniMap;
private GoogleMap gm;
private View myLayout;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
myLayout = inflater.inflate(R.layout.fragment_map, container, false);
mv = (MapView) myLayout.findViewById(R.id.mapview);
mv.onCreate(savedInstanceState);
miniMap = (MapView) myLayout.findViewById(R.id.miniMap);
miniMap.onCreate(savedInstanceState);
mv.getMapAsync(this);
miniMap.getMapAsync(this);
return myLayout;
}
@Override
public void onMapReady(GoogleMap map) {
gm = map;
gm.setMyLocationEnabled(true);
gm.setOnCameraChangeListener(new GoogleMap.OnCameraChangeListener() {
@Override
public void onCameraChange(CameraPosition position) {
gm.animateCamera(CameraUpdateFactory.newLatLng(position.target));
}
});
}
这些地图会正确充气,并且一切都会顺利进行,但是您可以猜到,由于“
mv.getMapAsync(this);
miniMap.getMapAsync(this);
都指向一个
@Override
public void onMapReady(GoogleMap map) {
关于如何将单独的GoogleMap附加到每个MapView的任何想法?
编辑:
感谢Zeeshan Shabbir,我使用了一个布尔值来首先定位主地图,然后初始化迷你地图:
private GoogleMap gm;
private View myLayout;
private boolean miniMapReady = false;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
myLayout = inflater.inflate(R.layout.fragment_map, container, false);
mv = (MapView) myLayout.findViewById(R.id.mapview);
mv.onCreate(savedInstanceState);
miniMap = (MapView) myLayout.findViewById(R.id.miniMap);
miniMap.onCreate(savedInstanceState);
mv.getMapAsync(this);
return myLayout;
}
@Override
public void onMapReady(GoogleMap map) {
if (!miniMapReady) {
gm = map;
gm.setMyLocationEnabled(true);
miniMap.getMapAsync(this);
miniMapReady = true;
} else {
miniGm = map;
}
gm.setOnCameraChangeListener(new GoogleMap.OnCameraChangeListener() {
@Override
public void onCameraChange(CameraPosition position) {
miniGm.animateCamera(CameraUpdateFactory.newCameraPosition(new CameraPosition(position.target, position.zoom - 5.0f, position.tilt, position.bearing)));
}
});
}
此处的ChangeCamera Listener允许迷你地图在保持较低的缩放级别时跟随主地图上的用户交互。
最佳答案
当minimap
准备好时,请尝试使用布尔值将其设置为false。然后在onMapReady
中检查该布尔值是否为true,然后对mv
执行所需操作,否则,如果boolean为false,则为minimap
写逻辑