RecyclerView实现竖向无限循环滚动的列表

通过重写LinearLayoutManager实现直接使用该LayoutManger即可package com.example.testrecy.testimport android.util.Logimport android.view.Viewimport android.view.ViewGroupimport androidx.recyclerview.widget.RecyclerViewimport androidx.recyclerview.widget.RecyclerVie
摘要由CSDN通过智能技术生成

通过重写RecyclerView.LayoutManager实现

直接使用该LayoutManger即可

package com.example.testrecy.test

import android.util.Log
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import androidx.recyclerview.widget.RecyclerView.Recycler

class MyLayoutManager : RecyclerView.LayoutManager() {
   
    private var looperEnable = true

    override fun generateDefaultLayoutParams(): RecyclerView.LayoutParams {
   
        return RecyclerView.LayoutParams(
            ViewGroup.LayoutParams.WRAP_CONTENT,
            ViewGroup.LayoutParams.WRAP_CONTENT
        )
    }

    override fun canScrollHorizontally(): Boolean {
   
        return false
    }

    override fun canScrollVertically(): Boolean {
   
        return true
    }

    override fun onLayoutChildren(
        recycler: Recycler,
        state: RecyclerView.State
    ) {
   
        if (itemCount <= 0) {
   
            return
        }
        //preLayout主要支持动画,直接跳过
        if (state.isPreLayout) {
   
            return
        }
        //将视图分离放入scrap缓存中,以准备重新对view进行排版
        detachAndScrapAttachedViews(recycler)
        var actualHeight = 0
        
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现 RecyclerView无限循环滚动,可以通过以下步骤: 1. 在 RecyclerView 的 Adapter 中,重写 getItemCount() 方法,返回一个足够大的数字,比如 Integer.MAX_VALUE,这样 RecyclerView 就会认为有无限个 item。 2. 在 onBindViewHolder() 方法中,对 position 取模,获取实际的数据位置。 3. 在 onBindViewHolder() 方法中,通过设置 RecyclerView 的 layoutManager,实现循环滚动效果。 具体实现可以参考以下代码: ``` public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> { private List<String> mData; public MyAdapter(List<String> data) { mData = data; } @NonNull @Override public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item, parent, false); return new ViewHolder(view); } @Override public void onBindViewHolder(@NonNull ViewHolder holder, int position) { int realPosition = position % mData.size(); String data = mData.get(realPosition); holder.bindData(data); } @Override public int getItemCount() { return Integer.MAX_VALUE; } static class ViewHolder extends RecyclerView.ViewHolder { private TextView mTextView; public ViewHolder(@NonNull View itemView) { super(itemView); mTextView = itemView.findViewById(R.id.text_view); } public void bindData(String data) { mTextView.setText(data); } } } ``` 然后,在使用 RecyclerView 的地方,可以这样设置 layoutManager: ``` LinearLayoutManager layoutManager = new LinearLayoutManager(context); layoutManager.setOrientation(LinearLayoutManager.HORIZONTAL); layoutManager.scrollToPosition(Integer.MAX_VALUE / 2); recyclerView.setLayoutManager(layoutManager); recyclerView.setAdapter(adapter); ``` 其中,scrollToPosition() 方法可以将 RecyclerView 滚动到中间位置,以保证初始状态下,显示的是数据的中间部分。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值