我们好,我是似曾相识2022。不喜欢唱跳篮球,但对杰伦的Rap却情有独钟。
今日给我们带来一个十分了解的作用——高德主页
我们话不多说,直接上作用图:
一般用上这个作用的都和地图有关,看上去仍是挺酷眩的。但假如从来没了解过的同学要自己完成这个作用仍是不容易的。值得庆幸的是,谷歌提供了现成的规划库:CoordinatorLayout结合CoordinatorLayout.Behavior。
首要,xml中根布局需求是CoordinatorLayout,其子view需求是一个可滑动的View,我们这儿直接运用NestedScrollView。
<androidx.coordinatorlayout.widget.CoordinatorLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.core.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/shape_white"
app:behavior_hideable="false"
app:behavior_peekHeight="300dp"
app:layout_behavior="com.google.android.material.bottomsheet.BottomSheetBehavior">
<TextView
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="center_horizontal"
android:layout_marginTop="20dp"
android:drawablePadding="10dp"
android:lineSpacingExtra="20dp"
android:gravity="center"
android:text="我是内容\n我是内容\n我是内容\n我是内容\n我是内容\n我是内容\n我是内容\n 我是内容\n" />
</androidx.core.widget.NestedScrollView>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
这儿需求注明下:
- 滑动控件中需求添加layout_behavior特点,这儿默认运用BottomSheetBehavior。
- behavior_hideable:代表是否躲藏
- behavior_peekHeight:代表滑动控件初始展示的高度
完成xml编写后直接运行得到如下作用:
看似好像差不多,但只能悉数显现或者只显现我们设置的300dp高。其实,BottomSheetBehavior内部还提供了很多特点:
- isFitToContents:是否填充整个内容
- expandedOffset:打开后间隔顶部的高度
- halfExpandedRatio:半打开占比
- setState:设置当时状况:躲藏、半打开、全打开等等
- setPeekHeight:设置初始显现高度
本来还能够半打开,我们直接装备上全套作用:
bottomSheetBehavior?.let {
it.isFitToContents = false //打开后开度填充Parent的高度
//setFitToContents 为false时,打开后间隔顶部的方位(Parent会以PaddingTop填充)
it.expandedOffset = ImmersionBar.getStatusBarHeight(this) + 40//顶部间隔
it.halfExpandedRatio = 0.5f //半打开占比
it.isHideable = false
it.setPeekHeight(150, true)//有动画
it.setState(BottomSheetBehavior.STATE_HIDDEN)
}
到这儿其实已经能够满意基本要求了,整体动画体会也是不错的,十分流通。但我们的目标还没有到达,在之前有写过监听滑动控件完成状况栏色彩切换,那么现在我们是否也能够利用相似的原理来完成滑动过程中的一些作用呢?
答案是必定的。下篇我们继续讲解BottomSheetBehavior滑动监听下的作用完成,终究完成高德主页作用。