Android谷歌地图:是否可以绘制超出视图限制的地图?

时间:2016-10-12 15:06:45

标签: android google-maps android-mapview

我在片段中使用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>

`

2 个答案:

答案 0 :(得分:0)

使用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>

答案 1 :(得分:0)

你想要的是在MapView中加入“填充”。 使用框架布局的建议是正确的(否则您无法在地图的物理边界之外扩展地图)。

除此之外,您还需要设置一个“地图填充”,以便在进行缩放等时减少视图区域...

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

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

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