Android Google 地图:是否可以在视图限制之外绘制地图?

Android Google Maps: Is it possible to draw map beyond the view limits?

我在片段中使用 MapView。此视图当前受多个外围视图(如 TextView、Buttons 等)的限制。

我想要的是在不扩展 MapView 边界的情况下,在划定的 MapView 之外的区域显示我的地图。这可能吗?如果是那么怎么办?

编辑: 目前看起来是这样的 - [蓝色边界条表示 MapView 的限制][1]

[1]: https://i.stack.imgur.com/9AzqX.png

我希望地图填充按钮下方和侧面的区域,而不会将 MapView 的边界扩展到当前的边界。

布局代码:`

<Button
    android:id="@+id/rideButton"
    android:layout_width="match_parent"
    android:layout_height="60dp"
    android:layout_alignParentBottom="true"
    android:layout_centerHorizontal="true"
    android:layout_marginBottom="20dp"
    android:layout_marginLeft="30dp"
    android:layout_marginRight="30dp"
    android:background="#ffffff"
    android:elevation="1dp"
    android:text="Button"
    android:textSize="@dimen/font_medium" />

<RelativeLayout
    android:id="@+id/mapWrapper"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_alignParentEnd="true"
    android:layout_alignParentRight="true"
    android:layout_below="@+id/textWrapper"
    android:layout_above="@+id/rideButton">

    <com.google.android.gms.maps.MapView
        android:id="@+id/map"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:visibility="visible"
        android:background="@color/white"/>

    <LinearLayout
        android:id="@+id/posReference"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="false"
        android:layout_alignParentStart="true"
        android:layout_centerInParent="true"
        android:orientation="horizontal"></LinearLayout>

    <ImageView
        android:layout_width="18dp"
        android:layout_height="26dp"
        android:id="@+id/centerMarker"
        android:src="@drawable/ic_marker"
        android:layout_above="@+id/posReference"
        android:layout_centerHorizontal="true" />

</RelativeLayout>

<TableLayout
    android:id="@+id/textWrapper"
    android:layout_width="match_parent"
    android:layout_height="120dp"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:background="@color/colorAccent"
    android:paddingBottom="15dp"
    android:paddingLeft="25dp"
    android:paddingRight="25dp"
    android:paddingTop="15dp">

    <TableRow
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <TextView
            android:id="@+id/textView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="10dp"
            android:layout_marginRight="10dp"
            android:layout_marginTop="10dp"
            android:text="TextView 1"
            android:textAppearance="@style/Bold"
            android:textColor="#ffffff"
            android:textSize="@dimen/font_small" />
    </TableRow>

    <TableRow
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <RelativeLayout
            android:id="@+id/srcFrag"
            android:layout_width="match_parent"
            android:layout_height="40dp"
            android:layout_marginTop="15dp"
            android:orientation="horizontal">

            <ImageView
                android:id="@+id/imageView"
                android:layout_width="12dp"
                android:layout_height="12dp"
                android:layout_alignParentBottom="false"
                android:layout_alignParentLeft="false"
                android:layout_alignParentTop="true"
                android:layout_marginLeft="5dp"
                android:src="@drawable/ic_location"
                android:tint="@color/white" />

            <TextView
                android:id="@+id/short_map_place"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentTop="true"
                android:layout_marginLeft="10dp"
                android:layout_toEndOf="@+id/imageView"
                android:layout_toRightOf="@+id/imageView"
                android:ellipsize="end"
                android:text="TextView 2"
                android:textAppearance="@style/Light"
                android:textColor="#ffffff"
                android:textSize="@dimen/font_small" />

            ImageView
                android:id="@+id/imageView2"
                android:layout_width="12dp"
                android:layout_height="12dp"
                android:layout_alignParentRight="true"
                android:layout_alignParentTop="true"
                android:layout_alignParentLeft="true"
                android:layout_marginLeft="5dp"
                android:src="@drawable/ic_location"
                android:tint="@color/white"  />

        </RelativeLayout>
    </TableRow>

    <TableRow
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <LinearLayout
            android:layout_width="347dp"
            android:layout_height="1dp"
            android:layout_marginTop="0dp"
            android:background="#ffffff"
            android:foreground="#ffffff"
            android:orientation="vertical">

        </LinearLayout>
    </TableRow>
</TableLayout>

`

使用FrameLayout

示例-

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!-- The main content -->
<com.google.android.gms.maps.MapView
    android:id="@+id/map"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />
<!-- "Loaded" flash bar layout -->
<FrameLayout
    android:id="@+id/FlashBarLayout"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal|bottom"
    android:layout_marginBottom="72dp">
    <!-- flash bar content -->
</FrameLayout>
<!-- Last loaded time layout -->
<TextView
    android:id="@+id/UpdateTimeText"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="top|right"
    android:layout_marginTop="4dp"
    android:layout_marginRight="4dp" /></FrameLayout>

你想要的是将 "padding" 放在 MapView 中。 使用框架布局的建议是正确的(否则您不能将地图扩展到视图的物理边界之外)。

您还需要设置一个 "Map padding" 以在进行缩放等操作时缩小视图区域...

https://developers.google.com/maps/documentation/android-api/map#map_padding

我给你的 URL 有文档但没有代码,因为 .setPadding 函数需要像素(注意!)所以你必须检查不同的设备和密度需要多少像素作为填充.

您可以为顶部、左侧、右侧和底部设置不同的填充。