RecyclerView 指定item滚动到 指定位置 做悬停
2019-04-17 本文已影响0人
米奇小林
RecyclerView 有些需求 需要滚动到指定item ,页面顶部做一个 悬停 tab切换。比较简单的做法在onScrolled方法中,获取指定item view的 top值,判断该是否已满足条件进行悬停的页面操作。
1.通过布局 使用RelativeLayout 做为RecyclerView 父容器(主要是在做悬停时,平滑过度,直接用悬停的view 覆盖列表中tab的view,达到完美过度。避免父容器高度变化 列表重新绘制带来的抖动)
2.布局如下 (预先写好一个 悬停的view 先设为 GONG,条件满足时 设置 显示):
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.chenyu.myapplication.MainActivity">
<TextView
android:height="40dp"
android:text="顶部导航栏工具栏部分"
android:textSize="30dp"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<RelativeLayout
android:layout_weight="1"
android:layout_width="match_parent"
android:layout_height="0dp">
<android.support.v7.widget.RecyclerView
android:id="@+id/rl1"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</android.support.v7.widget.RecyclerView>
<!--需要做悬停的view-->
<TextView
android:height="40dp"
android:id="@+id/topview"
android:background="#fff"
android:gravity="center"
android:visibility="gone"
android:text="分割线,评论列表"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</RelativeLayout>
</LinearLayout>
3.RecyclerView 添加 addOnScrollListener 监听。
recyclerView .addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
}
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
// 获取满足条件的 item 的位置信息
View childView = recyclerView.getLayoutManager().findViewByPosition(30);
if(childView != null){
int top = childView.getTop();
Log.e("TAG","TOP: "+top);
// 判断top值 是否到达临界值
if(top <= 0){
topView.setVisibility(View.VISIBLE);
}else {
topView.setVisibility(View.GONE);
Log.e("TAG","放飞自我");
}
}else {
Log.e("TAG","待参考item不可见 未获取 null");
}
}
});