上面有布局层的谷歌地图

Posted

技术标签:

【中文标题】上面有布局层的谷歌地图【英文标题】:Google Map with Layout layer above it 【发布时间】:2018-09-04 11:00:18 【问题描述】:

我在谷歌地图上方添加了一个布局,我自己的布局具有透明背景。现在,当我添加它时,我无法在我的应用程序中移动谷歌地图,因为它上面有一个框架布局。我的要求是我希望我的谷歌地图能够像滑动缩放一样工作,即使我上面有 Framelayout 也是如此。

下面是示例代码

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_
    android:layout_>


    <fragment
        android:id="@+id/map"
        android:name="com.google.android.gms.maps.SupportMapFragment"
        android:layout_
        android:layout_
        tools:context=".ui.googlemapactivity.GoogleMapMainActivity" />

    <FrameLayout
        android:id="@+id/frameTop"
        android:layout_above="@+id/llBottomButtom"
        android:layout_
        android:descendantFocusability="beforeDescendants"
        android:layout_/>

    <LinearLayout
        android:id="@+id/llBottomButtom"
        android:layout_
        android:layout_
        android:layout_alignParentBottom="true"
        android:gravity="center_horizontal"
        android:orientation="horizontal"
        android:weightSum="90">

        <Button
            android:id="@+id/btnOne"
            android:layout_
            android:layout_
            android:text="Route" />

        <Button
            android:id="@+id/btnTwo"
            android:layout_
            android:layout_
            android:text="Current" />

        <Button
            android:id="@+id/btnThree"
            android:layout_
            android:layout_
            android:text="Charge" />


    </LinearLayout>


</RelativeLayout>

这里支持地图片段不滑动移动什么的。有相同的解决方案吗?

【问题讨论】:

【参考方案1】:

试试这个:

问题是您尝试在 id 声明上方添加 android:layout_above="@+id/llBottomButtom" 行,将其添加到 LinearLayout 下方,以便对 FrameLayout 有用。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_
    android:layout_>


<fragment
    android:id="@+id/map"
    android:name="com.google.android.gms.maps.SupportMapFragment"
    android:layout_
    android:layout_
    tools:context=".ui.googlemapactivity.GoogleMapMainActivity" />


<LinearLayout
    android:id="@+id/llBottomButtom"
    android:layout_
    android:layout_
    android:layout_alignParentBottom="true"
    android:gravity="center_horizontal"
    android:orientation="horizontal"
    android:weightSum="90">

    <Button
        android:id="@+id/btnOne"
        android:layout_
        android:layout_
        android:text="Route" />

    <Button
        android:id="@+id/btnTwo"
        android:layout_
        android:layout_
        android:text="Current" />

    <Button
        android:id="@+id/btnThree"
        android:layout_
        android:layout_
        android:text="Charge" />


</LinearLayout>

<FrameLayout
    android:id="@+id/frameTop"
    android:layout_above="@+id/llBottomButtom"
    android:layout_
    android:descendantFocusability="beforeDescendants"
    android:layout_/>

【讨论】:

一旦 Framelayout 将任何 Fragment 加载到其容器中,Map 就会停止工作。 你能解释一下为什么需要 frameTop FrameLayout 吗? 问题是我正在添加一个布局以在地图上显示一些额外的 UI 组件,因为我正在添加一个布局。 是因为你的FrameLayout覆盖了地图片段,我上面的代码试过了吗?正如你给 FrameLayout 的 match_parent 高度一样,试试 wrap_content。 我得到了答案,添加它。【参考方案2】:

所以我对谷歌地图做了一些文档阅读,发现地图提供了 cameraAnimation 方法,我们可以在其中自己添加滚动,所以我所做的是实现了 GestureDetector.OnGestureListener ,其中有两个方法我按照下面提供的方式使用

  override fun onFling(e1: MotionEvent?, e2: MotionEvent?, velocityX: Float, velocityY: Float): Boolean 
        googMaps?.animateCamera(CameraUpdateFactory.scrollBy(velocityX, velocityY))
        return true
    

    override fun onScroll(e1: MotionEvent?, e2: MotionEvent?, distanceX: Float, distanceY: Float): Boolean 
        googMaps?.animateCamera(CameraUpdateFactory.scrollBy(distanceX, distanceY))
        return true
    

这成功了,现在我可以在我的地图上方使用带有片段的自定义布局,它仍然可以滚动并且功能相同。

【讨论】:

以上是关于上面有布局层的谷歌地图的主要内容,如果未能解决你的问题,请参考以下文章

如何在android的谷歌地图V2上添加谷歌素材图标“我的位置”?

从没有控件的谷歌地图打印地图

访问无偏移的谷歌地图——工具篇

使用文本地址的谷歌地图街景地图

谷歌地图怎么测距离?

苹果手机的谷歌地图怎么删除