【发布时间】:2016-01-13 14:46:52
【问题描述】:
我在一个视图片段中有两张地图(见下面的截图),虽然地图运行正常并且我可以通过 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));
}
});
}
地图膨胀正确,一切顺利,但正如您所猜想的那样,无论我对“GoogleMap gm”做什么,这两个地图都会发生
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 监听器允许小地图跟随用户在主地图上的交互,同时保持较低的缩放级别。
【问题讨论】:
-
您可以为此设置一个布尔值。
-
你能再解释一下吗?我没有看到这会导致...
标签: android google-maps android-fragments android-mapview