RecycleView实现像ViewPager一次滑一页效果

仿微信读书首页一样,一次动翻一页效果,用RecycleView去实现,是因为这样可以实现卡片效果,如图:
在这里插入图片描述
先说一下,卡片的效果就是把RecycleView的item布局设置为 wrap_content 即可。

下面说一下一次只滑动一页的实现:

//设置recycleView布局管理器
val layoutManager = LinearLayoutManager(this)
layoutManager.orientation = LinearLayoutManager.HORIZONTAL
recycleView.layoutManager = layoutManager
// 滑动后Snap
PagerSnapHelper().attachToRecyclerView(contentView)
// 滑动时使父布局不响应事件
recycleView.setOnTouchListener(DisInterceptTouchListener())

就这么几行简单的代码即可实现。

最后。添加 DisInterceptTouchListener监听。

class DisInterceptTouchListener : View.OnTouchListener {

    @SuppressLint("ClickableViewAccessibility")
    override fun onTouch(v: View, event: MotionEvent): Boolean {
        if (v !is ViewGroup) {
            return false
        }
        when (event.action) {
            MotionEvent.ACTION_DOWN -> {
                v.parent.requestDisallowInterceptTouchEvent(true)
                v.onTouchEvent(event)
                return true
            }
            MotionEvent.ACTION_MOVE -> {
                v.parent.requestDisallowInterceptTouchEvent(true)
            }
            MotionEvent.ACTION_UP, MotionEvent.ACTION_CANCEL -> {
                v.parent.requestDisallowInterceptTouchEvent(false)
            }
        }
        return false
    }
}

  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要在 RecyclerView实现新的 ViewHolder,需要执行以下步骤: 1. 创建一个新的 Java 类,继承自 RecyclerView.ViewHolder 类。 2. 在类中定义视图元素。 3. 在构造函数中使用 findViewById() 方法初始化视图元素。 4. 在类中实现必要的方法,如 onBindViewHolder()。 5. 在 RecyclerView.Adapter 中修改 onCreateViewHolder() 方法以创建新的 ViewHolder。 以下是一个示例代码,它演示了如何创建一个简单的 RecyclerView ViewHolder: ```java public class MyViewHolder extends RecyclerView.ViewHolder { public TextView textView; public MyViewHolder(View itemView) { super(itemView); textView = (TextView) itemView.findViewById(R.id.text_view); } public void onBindViewHolder(MyViewHolder holder, int position) { holder.textView.setText("Item " + position); } } ``` 要使用这个 ViewHolder,需要在 RecyclerView.Adapter 中修改 onCreateViewHolder() 方法: ```java public class MyAdapter extends RecyclerView.Adapter<MyViewHolder> { @Override public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.my_item_layout, parent, false); return new MyViewHolder(itemView); } @Override public void onBindViewHolder(MyViewHolder holder, int position) { holder.textView.setText("Item " + position); } @Override public int getItemCount() { return 10; } } ``` 在这个示例代码中,MyViewHolder 类继承自 RecyclerView.ViewHolder 类,它包含了一个 TextView 元素。在 onCreateViewHolder() 方法中,使用 LayoutInflater.inflate() 方法创建视图并返回新的 ViewHolder。在 onBindViewHolder() 方法中,将文本设置为 "Item" 和列表项的位置。最后,在 RecyclerView.Adapter 中使用新的 ViewHolder 类型。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值