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 函数需要像素(注意!)所以你必须检查不同的设备和密度需要多少像素作为填充.
您可以为顶部、左侧、右侧和底部设置不同的填充。
我在片段中使用 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 函数需要像素(注意!)所以你必须检查不同的设备和密度需要多少像素作为填充.
您可以为顶部、左侧、右侧和底部设置不同的填充。