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

话不多说先看效果:

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

滚动居中 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);
    }
}
  • 43
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现RecyclerView的多选功能,可以使用如下步骤: 1. 在RecyclerView的Adapter中定义一个Map<Integer, Boolean>变量,用于记录每一个条目是否被选中。 2. 在ViewHolder的构造方法中,为ItemView设置一个点击监听器,当用户点击某个条目时,将其对应的状态设置为选中或未选中,并更新Map中的值。 3. 在RecyclerView的onScrollStateChanged方法中,监听RecyclerView滑动状态,当RecyclerView处于静止状态(SCROLL_STATE_IDLE)时,判断当前是否有选中条目,如果有,则通知Activity或Fragment更新UI。 4. 在Activity或Fragment中,处理更新UI的逻辑,例如显示选中条目数量、删除选中条目等。 下面是一个简单的示例代码: ``` public class MyAdapter extends RecyclerView.Adapter<MyViewHolder> { private Map<Integer, Boolean> mSelectedPositions = new HashMap<>(); @Override public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_layout, parent, false); return new MyViewHolder(itemView); } @Override public void onBindViewHolder(MyViewHolder holder, int position) { boolean isSelected = mSelectedPositions.get(position) == null ? false : mSelectedPositions.get(position); holder.itemView.setSelected(isSelected); } @Override public int getItemCount() { return mItemCount; } public void toggleSelection(int position) { boolean isSelected = mSelectedPositions.get(position) == null ? false : mSelectedPositions.get(position); mSelectedPositions.put(position, !isSelected); notifyItemChanged(position); } public void clearSelections() { mSelectedPositions.clear(); notifyDataSetChanged(); } public int getSelectedItemCount() { return mSelectedPositions.size(); } public List<Integer> getSelectedItems() { List<Integer> items = new ArrayList<>(mSelectedPositions.size()); for (int i = 0; i < mSelectedPositions.size(); i++) { items.add(mSelectedPositions.keyAt(i)); } return items; } } public class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { public MyViewHolder(View itemView) { super(itemView); itemView.setOnClickListener(this); } @Override public void onClick(View v) { ((MyAdapter) recyclerView.getAdapter()).toggleSelection(getAdapterPosition()); } } public class MyActivity extends AppCompatActivity { private MyAdapter mAdapter; private RecyclerView mRecyclerView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mRecyclerView = findViewById(R.id.recyclerView); mAdapter = new MyAdapter(); mRecyclerView.setAdapter(mAdapter); mRecyclerView.setLayoutManager(new LinearLayoutManager(this)); mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrollStateChanged(RecyclerView recyclerView, int newState) { super.onScrollStateChanged(recyclerView, newState); if (newState == RecyclerView.SCROLL_STATE_IDLE) { updateUI(); } } }); } private void updateUI() { int selectedItemCount = mAdapter.getSelectedItemCount(); if (selectedItemCount > 0) { // 显示选中条目数量 } else { // 隐藏选中条目数量 } } } ``` 需要注意的是,上述代码仅为示例代码,具体的实现方式可能因需求的不同而有所不同。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值