18

MapsAPIv2を使用してAndroidで地図ベースのアプリを作成しています。

私はすでにマーカーを地図上に配置していて、それらのマーカーのカスタム情報ウィンドウを表示できますが、AFAICTは一度に1つの情報ウィンドウしか表示できません。異なる動作が必要な場所がいくつかあります。マーカーを表示せずに、常に複数のウィンドウの情報ウィンドウを表示したいです。

情報ウィンドウをビットマップで裏打ちされたキャンバスに描画し、それらのビットマップをマーカー「アイコン」としてマップに渡すコードを記述できると思います。この種のことは、私が非常にうまくやろうとしていることを要約しています。情報ウィンドウをマーカーにしたいと思っています。しかし、このアプローチでは、私が避けたい独自のウィンドウフレーム描画コードを作成する必要があります。

一度に表示される複数の情報ウィンドウをサポートするためのより良い方法はありますか?

4

1 に答える 1

23

ドキュメントには次のように記載されています。

一度に表示される情報ウィンドウは1つだけなので、このプロバイダーはビューを再利用するか、メソッド呼び出しごとに新しいビューを作成するかを選択できます。

したがって、通常のインフォビューでは実行できませんが、インフォビューとして機能するマーカーを作成するのはそれほど難しくありません。

編集

マーカー/ダイアログとして使用するビューをxmlで作成します。このようなもの:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="100dp"
    android:layout_height="100dp"
    android:orientation="vertical"
    android:background="@android:color/white"
    >
    <TextView
        android:text="test"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
    <ImageView 
        android:src="@drawable/ic_launcher"
        android:layout_width="50dp"
        android:layout_height="50dp"/>
</LinearLayout>

次に、このビューをビットマップに変換し、そのビットマップをマーカーとして使用します。

        ImageView image = (ImageView) findViewById(R.id.main_image);

        LinearLayout tv = (LinearLayout) this.getLayoutInflater().inflate(R.layout.test_layout, null, false);
        tv.measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED), 
                MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
        tv.layout(0, 0, tv.getMeasuredWidth(), tv.getMeasuredHeight()); 

        tv.setDrawingCacheEnabled(true);
        tv.buildDrawingCache();
        Bitmap bm = tv.getDrawingCache();
于 2013-03-27T14:24:21.343 に答える