2016-01-13 61 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