18

我正在使用 Maps API v2 在 Android 上编写基于地图的应用程序。

我已经在地图上放置了标记,并且可以为这些标记显示自定义信息窗口,但 AFAICT 一次只能显示一个信息窗口。有几个地方我想要不同的行为:我想始终显示多个窗口的信息窗口,而不显示标记。

我想我可以编写一些代码来将信息窗口绘制到支持位图的画布上,并将这些位图作为标记“图标”传递给地图。这种总结了我想要做得很好:我希望信息窗口成为我的标记。但是这种方法需要我自己编写我宁愿避免的窗口框架绘制代码。

有没有更好的方法来支持一次显示多个信息窗口?

4

1 回答 1

23

在文档中它指出:

由于任何时候都只显示一个信息窗口,因此该提供者可以选择重用视图,或者它可以选择在每次方法调用时创建新视图。

所以不,你不能用常规的信息视图来做到这一点,但创建充当信息视图的标记并不难。

编辑

我会在 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 回答