前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Recyclerview返回顶部及分割线代码实现

Recyclerview返回顶部及分割线代码实现

作者头像
用户4458175
发布2020-02-12 16:45:47
7980
发布2020-02-12 16:45:47
举报
文章被收录于专栏:andy的小窝andy的小窝

首先是分割线,添加自定义类SpacesItemDecoration

代码语言:javascript
复制
public class SpacesItemDecoration extends RecyclerView.ItemDecoration {

    private int space;

    public SpacesItemDecoration(int space) {
        this.space=space;
    }

    @Override
    public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
        outRect.left=space;
        outRect.right=space;
        outRect.bottom=space;
            outRect.top=space;
    }

}
代码语言:javascript
复制
 //设置item之间的间隔
        SpacesItemDecoration decoration=new SpacesItemDecoration(10);
        recyclerView.addItemDecoration(decoration);

返回顶部的实现

代码语言:javascript
复制
public abstract class RecyclerViewScrollDetector extends RecyclerView.OnScrollListener {

    private int mScrollThreshold;

    public abstract void onScrollUp();

    public abstract void onScrollDown();

    public abstract void onScrollTop();

    @Override
    public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
        //设置移动3后才触发事件
        setScrollThreshold(3);
        boolean isSignificantDelta = Math.abs(dy) > mScrollThreshold;
        if (isSignificantDelta) {
            if (dy > 0) {
                onScrollUp();
            } else {
                if(getScrolledDistance(recyclerView)>1000){
                    onScrollDown();
                }else{
                    onScrollTop();
                }
            }
        }
    }

    private int getScrolledDistance(RecyclerView recyclerView) {
        LinearLayoutManager layoutManager = (LinearLayoutManager)recyclerView.getLayoutManager();
        View firstVisibleItem = recyclerView.getChildAt(0);
        int firstItemPosition = layoutManager.findFirstVisibleItemPosition();
        int itemHeight = firstVisibleItem.getHeight();
        int firstItemBottom = layoutManager.getDecoratedBottom(firstVisibleItem);
        return (firstItemPosition + 1) * itemHeight - firstItemBottom;
    }

    public void setScrollThreshold(int scrollThreshold) {
        mScrollThreshold = scrollThreshold;
    }

//imageview 就是返回顶部的图像 调用recyclerView.smoothScrollToPosition(0);

代码语言:javascript
复制
  recyclerView.addOnScrollListener(new RecyclerViewScrollDetector() {
            @Override
            public void onScrollUp() {
                if(imageView.getVisibility()==View.VISIBLE){
                    imageView.setVisibility(View.INVISIBLE);
                }
            }

            @Override
            public void onScrollDown() {
                if(imageView.getVisibility()!=View.VISIBLE){
                    imageView.setVisibility(View.VISIBLE);
                }
            }
            //以滑进顶部识别区1000
            @Override
            public void onScrollTop() {
                if(imageView.getVisibility()==View.VISIBLE){
                    imageView.setVisibility(View.INVISIBLE);
                }
            }
        });
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档