将缩放控件放置在MapView中

我试图让zoom控件显示在一个mapview ,下面的代码几乎可以工作,但是缩放控件出现在mapview左上angular,而不是像我通过setGravity()指定的底部中心。 有人能告诉我,我失踪了吗?

 zoomView = (LinearLayout) mapView.getZoomControls(); zoomView.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT)); zoomView.setGravity(Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL); mapView.addView(zoomView); 

这些视图/布局都是以编程方式构build的,没有布局文件可以调整。

Solutions Collecting From Web of "将缩放控件放置在MapView中"

OnCreate()下行添加到您的MapView类的OnCreate()方法:

view.setBuiltInZoomControls(true);

这里的诀窍是放置另一个布局容器,放置ZoomControls,然后将ZoomControl插入到其中。

真正的技巧是使用RelativeLayout而不是LinearLayout来定位元素,如下面的示例layout.xml所示:

 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent"> <com.google.android.maps.MapView android:id="@+id/myMapView" android:layout_width="fill_parent" android:layout_height="fill_parent" android:enabled="true" android:clickable="true" android:apiKey="MY_MAP_API_KEY" /> <LinearLayout android:id="@+id/layout_zoom" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" /> </RelativeLayout> 

layout_zoom LinearLayout元素位于屏幕的底部中央,放置在MapView的中间/底部。

然后在Activity的onCreate ,获取对layout_zoom元素的引用,并将ZoomControl插入到其中,就像您已经完成的那样:

 LinearLayout zoomLayout =(LinearLayout)findViewById(R.id.layout_zoom); View zoomView = myMapView.getZoomControls(); zoomLayout.addView(zoomView, new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); myMapView.displayZoomControls(true); 

ZoomControls现在应该出现在一个长的点击,而不会窃取地图触摸事件。

以上这些对我来说不起作用,但是这样做(把控制权放在右下angular):

 mapView.setBuiltInZoomControls(true); ZoomButtonsController zbc = mapView.getZoomButtonsController(); ViewGroup container = zbc.getContainer(); for (int i = 0; i < container.getChildCount(); i++) { View child = container.getChildAt(i); if (child instanceof ZoomControls) { FrameLayout.LayoutParams lp = (FrameLayout.LayoutParams) child.getLayoutParams(); lp.gravity = Gravity.RIGHT | Gravity.BOTTOM; child.requestLayout(); break; } } 

Reto:感谢您的回复,但是我们的想法是使用XML布局。

我最终解决了这个问题。 由于MapView是ViewGroup的子类,因此可以轻松地添加子视图(如缩放控件)。 所有你需要的是一个MapView.LayoutParams实例,你很好去。 我做了这样的事情(将放大控制放在地图视图的底部中心)。

  // layout to insert zoomcontrols at the bottom center of a mapview MapView.LayoutParams params = MapView.LayoutParams( LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, mapViewWidth / 2, mapViewHeight, MapView.LayoutParams.BOTTOM_CENTER); // add zoom controls mapView.addView(mapView.getZoomControls(), params); 

从谷歌组线程我发现这个:

没有XML的ZoomControls:

  public class MyMapActivity extends MapActivity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); RelativeLayout relativeLayout = new RelativeLayout(this); setContentView(relativeLayout); final MapView mapView = new MapView(this, DEBUG_MAP_API_KEY); RelativeLayout.LayoutParams mapViewLayoutParams = new RelativeLayout.LayoutParams (RelativeLayout.LayoutParams.FILL_PARENT,RelativeLayout.LayoutParams.FILL_PARENT ); relativeLayout.addView(mapView, mapViewLayoutParams); RelativeLayout.LayoutParams zoomControlsLayoutParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT ); zoomControlsLayoutParams.addRule (RelativeLayout.ALIGN_PARENT_BOTTOM); zoomControlsLayoutParams.addRule (RelativeLayout.CENTER_HORIZONTAL); relativeLayout.addView(mapView.getZoomControls(), zoomControlsLayoutParams); mapView.setClickable(true); mapView.setEnabled(true); } 

用SDK1.1为我做了100%的工作

不幸的是,我不能在11月28日6时32分给贾森·哈金斯(Jason Hudgins)批准的解决scheme添加评论,但是我在他的代码中遇到了一个小小的错误:

在这一行中:

 MapView.LayoutParams params = MapView.LayoutParams( 

Eclipse给我的错误是

“方法LayoutParams(int,int,int,int,int)未定义为typesMapView”

相反,创build一个新的MapView.LayoutParams对象修复它,像这样:

 MapView.LayoutParams params = **new** MapView.LayoutParams( 

我花了一些时间才发现,因为我是一个nb:D

Reto – 使用FILL_PARENT的问题是缩放控制“窃取”了所有的触摸事件; 以便在缩放控件可见时不能平移地图。 你知道如何防止这个?