超简单的RecyclerView item自下往上无限循环滑动

效果

 

 companion object {
        val TAG = "Main"
    }


    private val adapter by lazy {
        object : BaseQuickAdapter(R.layout.item_layout) {
            override fun convert(helper: BaseViewHolder?, item: Int?) {
                helper?.itemView?.apply {
                    textView.text = "hello world$item"
                }
            }

            override fun getItemCount(): Int {
                return Int.MAX_VALUE
            }

            override fun getItem(position: Int): Int? {
                return data[position % data.size]
            }

            override fun getItemViewType(position: Int): Int {
                var count = headerLayoutCount + data.size
                if (count <= 0) {
                    count = 1
                }
                return super.getItemViewType(position % count)
            }
        }
    }

    var handler = Handler()
    var currentInt = 0

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_camrea)

        recyclerView.layoutManager = linearLayoutManager
        recyclerView.setHasFixedSize(true)

        recyclerView.adapter = adapter
        adapter.setNewData(
            listOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
        )

        //PagerSnapHelper().attachToRecyclerView(recyclerView)

        play()

        recyclerView.addOnScrollListener(object : RecyclerView.OnScrollListener() {
            override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
                super.onScrolled(recyclerView, dx, dy)
                play()
            }

            override fun onScrollStateChanged(recyclerView: RecyclerView, newState: Int) {
                super.onScrollStateChanged(recyclerView, newState)
                
                /*if (newState == RecyclerView.SCROLL_STATE_IDLE) {
                    play()
                }*/
                
            }
        })
        
        /*var animator=ValueAnimator.ofInt(0,recyclerView.height)
        animator.duration=2000
        animator.addUpdateListener { 
            var a=it.animatedValue as Int
            recyclerView.translationY=-a.toFloat()
            recyclerView.requestLayout()
        }
        animator.repeatMode=ValueAnimator.REVERSE
        animator.repeatCount=ValueAnimator.INFINITE
        animator.start()*/

    }

    private fun play() {
        currentInt++
        recyclerView.smoothScrollToPosition(currentInt)
        /*handler.postDelayed({
            currentInt++
            //recyclerView.scrollToPosition(currentInt)
            recyclerView.smoothScrollToPosition(currentInt)
//            val layoutManager = recyclerView.layoutManager as LinearLayoutManager
//            layoutManager.scrollToPositionWithOffset(currentInt, 0)
        }, 2000)*/
    }
    var linearLayoutManager: LinearLayoutManager = object : LinearLayoutManager(this) {
        override fun smoothScrollToPosition(
            recyclerView: RecyclerView,
            state: RecyclerView.State,
            position: Int
        ) {
            val smoothScroller: LinearSmoothScroller =
                object : LinearSmoothScroller(recyclerView.context) {
                    override fun calculateSpeedPerPixel(displayMetrics: DisplayMetrics): Float {
                        // 返回:滑过1px时经历的时间(ms)。                                                                              
                        return 20000f / displayMetrics.densityDpi
                    }

                    override fun calculateDtToFit(
                        viewStart: Int,
                        viewEnd: Int,
                        boxStart: Int,
                        boxEnd: Int,
                        snapPreference: Int
                    ): Int {
                        return boxStart - viewStart
                    }
                }
            smoothScroller.targetPosition = position
            startSmoothScroll(smoothScroller)
            
        }
    }

 

你可能感兴趣的:(Android,移动开发)