2013-07-15 12 views
9

このシナリオでは、gms v2を使用してGoogleマップにビットマップを描画し、各ユーザーの位置の更新によってビットマップの更新が強制されます。現在、次のコードスニペットを使用しています。GoogleマップのビットマップをAndroid用に再描画する

public void init(){ 
    result = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); 
    canvas = new Canvas(result); 
} 

public void update(){ 
    // draw on canvas ... 
    draw(result); 
} 

public void draw(Bitmap modifiedBmp) { 
    if (overlay != null) { 
     overlay.remove(); 
    } 

    BitmapDescriptor descriptor = BitmapDescriptorFactory.fromBitmap(modifiedBmp); 
    overlay = map.addGroundOverlay(new GroundOverlayOptions().image(descriptor).positionFromBounds(bounds).zIndex(100)); 
} 

update()メソッドは毎秒呼び出されます。このアプローチは非常に効率が悪いと私はより良い解決策を探しています(つまり、各更新後にオーバーレイを追加/削除する必要はありません)。 addPolygon(...)addPolyline(...)を使用してマップ上にプリミティブを描画することは選択できません。なぜなら、標準APIには描画機能がないからです。

答えて

6

1つの最適化は、新しい位置が古いものと同じであるかどうかをチェックし、その場合は再描画しないことがあります。また、私はディスクリプタが毎回作成される必要があるとは思わない。

マーカーを移動する別のアプローチは、hereと記載されています。それは公式のサンプルからのものです。

4

Googleマップでカスタムビットマップを使用した方法です。

マーカーコード:

BitmapDescriptor iconBitmap = BitmapDescriptorFactory 
        .fromResource(R.drawable.item_map_marker); 

MarkerOptions options = new MarkerOptions(); 
options.position(new LatLng(hs.lat, hs.lng)); 
options.title(hs.sitename); 
options.snippet(hs.street + ", " + hs.suburb); 
options.icon(iconBitmap); 

mMap.addMarker(options); 

ツールチップアダプタ:

public class MyInfoWindowAdapter implements InfoWindowAdapter { 

    public interface OnRenderCustomInfoWindow { 

     public void onRender(Marker marker, View mWindow); 
    } 

    private View      mWindow; 

    private OnRenderCustomInfoWindow mRenderer; 

    public MyInfoWindowAdapter(Context context, 
      OnRenderCustomInfoWindow onRender) { 
     mRenderer = onRender; 
     mWindow = LayoutInflater.from(context).inflate(
      R.layout.view_services_map_infowindow, null); 
    } 

    @Override 
    public View getInfoWindow(Marker marker) { 
     mRenderer.onRender(marker, mWindow); 
     return mWindow; 
    } 

    @Override 
    public View getInfoContents(Marker marker) { 
     return null; 
    } 
} 
関連する問題