美文网首页
RecyclerView 指定item滚动到 指定位置 做悬停

RecyclerView 指定item滚动到 指定位置 做悬停

作者: 米奇小林 | 来源:发表于2019-04-17 17:12 被阅读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");
                }


            }
        });

亲测完美解决。网上查到好多,代码既复杂又繁琐不靠谱!!!

相关文章

网友评论

      本文标题:RecyclerView 指定item滚动到 指定位置 做悬停

      本文链接:https://www.haomeiwen.com/subject/mrgnwqtx.html