实现带悬浮条的RecycleView,可能没你想象的那么复杂!

前言

主要思路是为RecycleView添加addOnScrollListener监听,然后改变悬浮条的位置即可实现。


提示:以下是本篇文章正文内容

代码如下(示例):
在这里插入图片描述
主要代码如下(示例):

mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
    
    
    @Override
    public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
    
    
        super.onScrollStateChanged(recyclerView, newState);
        //获取悬浮条的高度
        mSuspensionHeight = mSuspensionBar.getHeight();
    }

    @Override
    public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
    
    
        super.onScrolled(recyclerView, dx, dy);
        //对悬浮条的位置进行调整
        //找到下一个itemView
        View view = layoutManager.findViewByPosition(mCurrentPosition + 1);
        if (view != null){
    
    
            if (view.getTop() <= mSuspensionHeight){
    
    
                //需要对悬浮条进行移动
                mSuspensionBar.setY(-(mSuspensionHeight-view.getTop()));
            }else{
    
    
                //保持在原来的位置
                mSuspensionBar.setY(0);
            }
        }

        if (mCurrentPosition != layoutManager.findFirstVisibleItemPosition()){
    
    
            mCurrentPosition = layoutManager.findFirstVisibleItemPosition();
            updateSuspensionBar();
        }

    }
});
updateSuspensionBar();
private void updateSuspensionBar() {
    
    
    Picasso.with(this)
            .load(getAvatarResId(mCurrentPosition))
            .centerInside()
            .fit()
            .into(mSuspensionIv);
    mSuspensionTv.setText("粥可温 "  + mCurrentPosition);
}

推荐阅读

我参加了Jetpack Compose开发挑战赛

About

文中Demo下载链接

UI系列文章一览

猜你喜欢

转载自blog.csdn.net/u014158743/article/details/114278011