一 吸顶效果有多种实现方式,这里只展示其中一种思路。通过ScrollView的滑动监听 得到当前view的Y轴距离窗口的高度, 显示布局中影藏的悬浮布局。
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<RelativeLayout
android:id="@+id/悬浮view"
android:layout_width="match_parent"
android:layout_height="50dp">
<TextView
android:id="@+id/"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</RelativeLayout>
<ScrollView
android:id="@+id/ScrollView"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<RelativeLayout
android:id="@+id/"
android:layout_width="wrap_content"
android:layout_height="match_parent">
<android.support.v7.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</RelativeLayout>
</ScrollView>
</RelativeLayout>
二 代码 :
ScrollView.setOnScrollChangeListener(new View.OnScrollChangeListener() {
@Override
public void onScrollChange(View v, int scrollX, int scrollY, int oldScrollX,
int oldScrollY) {
int[] location = new int[2];
view.getLocationInWindow(location);
//悬浮吸顶
if (location[1] <= view.getHeight()-getStatusBarHeight()) {
//如果是沉浸式 需要减去状态栏的高度
(悬浮布局view).setVisibility(View.VISIBLE);
}
if (location[1] > view.getHeight()-getStatusBarHeight()) {
(悬浮布局view).setVisibility(View.INVISIBLE);
// 注意 这里不能设置View.GONE 否则会有闪屏的BUG
}
if (location[1] + view.getHeight()-getStatusBarHeight() == 0) {
// 当view完全不可见时隐藏悬浮布局
(悬浮布局view).setVisibility(View.INVISIBLE);
}
}
});