recyclerView一键回到顶部

1.滚动监听:设置回到顶部按钮的显示隐藏

 binding.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);
                //获取RecyclerView当前顶部显示的第一个条目对应的索引
                int position = manager.findFirstVisibleItemPosition();
                //根据索引来获取对应的itemView
                View firstVisiableChildView = manager.findViewByPosition(position);
                //获取当前显示条目的高度
                int itemHeight = firstVisiableChildView.getHeight();
                //获取当前Recyclerview 偏移量
                int flag = (position) * itemHeight - firstVisiableChildView.getTop();
                //注意事项:recyclerView不要设置padding
                if(flag==0)
                    binding.ivTop.setVisibility(View.GONE);
                else
                    binding.ivTop.setVisibility(View.VISIBLE);
            }
        });

2.设置一键回到顶部按钮的点击事件

   @Override
    public void goTop() {
        binding.recyclerView.post(new Runnable() {
            @Override
            public void run() {
                binding.recyclerView.scrollToPosition(0);
            }
        });
    }

3.item的布局文件:recyclerView的item布局文件最外层一定不要设置margin

  <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <android.support.v7.widget.CardView 
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_margin="3dp"
            app:cardElevation="0dp"
            app:contentPaddingBottom="2dp"
            app:contentPaddingTop="2dp">
             <ImageView
                    imgUrl="@{product.img}"
                    android:layout_width="match_parent"
                    android:layout_height="200dp"
                    android:layout_margin="5dp"
                    android:adjustViewBounds="true"                   
                    android:scaleType="centerCrop"
                    android:transitionName="transitionImg" />

                <TextView
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:gravity="center"
                    android:padding="2dp"
                    android:text="@{product.name}"
                    android:textSize="14sp" />
        </android.support.v7.widget.CardView>
    </FrameLayout>

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金 Cover 有什么料? 从这篇文章中你...
    hw1212阅读 13,116评论 2 59
  • 【Android 控件 RecyclerView】 概述 RecyclerView是什么 从Android 5.0...
    Rtia阅读 308,087评论 27 439
  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,862评论 1 92
  • 内容 抽屉菜单 ListView WebView SwitchButton 按钮 点赞按钮 进度条 TabLayo...
    小狼W阅读 1,619评论 0 10
  • 冷了几日的广州开始回暖,像是阳光灿烂的春天,走在街头,还微微渗汗。不过,看完腾讯一个公众号关于北京大兴火灾的后续报...
    林慕言阅读 291评论 0 0