Несколько информационных окон в Android Maps API 2

Я пишу картографическое приложение на Android с помощью Maps API v2.

У меня уже есть маркеры, которые размещаются на карте, и могут отображать пользовательские информационные окна для этих маркеров, но AFAICT может отображаться только одно информационное окно за раз. Есть пара пятен, где мне нужно другое поведение: я хочу всегда отображать информационное окно для нескольких окон без показа маркера.

Я полагаю, что я мог бы написать код, чтобы нарисовать информационные окна на растровых холстах и ​​передать эти растровые изображения на карту в качестве значков маркеров. Это подводит итог тому, что я пытаюсь сделать достаточно хорошо: я хочу, чтобы информационные окна были моими маркерами. Но этот подход потребовал бы, чтобы я написал свой собственный код рисования рамки окна, который я бы предпочел избежать.

Есть ли лучший способ одновременного отображения более одного информационного окна?

Ответы

Ответ 1

В документах указано:

Поскольку в каждый момент времени отображается только одно информационное окно, это поставщик может выбрать повторное использование представлений или может выбрать создание нового представления по каждому вызову метода.

Таким образом, вы не можете делать это с помощью обычных инфоваров, но не слишком сложно создавать маркеры, которые действуют как infoviews.

Edit

Я бы создал представление в 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();