2016-06-22 2 views
2

私はユーザーにマーカーを表示できるGoogleマップベースのアプリを持っています。私が抱えている問題は、マップ上のすべてのマーカーを拡大表示すると、数秒後にマップが元のズームレベルにリセットされ、すべてのマーカーが表示されないということです。GoogleマップUndesirablyカメラのズームアウトをリセットする

マップをユーザーのズームレベルに維持したいが、ロジックを思いつくことができない。その後

public boolean firstTime = true; 

、チェック:

@Override 
protected void onPostExecute(final ArrayList<Item> arrayList) { 
    if(isCancelled()) return; 
    if(googleMap!=null) { 
     googleMap.clear(); 
     mMarker2Item.clear(); 
     LatLngBounds.Builder boundBuilder = new LatLngBounds.Builder(); 
     for (Item item : arrayList) { 
      MarkerOptions opts = new MarkerOptions() 
        .position(item.location()) 
        .title(item.name); 
      if(item.iconBitmap!=null){ 
       opts = opts.icon(BitmapDescriptorFactory.fromBitmap(item.iconBitmap)); 
      } 
      Marker newMarker = googleMap.addMarker(opts); 
      newMarker.setSnippet(item.vicinity); 
      mMarker2Item.put(newMarker, item); 
      boundBuilder.include(item.location()); 
     } 
     try { 
      CameraUpdate cameraUpdate = CameraUpdateFactory.newLatLngBounds(boundBuilder.build(), 200); 
      googleMap.moveCamera(cameraUpdate); 
      googleMap.animateCamera(cameraUpdate, 1000, null); 
     } catch (Exception ex) { 

     } 
    } else mHandler.postDelayed(new Runnable() { 
     @Override 
     public void run() { 
      onPostExecute(arrayList); 
     } 
    }, 500); 
} 
+0

フラグを使用して、AsyncTaskが初めて実行されたときにCameraUpdateの処理を行うことができます。 –

+0

ありがとう@ダニエルニュジェント私はまだ全面的なコーディングの側面とロジックに精通しています。コードサンプルをどのように提供できるでしょうか? – user3078406

答えて

5

だけで(あなたのAsyncTaskアクティビティのサブクラスであることを提供する)活動におけるクラスのメンバ変数としてブールフラグを定義します。これは私が持っているコードです。カメラを移動する前のブール値フラグ:

if (firstTime) { 
    firstTime = false; 
    CameraUpdate cameraUpdate = CameraUpdateFactory.newLatLngBounds(boundBuilder.build(), 200); 
    googleMap.moveCamera(cameraUpdate); 
    googleMap.animateCamera(cameraUpdate, 1000, null); 
} 
+0

ありがとうございます。私はこれを試してみよう@DanielNugent – user3078406

+0

サー、あなたは天才です!これは完全に動作します!ありがとうございました!!! @DanielNugent – user3078406

関連する問題