底部有ViewPager的GoogleMap,全屏可滚动的ViewPagerFragment项目

时间:2016-07-28 13:00:02

标签: android

我正在尝试使用全屏布局GoogleMap和底部ViewPager来实现ViewPager等功能。

现在ScrollView最初位于底部,如果内容高,则用户可以垂直滚动。用户应该能够全屏滚动(根据下面的演示图像,从下到上按ViewPager的页面项目高度)。

目前,我可以在ViewPager的片段(下面给出的布局代码)中借助GoogleMap(带有match_parnt高度及其paddingTop,如380dp)来实现相同的UI效果。

现在我正面临的问题是ViewPager由于match_parent片段的GoogleMap高度而未对任何触摸/点击事件做出回应。

我的预期结果是requestDisallowInterceptTouchEvent必须能够听取触摸/点击事件,并且ViewPager的片段必须可以在地图上从下到上垂直滚动。

我在搜索过程中发现,我们可以使用<FrameLayout ... android:layout_width="match_parent" android:layout_height="match_parent" > <fragment ... android:name="com.google.android.gms.maps.SupportMapFragment" android:layout_width="match_parent" android:layout_height="match_parent" ... /> <android.support.v7.widget.Toolbar ... android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" ... /> <android.support.v4.view.ViewPager android:layout_width="match_parent" android:layout_height="wrap_content" /> </FrameLayout> 制作子视图来监听这些触摸/点击事件。但在我的情况下,ViewPager和ScrollView内部片段正在进行所有触摸/点击事件。

一段代码,

activity.xml

<ScrollView
    ...
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="bottom"
    ... >

    <LinearLayout
        ...
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:paddingTop="380dp" >

    <!-- 
            child views in here.
        -->
    </LinearLayout>
</ScrollView>

viewpager_fragment_item.xml

Map

预期输出演示

Expected output demo

在此演示中,用户可以触摸,放大/缩小ViewPager,可以滑动{{1}}并全屏滚动ViewPager的Fragemt。所以,这正是我想要实现的目标。

如果有人提供有用的链接或某些演示,我将不胜感激。

请帮忙!

感谢。

1 个答案:

答案 0 :(得分:0)

好的,使用BottomSheet布局

解决了问题

让我向您展示我的布局代码,以便完全理解它。

<android.support.design.widget.CoordinatorLayout
    ...
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    ... >

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior">

        <fragment xmlns:map="http://schemas.android.com/apk/res-auto"
            xmlns:tools="http://schemas.android.com/tools"
            android:name="com.google.android.gms.maps.SupportMapFragment"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            .... />

       <!-- Other layout component code like Toolbar-->

    </RelativeLayout>

    <android.support.v4.widget.NestedScrollView
        android:id="@+id/bottomSheet"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:layout_behavior="android.support.design.widget.BottomSheetBehavior">

        <android.support.v4.view.ViewPager
            ...
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            ... />
    </android.support.v4.widget.NestedScrollView>
</android.support.design.widget.CoordinatorLayout>

在你的java文件中,你需要将peek height设置为Bottomsheet layout。

    View bottomSheet = findViewById(R.id.bottomSheet);
    mBottomSheetBehavior = BottomSheetBehavior.from(bottomSheet);
    mBottomSheetBehavior.setPeekHeight(300);
    mBottomSheetBehavior.setHideable(false);
    mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_DRAGGING);

我做了一个演示,你可以找到它here.