28

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

Google Maps library 的第 1 版有很多与此主题相关的问题。

在 MapView 中放置缩放控件

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

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

但是,我找不到与图书馆 V2 相关的任何问题。

在 V2 中,没有方法

(LinearLayout) mapView.getZoomControls();

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

提前致谢

4

4 回答 4

39

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

map.setPadding(leftPadding, topPadding, rightPadding, bottomPadding);

从 API 文档:

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

另请参阅有关填充如何在 GoogleMap 中工作的描述

于 2013-12-05T21:17:59.783 回答
26

是的,您可以通过小技巧更改ZoomControlMyLocation按钮的位置。在我的示例中,我有SupportMapFragment,它是从 xml 布局膨胀的。

ZoomControl 和 MyLocation 按钮的视图 ID:

ZoomControl id = 0x1
MyLocation button id = 0x2

更新 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);
}
于 2013-02-19T07:17:07.040 回答
1

我使用 MapFragment 而不是 SupportMapFragment:

import android.util.TypedValue;

在 onCreate

    // Find map fragment

    MapFragment mapFragment = (MapFragment) getFragmentManager().findFragmentById(R.id.mapview);

    int ZoomControl_id = 0x1;
    int MyLocation_button_id = 0x2;

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

    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);
    }
于 2018-01-22T23:57:30.473 回答
0

仅作记录:

导航控件是0x4

所以总的来说:

@LayoutRes final int ZOOM_CONTROL_ID = 0x1;
@LayoutRes final int MY_LOCATION_CONTROL_ID = 0x2;
@LayoutRes final int NAVIGATION_CONTROL_ID = 0x4;
于 2016-05-17T10:24:25.297 回答