我正在尝试使用全屏布局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
预期输出演示
在此演示中,用户可以触摸,放大/缩小ViewPager
,可以滑动{{1}}并全屏滚动ViewPager的Fragemt。所以,这正是我想要实现的目标。
如果有人提供有用的链接或某些演示,我将不胜感激。
请帮忙!
感谢。
答案 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.