class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) enableEdgeToEdge() setContentView(R.layout.activity_main) // ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets -> // val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars()) // v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom) // insets // } val recyclerView = findViewById(R.id.recyclerView) val seekBar = findViewById(R.id.seekBar) // 准备 12 个数据 val data: MutableList = ArrayList() for (i in 1..50) { data.add("Item $i") } // 设置 Adapter val adapter = LoopingAdapter(data) recyclerView.adapter = adapter // 设置 SnapHelper // val snapHelper = LinearSnapHelper() // snapHelper.attachToRecyclerView(recyclerView) // 设置横向 LinearLayoutManager val layoutManager = LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false) recyclerView.layoutManager = layoutManager // 设置起始位置 val startPosition = Int.MAX_VALUE / 2 - (Int.MAX_VALUE / 2 % data.size) recyclerView.scrollToPosition(startPosition) Log.e("asdasdasdas", "stat===" + startPosition) // 添加滚动监听,对齐到第一个可见项目 recyclerView.addOnScrollListener(object : RecyclerView.OnScrollListener() { override fun onScrollStateChanged(recyclerView: RecyclerView, newState: Int) { super.onScrollStateChanged(recyclerView, newState) if (newState == RecyclerView.SCROLL_STATE_IDLE) { // 滑动停止 val layoutManager = recyclerView.layoutManager as LinearLayoutManager? layoutManager?.let { val firstVisiblePosition = it.findFirstVisibleItemPosition() val firstVisibleView = it.findViewByPosition(firstVisiblePosition) firstVisibleView?.let { view -> val offset = view.left // 计算偏移量 if (offset != 0) { // 仅当未对齐时才滑动 recyclerView.smoothScrollBy(offset, 0) } } } } } }) // 设置 SeekBar 最大值为数据量 seekBar.max = data.size - 1 // 监听 RecyclerView 滚动 recyclerView.addOnScrollListener(object : RecyclerView.OnScrollListener() { override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) { super.onScrolled(recyclerView, dx, dy) val firstVisibleItem = layoutManager.findFirstVisibleItemPosition() % data.size seekBar.progress = firstVisibleItem Log.e("asdasdasdas", "stat===" + firstVisibleItem) } }) } }