Android5.0 后 Google SDK陆续推出了 SupportDesign 包中的各类控件
其中最炫酷的就是今天+说的这个
先来看效果
可以看到 进入页面ToolBar是隐藏的 当滑动下面的ListView
页面上半部分会跟随手势做出变换
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/main_content" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/colorWhite"> <!--第一部分:伸缩工具栏--> <android.support.design.widget.AppBarLayout android:id="@+id/appbarLayout" android:layout_width="match_parent" android:layout_height="wrap_content" android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" app:elevation="0dp"> <android.support.design.widget.CollapsingToolbarLayout android:id="@+id/collapsing_toolbar" android:layout_width="match_parent" android:layout_height="match_parent" app:contentScrim="?attr/colorPrimary" app:expandedTitleMarginEnd="64dp" app:expandedTitleMarginStart="48dp" app:layout_scrollFlags="scroll|exitUntilCollapsed"> <ImageView android:fitsSystemWindows="true" android:id="@+id/backdrop" android:layout_width="match_parent" android:layout_height="match_parent" android:scaleType="centerCrop" android:src="@mipmap/home_bg" app:layout_collapseParallaxMultiplier="0.6" app:layout_collapseMode="parallax" /> <LinearLayout android:id="@+id/header" android:fitsSystemWindows="true" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/transparent" android:orientation="vertical" app:layout_collapseMode="parallax" app:layout_collapseParallaxMultiplier="0.2" app:layout_scrollFlags="scroll|enterAlways" app:popupTheme="@style/ThemeOverlay.AppCompat.Light"> <RelativeLayout android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="44dp" android:background="@color/transparent"> <TextView android:id="@+id/toolbar_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:text="XXX医院" android:textColor="@color/colorWhite" android:textSize="17sp" /> <ImageView android:id="@+id/toolbar_setting" android:layout_width="44dp" android:layout_height="44dp" android:layout_alignParentRight="true" android:layout_marginRight="15dp" /> </RelativeLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <LinearLayout android:layout_width="130dp" android:layout_height="176dp" android:layout_gravity="center_horizontal" android:orientation="vertical"> <ImageView android:layout_width="90dp" android:layout_height="90dp" android:layout_gravity="center_horizontal" android:layout_marginTop="8dp" android:background="@drawable/ic_bg" android:contentDescription="头像" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:text="XX" android:textColor="@color/colorWhite" android:textSize="18sp" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:text="516345642" android:textColor="#50ffffff" /> </LinearLayout> <LinearLayout android:layout_width="243dp" android:layout_height="176dp" android:orientation="vertical"> <LinearLayout android:layout_width="213dp" android:layout_height="65dp" android:background="@drawable/home_health_bg" android:orientation="horizontal"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:layout_marginLeft="10dp" android:text="血糖" /> <TextView android:layout_width="45dp" android:layout_height="45dp" android:layout_gravity="center_vertical" android:layout_marginLeft="8dp" android:background="@drawable/stroke_sycle_bg" android:gravity="center" android:text="偏高" android:textColor="@color/colorWhite" android:textSize="12sp" /> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:layout_marginLeft="8dp" android:orientation="vertical"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="饭后 : 7.0 mmol/L" android:textColor="@color/colorWhite" android:textSize="12sp" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="5dp" android:text="饭后 : 7.0 mmol/L" android:textColor="@color/colorWhite" android:textSize="12sp" /> </LinearLayout> </LinearLayout> <LinearLayout android:layout_width="213dp" android:layout_height="65dp" android:layout_marginTop="10dp" android:background="@drawable/home_health_bg" android:orientation="horizontal"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:layout_marginLeft="10dp" android:text="血压" /> <TextView android:layout_width="45dp" android:layout_height="45dp" android:layout_gravity="center_vertical" android:layout_marginLeft="8dp" android:background="@drawable/stroke_sycle_bg" android:gravity="center" android:text="偏高" android:textColor="@color/colorWhite" android:textSize="12sp" /> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:layout_marginLeft="8dp" android:orientation="vertical"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="高压 : 7.0 mmHg" android:textColor="@color/colorWhite" android:textSize="12sp" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="5dp" android:text="低压 : 7.0 mmHg" android:textColor="@color/colorWhite" android:textSize="12sp" /> </LinearLayout> </LinearLayout> </LinearLayout> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="115dp" android:background="@color/colorWhite" android:orientation="horizontal"> <LinearLayout android:id="@+id/home_health_records_ll" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_weight="1" android:gravity="center_horizontal" android:orientation="vertical"> <ImageView android:layout_width="60dp" android:layout_height="60dp" android:layout_marginTop="10dp" android:background="@mipmap/ic_health_records" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:text="健康日记" android:textColor="@color/colorBlack" android:textSize="12sp" /> </LinearLayout> <LinearLayout android:id="@+id/home_health_ask_ll" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_weight="1" android:gravity="center_horizontal" android:orientation="vertical"> <ImageView android:layout_width="60dp" android:layout_height="60dp" android:layout_marginTop="10dp" android:background="@mipmap/ic_health_ask" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:text="问一问" android:textColor="@color/colorBlack" android:textSize="12sp" /> </LinearLayout> <LinearLayout android:id="@+id/home_health_order_ll" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_weight="1" android:gravity="center_horizontal" android:orientation="vertical"> <ImageView android:layout_width="60dp" android:layout_height="60dp" android:layout_marginTop="10dp" android:background="@mipmap/ic_health_order" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:text="预约来院" android:textColor="@color/colorBlack" android:textSize="12sp" /> </LinearLayout> <LinearLayout android:id="@+id/home_health_self_ll" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_weight="1" android:gravity="center_horizontal" android:orientation="vertical"> <ImageView android:layout_width="60dp" android:layout_height="60dp" android:layout_marginTop="10dp" android:background="@mipmap/ic_health_self" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:text="自助缴费" android:textColor="@color/colorBlack" android:textSize="12sp" /> </LinearLayout> </LinearLayout> <include layout="@layout/layout_home_notification_hint" /> </LinearLayout> <android.support.v7.widget.Toolbar android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:minHeight="?attr/actionBarSize" app:layout_collapseMode="pin"> <TextView android:id="@+id/toolbar_title2" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:text="消息中心" android:textColor="@color/colorWhite" android:textSize="18sp" android:visibility="gone" /> </android.support.v7.widget.Toolbar> </android.support.design.widget.CollapsingToolbarLayout> </android.support.design.widget.AppBarLayout> <android.support.v4.widget.NestedScrollView android:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior"> <com.cj.nj.tcmh.widget.MyListView android:id="@+id/home_listView" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="1" android:background="@color/colorWhite" android:divider="@null" /> </android.support.v4.widget.NestedScrollView> </android.support.design.widget.CoordinatorLayout>
在通过效果 可以看出 其中在CollapsingToolbarLayout中 包含3个控件
app:layout_collapseParallaxMultiplier="0.6"
这个属性 用于设置当NestedScrollview滑动时 ImageView 所对应做出的滑动效果的速度(视差因子) 数值为0~1第二个控件是我们用来显示数据的 一个ViewGroup(LinearLayout):
可以看到layout_scrollFlags属性 关于这个属性有以下值用于设置 用 | 来分割:
scroll - 想滚动就必须设置这个。
enterAlways - 实现quick return效果, 当向下移动时,立即显示View(比如Toolbar)。
exitUntilCollapsed - 向上滚动时收缩View,但可以固定Toolbar一直在上面。
enterAlwaysCollapsed - 当你的View已经设置minHeight属性又使用此标志时,你的View只能以最小高度进入,只有当滚动视图到达顶部时才扩大到完整高度。
其中还设置了一些属性:
contentScrim - 设置当完全CollapsingToolbarLayout折叠(收缩)后的背景颜色。
expandedTitleMarginStart - 设置扩张时候(还没有收缩时)title向左填充的距离。
第三个控件是Toolbar 其中注意属性:
app:layout_collapseMode="pin"
这个属性代表 Toolbar在 视图滑动到顶部时 显示Toolbar
根据效果图 可以看出页面实现了 沉浸式状态栏
实现是由 fitsSystemWindows 搭配代码实现
以下是代码
/** * 当版本号大于4.4时 * 1):设置 系统栏透明 布局可以延伸到系统栏 * 2):对内容布局设置一个 margin 不让(字体...)被系统栏图标挡住 */ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { Window window = getWindow(); window.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); window.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION, WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION); CollapsingToolbarLayout.LayoutParams layoutParams = new CollapsingToolbarLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); int high = ActivityUtil.getInstance().getStatusBarHeight(this); layoutParams.setMargins(0,high,0,0); ((LinearLayout)findViewById(R.id.header)).setLayoutParams(layoutParams); }