Android RecyclerView 滑动后选中的条目居中显示

本文介绍了如何在RecyclerView的基础上实现滚动居中和无限滚动功能,通过引入GalleryLayoutManager库,详细展示了如何设置布局管理器、自定义Transformer以及监听滚动事件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

话不多说先看效果:

请添加图片描述
实录效果视频如下

滚动居中 RecyclerView

在原有的RecyclerView 基础上操作,其他步骤不变,只是替换一下 manager 步骤

  1. 导入依赖
        maven { url 'https://www.jitpack.io' }
    //无限滚动
    implementation 'com.github.ZhaoChanghu:GalleryLayoutManager:1.1.0'
  1. 使用
        //设置为横向,反向的反之
        GalleryLayoutManager manager = new GalleryLayoutManager(RecyclerView.HORIZONTAL);
        //your_recyclerView 你的RecyclerView 控件,进行绑定
        manager.attach(your_recyclerView);
        //设置滑动缩放效果  Transformer  你可以自定义或者使用我下面贴出的
        manager.setItemTransformer(new Transformer());
        //设置适配器,和以前的写法一样  你的适配器 your_Adapter
        your_recyclerView.setAdapter(your_Adapter);
        //滚动回调
        manager.setOnItemSelectedListener(new GalleryLayoutManager.OnItemSelectedListener() {
            @Override
            public void onItemSelected(RecyclerView recyclerView,ArrayList<View> list, View item, int position) {
                 //参数  list-你的recyclerView 所有的条目View
                 //参数  item-当前选中的条目view
                 //参数  position-当前选择的下标
                 //以下逻辑是上面图片和视频的处理方式
                 //1.首先遍历所有的条目view ,并全部设置为未选中背景
                for (View v: list){
                    TextView mTxt = v.findViewById(R.id.tv_txt);
                    mTxt.setBackground(ContextCompat.getDrawable(getApplicationContext(),R.drawable.bg_ffffff_t1));
                }
                //2.通过当前选中的条目去查找里面的控件
                TextView mTxt = item.findViewById(R.id.tv_txt);
                //3.给查找到的控件设置不同的背景,或者其他操作
                mTxt.setBackground(ContextCompat.getDrawable(getApplicationContext(),R.mipmap.icon_select));
              
            }
        });

Transformer

//滑动过程中的缩放
public class Transformer implements GalleryLayoutManager.ItemTransformer {

    @Override
    public void transformItem(GalleryLayoutManager layoutManager, View item, float fraction) {
        //以圆心进行缩放
        item.setPivotX(item.getWidth() / 2.0f);
        item.setPivotY(item.getHeight() / 2.0f);
        float scale = 1 - 0.3f * Math.abs(fraction);
        item.setScaleX(scale);
        item.setScaleY(scale);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值