我正在创建一个使用Open Street Map的Android公共交通应用程序。问题是 - 我需要将这么多站点分成城市区域,每个区域都有几百个区域。计划是仅显示与该区域相关的各个公交车站,同时将其他公交车站隐藏在其组中,以节省内存,CPU并使界面流畅。
我希望能够在某个点之后缩小地图时显示某个区域中的工作站数量,并且我已经实现了此行为。问题是 - 我不知道如何将电台数量显示为"文字可绘制"。
我已经实现了一个位于地图上的文本视图,其中包含了进入应用程序时城市中心的公交车站总数,并且运行良好。但是,执行此操作的TextView
是RelativeLayout
MapActivity
的一部分 - 这不是我想要的 - 我希望将TextView
锚定到地图。现在,如果您滚动地图,TextView
只是位于屏幕中间,因为它是RelativeLayout
的一部分,而不是实际地图的一部分,作为项目在地图上。
以下是MapActivity
在布局方面的样子:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<org.osmdroid.views.MapView
android:id="@+id/map_activity_map_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clickable="true"
android:focusable="true" />
<TextView
android:id="@+id/map_activity_station_number_textview"
android:visibility="invisible"
android:layout_width="100dp"
android:layout_centerInParent="true"
android:layout_height="100dp"
android:background="@drawable/text_view_circle"
android:text="10"
android:textSize="@dimen/text_size_medium"
android:padding="8dp"
android:gravity="center"
android:textColor="@android:color/white"/>
</RelativeLayout>
现在,TextView
用作背景的drawable是:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@color/applicationBackground"/>
<stroke
android:width="4dp"
android:color="@android:color/white"/>
<corners
android:radius="50dp"/>
</shape>
这可以在屏幕中央创建一个TextView
,并填充城市公交车站的总数。
同样,问题是我想创建其中的几个,并且必须在地图上修复它们。我们可以这样做&#34;映射项目&#34;。问题是,为了成为一个地图项目,你必须是一个可绘制的而不是TextView
。
以下是这样的:
//set the icon for the bus station group (in this case, the text in the circle with the number of stations)
busStationDrawableOverlay = this.getDrawable(R.drawable.bus_station_small);
for (GeoPoint busStationGroup : busStationGroupList){
//create the overlay that will appear on the map as the station icon
OverlayItem busStationGroupItem = new OverlayItem(null, null, busStationGroup);
//set the bus station icon as the busStationDrawableOverlay the we declared above (and set the right icon)
busStationGroupItem.setMarker(busStationDrawableOverlay);
//add the station to the stationLocation list so it can be displayed on the map
busStationGroupLocation.add(busStationGroupItem);
}
这个问题是它只适用于drawable。所以,如果我使用一个图标,我会在地图上找到&#34;锚定&#34;行为。我需要能够对TextView
执行相同的操作,以便我可以实际写入该区域中的站点数。
知道怎么做吗?如何将TextView
实现为&#34; Drawable&#34;并且仍然能够编辑并控制它吗?
谢谢!
答案 0 :(得分:2)
您可以使用标记覆盖,使用几乎隐藏的功能:当标记没有图标但标题时,此标题可以绘制为文本。这样:
foo
您可以使用:setTextLabelBackgroundColor,setTextLabelForegroundColor,setTextLabelForegroundColor调整外观和感觉。
每次更改标记标题时,都必须调用myMarker.setIcon(null)。
如果你不喜欢这个结果,一个简单的选择就是使用Marker,每当你的文字发生变化时,就可以从你的文字中建立一个可绘制的图标。 查看Marker.setIcon源代码,这将为您提供执行类似操作所需的一切。