Android Maps Library V2缩放控制自定义位置

Rob*_*ill 27 android google-maps google-maps-android-api-2

如何在GoogleMap V2中自定义内置缩放控件的位置?

对于Google地图库的第1版,有很多与此主题相关的问题.

将缩放控件放置在MapView中

如何在MapView中重新定位内置缩放控件?

如何使用setBuiltInZoomControls(true)布局缩放控件?

但是,我无法找到与库的V2有关的任何问题.

在V2中,没有方法

(LinearLayout) mapView.getZoomControls();
Run Code Online (Sandbox Code Playgroud)

所有前面提到的问题都已过时.

提前致谢

Mar*_*ner 38

根据您要执行的操作,您可能会发现GoogleMap.setPadding()很有用(2013年9月添加).

map.setPadding(leftPadding, topPadding, rightPadding, bottomPadding);
Run Code Online (Sandbox Code Playgroud)

来自API文档:

此方法允许您在地图上定义可见区域,通过在地图的四个边缘中的每一个上设置填充来向地图发信号通知边缘周围的地图部分可能被遮挡.地图功能将适应填充.例如,缩放控件,指南针,版权声明和Google徽标将移动到适合定义区域内,相机移动将相对于可见区域的中心等.

另请参阅有关填充在GoogleMap中的工作原理说明.


vov*_*kab 24

是的,你可以用小黑客改变ZoomControlMyLocation按钮的位置.在我的示例中,我有SupportMapFragment,它是从xml布局中膨胀的.

查看ZoomControl和MyLocation按钮的ID:

ZoomControl id = 0x1
MyLocation button id = 0x2
Run Code Online (Sandbox Code Playgroud)

用于更新ZoomControl位置的代码:

// Find map fragment
SupportMapFragment mapFragment = (SupportMapFragment) getFragmentManager().findFragmentById(R.id.map);

// Find ZoomControl view
View zoomControls = mapFragment.getView().findViewById(0x1);

if (zoomControls != null && zoomControls.getLayoutParams() instanceof RelativeLayout.LayoutParams) {
    // ZoomControl is inside of RelativeLayout
    RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) zoomControls.getLayoutParams();

    // Align it to - parent top|left
    params.addRule(RelativeLayout.ALIGN_PARENT_TOP);
    params.addRule(RelativeLayout.ALIGN_PARENT_LEFT);

    // Update margins, set to 10dp
    final int margin = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 10,
            getResources().getDisplayMetrics());
    params.setMargins(margin, margin, margin, margin);
}
Run Code Online (Sandbox Code Playgroud)

  • 这太疯狂了.任何Maps V2版本都可以更改这些值.请简单地隐藏内置的缩放控件并添加自己的缩放控件. (3认同)
  • 因为它们是显式执行ZoomControl.setId(1)和MyLocationButton.setId(2).所以它应该工作正常,直到他们改变ID.并且还有第三个控件使用0x3,但我不确定它是什么. (2认同)