【问题标题】:Google Maps Android API - Two Maps with getMapAsync()Google Maps Android API - 两个带有 getMapAsync() 的地图
【发布时间】: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


【解决方案1】:

minimap 准备好时尝试使用布尔值,将其设置为假。在onMapReady 中检查布尔值是否为真,然后为mv 执行您想要的操作,否则如果布尔值为错误,则为minimap 编写逻辑

【讨论】:

  • 有趣的想法。我一定会在今天晚些时候试一试,然后告诉你会发生什么。
  • 这实际上效果很好。我将编辑我的答案并提供新代码。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多