2013-01-31 10 views
6

Androidアプリをバージョン1からAndroid用GoogleマップAPIのバージョン2にアップグレードしています。バージョン1のコードでは、次のようにdraw()メソッドをオーバーライドして、ItemizedOverlayのサブクラスのマップに直接テキストを描画することができました。私が描きたいテキストはダイナミックで、各マップマーカーの隣に表示したい別のテキストアイテムです。そのため、異なるシンボルがプロットされたり削除されたりすると、テキストは頻繁に追加/削除されます。Googleマップでのテキストの描画ができなくなりましたか?

@Override 
public boolean draw(Canvas canvas, MapView mapView, boolean shadow, 
     long when) { 
    if (!shadow) {    
      canvas.drawText("some text", (float) point.x + TextOffsetX , (float) point.y + TextOffsetY, m_paint); 
    } 


    return super.draw(canvas, mapView, shadow, when); 
} 

ただし、これはAPIのバージョン2では不可能です。これは本当にItemizedOverlaysの概念ではなく、何もサブクラス化できません。新しいAPIバージョンのGoogleマップにテキストを描画する方法はありますか?

+1

あなたは 'GroundOverlay'と' TileOverlay'を見ましたか? – CommonsWare

+0

私はクラスの説明を見てきました。彼らは、私が探している目的のためではなく、静的な画像を重ねることを意図しているようです。 –

+0

それは事実かもしれないが、私はあなたがそれらの仕事の一つを作る方法を見つけるか、あなたは運がないと思う。 – CommonsWare

答えて

3

私は同じ問題を抱えていましたが、v1からv2にアップグレードしようとしました。最後に、マーカーを使用してテキスト付きのビットマップを作成し、それをマーカーのアイコンとして使用しました。

まず、テキストでビットマップを作成する必要があります。 注:テキストを描画するためのキャンバスを使用し、次に、テキストのプロパティ(色、書体、textalign、...)

Rect boundsText = new Rect(); 
paintText.getTextBounds(strText, 0, strText.length(), boundsText); 
Bitmap.Config conf = Bitmap.Config.ARGB_8888; 
Bitmap bmpText = Bitmap.createBitmap(boundsText.width(), boundsText.height(), conf); 

でpaintTextを設定します。それはキャンバスディメンションでテキストを修正する少し狂気です。最後に

Canvas canvasText = new Canvas(bmpText); 
canvasText.drawText(strText, canvasText.getWidth()/2, canvasText.getHeight(), paintText); 

MarkerOption

MarkerOptions markerOptions = new MarkerOptions() 
    .position(latlngMarker) 
    .icon(BitmapDescriptorFactory.fromBitmap(bmpText)) 
    .anchor(0.5f, 1); 

のアイコンを作成するためにビットマップを使用し、それはあなたを助けることができる願っています。

あなたは、次のコードを使用して、ビューからマーカーを作成することができます
+0

ありがとう!それは完全に機能します。ちょうどメモ: 'canvasText.getHeight()、paintNameBackground);'(2dブロック)が間違っています - コピー/貼り付けが間違っていますか?とにかく、私はその目的が何だったのかわからないが、それはうまく動かない。 – psycho

+0

あなたは正しい@psychoだった、私はそれを変更しました、ありがとう! – jgonza73

+1

@ jgonza73 "paintText"インスタンスはどのクラスですか?どうやって作るの? –

4

public static Bitmap createDrawableFromView(Context context, View view) { 
    DisplayMetrics displayMetrics = new DisplayMetrics(); 
    ((Activity) context).getWindowManager().getDefaultDisplay().getMetrics(displayMetrics); 
    view.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); 
    view.measure(displayMetrics.widthPixels, displayMetrics.heightPixels); 
    view.layout(0, 0, displayMetrics.widthPixels, displayMetrics.heightPixels); 
    view.buildDrawingCache(); 
    Bitmap bitmap = Bitmap.createBitmap(view.getMeasuredWidth(), view.getMeasuredHeight(), Bitmap.Config.ARGB_8888); 

    Canvas canvas = new Canvas(bitmap); 
    view.draw(canvas); 

    return bitmap; 
} 

出典:http://www.nasc.fr/android/android-using-layout-as-custom-marker-on-google-map-api/

編集:あなたは、単一のマーカーよりも多くを使用する場合は、あなたがいないことを確認してくださいDisplayMetricsと表示設定のもの(ビットマップビットマップより上のものすべて= .....)それはあなたのアプリを劇的に遅くするでしょう。

+2

このソリューションを試しましたが、非常に遅いです! – GeniDeveloper

関連する問題