6

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

@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);
}

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

4

2 に答える 2

5

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

まず、テキストでビットマップを作成する必要があります。注: paintText をテキスト プロパティ (色、書体、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);

次に、Canvas を使用してテキストを描画します。キャンバスの寸法で少し狂った修正テキストです。

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

最後に Bitmap を使用して MarkOption にアイコンを作成します

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

それがあなたを助けることを願っています。

于 2013-03-01T12:10:28.407 に答える
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 を実行して設定を表示しないようにしてください (ビットマップ ビットマップ =..... より上のすべて)。これにより、アプリの速度が大幅に低下します。

于 2014-06-05T13:32:00.033 に答える