2016-01-13 60 views
0

我有一个视图片段中的两个地图(见下面的截图),虽然地图运行正常,我可以通过getMapAsync()访问一个地图,但我无法理解如何运行另一个getMapAsync()并将其与第一个区分开来。谷歌地图Android API - 两个地图与getMapAsync()

两个地图合作得很好:

Two Google Maps (Android) on One View Fragment

一个相当简单的视图布局(称为 “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)); 
      } 
     }); 
    } 

该地图正确充气和everythin摹工程进展顺利,但你可以猜测,无论我做“的GoogleMap GM”恰好都映射由于

mv.getMapAsync(this); 
miniMap.getMapAsync(this); 

都指向一个

@Override 
public void onMapReady(GoogleMap map) { 

任何想法,我怎么能为每个MapView附加一个单独的GoogleMap?


编辑:

感谢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监听这里允许迷你地图在主地图上跟踪用户的互动,同时保持较低的缩放级别。

+0

你可以为此设置一个布尔值。 –

+0

你能多解释一下吗?我没有看到那导致... – Feedslant

回答

2

尝试使用布尔值minimap准备就绪时将其设置为false。并在onMapReady检查布尔如果它是真的然后做你想要的mv否则,如果布尔是假的写逻辑minimap

+0

有趣的想法。我肯定会在今天晚些时候尝试一下,让你知道发生了什么。 – Feedslant

+0

好的。我希望这会为你锻炼 –

+0

这实际上工作得很好。我将编辑我的答案并提供新的代码。谢谢! – Feedslant