Q: Android RecycleView how to disable manual scroll but allow item clicked I am working on an idea, which is make a RecyclerView auto scrolling but allow user to click item without stop scrolling.
First, I create a custom LayoutManager to disable manual scroll, also change the speed of scroll to a certain position
class CustomLayoutManager(context: Context, countOfColumns: Int) :
GridLayoutManager(context, countOfColumns) {

// Custom smooth scroller
private val smoothScroller = object : LinearSmoothScroller(context) {
    override fun calculateSpeedPerPixel(displayMetrics: DisplayMetrics): Float =
        500f / displayMetrics.densityDpi
}

// Disable manual scroll
override fun canScrollVertically(): Boolean = false

// Using custom smooth scroller to control the duration of smooth scroll to a certain position
override fun smoothScrollToPosition(
    recyclerView: RecyclerView,
    state: RecyclerView.State?,
    position: Int
) {
    smoothScroller.targetPosition = position
    startSmoothScroll(smoothScroller)
}
}

Then I do the initial work for the RecyclerView and start smooth scroll after 1 sec
viewBinding.list.apply {
        // initial recycler view
        setHasFixedSize(true)
        customLayoutManager = CustomLayoutManager(context = context, countOfColumns = 2)
        layoutManager = customLayoutManager

        // data list
        val dataList = mutableListOf<TestModel>()
        repeat(times = 100) { dataList.add(TestModel(position = it, clicked = false)) }

        // adapter
        testAdapter =
            TestAdapter(clickListener = { testAdapter.changeVhColorByPosition(position = it) })
        adapter = testAdapter
        testAdapter.submitList(dataList)

        // automatically scroll after 1 sec
        postDelayed({ smoothScrollToPosition(dataList.lastIndex) }, 1000)
    }

Everything goes as my expected until I found that the auto scrolling stopped when I clicked on any item on the RecycelerView, the function when clickListener triggered just change background color of the view holder in TestAdapter
fun changeVhColor(position: Int) {
    position
        .takeIf { it in 0..itemCount }
        ?.also { getItem(it).clicked = true }
        ?.also { notifyItemChanged(it) }
}

here is the screen recording screen recording
issues I encounter

*

*auto scrolling stopped when I tap any item on the ReycelerView

*first tap make scrolling stopped, second tap trigger clickListener, but I expect to trigger clickListener by one tap

Can anybody to tell me how to resolve this? Thanks in advance.

A: There is a lot going on here. You should suspect the touch handling of the RecyclerView and, maybe, the call to notifyItemChanged(it), but I believe that the RecyclerView is behaving correctly. You can look into overriding the touch code in the RecyclerView to make it do what you want - assuming you can get to it and override it.
An alternative would be to overlay the RecyclerView with another view that is transparent and capture all touches on the transparent view. You can then write code for the transparent view that interacts with the RecyclerView in the way that meets your objectives. This will also be tricky and you will have to make changes to the RecyclerView as it is constantly layout out views as scrolling occurs. Since you have your own layout manager, this might be easier if you queue changes to occur pre-layout as scrolling occurs.

A: After tried several ways, found that the key of keep recycler view scrolling automatically is override onInterceptTouchEvent
Example
class MyRecyclerView @JvmOverloads constructor(
     context: Context,
     attrs: AttributeSet? = null,
     defStyle: Int = 0
 ) : RecyclerView(context, attrs, defStyle) {
     override fun onInterceptTouchEvent(e: MotionEvent?): Boolean = false
}

that will make the custom RecyclerView ignore all touch event
