我正在使用Maps API v2在Android上编写基于地图的应用。
我已经在地图上放置了标记,并且可以显示这些标记的自定义信息窗口,但AFAICT一次只能显示一个信息窗口。有几个地方我想要不同的行为:我想总是显示多个窗口的信息窗口,而不显示标记。
我想我可以编写一些代码来将信息窗口绘制到位图支持的画布,并将这些位图作为标记“图标”传递给地图。这种总结了我想要做的很好:我希望信息窗口是我的标记。但是这种方法需要我编写自己的窗口框架绘图代码,我宁愿避免使用。
是否有更好的方法支持同时显示多个信息窗口?
答案 0 :(得分:21)
在文件中说明:
由于任何时候只显示一个信息窗口,因此 提供者可以选择重用视图,也可以选择创建新视图 每个方法调用的视图。
所以不,你不能用常规的信息视图做到这一点,但创建充当信息视图的标记并不太难。
修改强>
我将在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();