Android 将View固定到地图上

来源:互联网 发布:ssh端口 windows 编辑:程序博客网 时间:2024/04/28 18:39
将View固定到地图和地图的某个位置上

       在已经学习了如何通过把Zoom View固定到一个特定的屏幕位置上从而来添加它。可以把任何由View派生的对象固定到一个Map View(包括布局和其他的View Group)上,既可以把它附加到一个屏幕位置,也可以把它附加到一个地理地图位置。

        在第二种(地图位置)的情况中,View将会通过移动来跟随它在地图上被固定的位置,从而可以有效地当做一个交互的地图标记而使用。作为一个对资源更加敏感的方法,它通常被保留为可以提供细节的"气球",当在混合地图(mashup)中单击一个标记的时候,经常会通过显示它来提供更多的详细信息。

       这两种固定机制都是通过对MapView调用addView而实现的,addView通常出现在MapActivity的onCreate或者onRestore方法中。需要给它传递你希望固定的View以及要使用的布局参数。

       传递给addView的MapView.LayoutParams参数确定了如何将View添加到地图上,以及将其添加到地图的哪个位置。

       要根据屏幕位置添加一个新的View,需要指定一个新的MapView.LayoutParams,它其中包含了用来设置View的高度和宽度的参数、x/y屏幕坐标以及用来确定位置的对齐方式(alignment),如下所示:

int y = 10; int x = 10; MapView.LayoutParams screenLP; screenLP = new MapView.LayoutParams(MapView.LayoutParams.WRAP_CONTENT, MapView.LayoutParams.WRAP_CONTENT, x, y, MapView.LayoutParams.TOP_LEFT); EditText editText1 = new EditText(getApplicationContext()); editText1.setText("Screen Pinned"); mapView.addView(editText1, screenLP); 

要根据一个物理地图位置来固定一个View,需要在构建新的MapView.LayoutParams的时候传递4个参数,分别用来表示高度、宽度、要固定的GeoPoint和布局对齐方式。

Double lat = 37.422134*1E6; Double lng = -122.084069*1E6; GeoPoint geoPoint = new GeoPoint(lat.intValue(), lng.intValue()); MapView.LayoutParams geoLP; geoLP = new MapView.LayoutParams(MapView.LayoutParams.WRAP_CONTENT, MapView.LayoutParams.WRAP_CONTENT, geoPoint, MapView.LayoutParams.TOP_LEFT); EditText editText2 = new EditText(getApplicationContext()); editText2.setText("Location Pinned"); mapView.addView(editText2, geoLP); 

移动地图的时候第一个TextView将留在左上角不动,而第二个TextView将会通过移动,从而保持在地图上特定的位置不变。
       要从一个MapView中移除一个View,可以调用RemoveView,并给它传递你希望移除的View实例,如下所示:
Java代码:

mapView.removeView(editText2);