美文网首页
ViewPager2 TabLayout Fragment Re

ViewPager2 TabLayout Fragment Re

作者: 克罗克达尔 | 来源:发表于2021-08-03 11:49 被阅读0次

在使用 ViewPager2 TabLayout Fragment RecyclerView 的时候发现这样一个问题:
竖直滑动RecyclerView的时候如果不小心发生了水平滑动,RecyclerView就滑动不了了,只能滑动ViewPager2,这种体验不是很好。


Record_2021-08-03-11-42-55_d11621d41b37c1cee374f534be417c31.2021-08-03 11_47_33.gif

以下是我的解决方案,亲测有效



class RecyclerViewAtViewPager2 : RecyclerView {
    constructor(context: Context) : super(context)
    constructor(context: Context, attrs: AttributeSet?) : super(context, attrs)
    constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(
        context,
        attrs,
        defStyleAttr
    )

    private var startX = 0f
    private var startY = 0f

    override fun dispatchTouchEvent(ev: MotionEvent): Boolean {
        when (ev.action) {
            MotionEvent.ACTION_DOWN -> {
                startX = ev.x
                startY = ev.y
            }
            MotionEvent.ACTION_MOVE -> {

                val endX = ev.x
                val endY = ev.y
                val disX = Math.abs(endX - startX)
                val disY = Math.abs(endY - startY)

                "start x = $startX , start y = $startY , end x = $endX , end y = $endY , dis x = $disX , dis y = $disY".log()
                startX = endX
                startY = endY

                if (disY > disX) {
                    //发生了竖向滑动
                    getViewPager2(parent)?.isUserInputEnabled = false
                }

            }
            MotionEvent.ACTION_UP, MotionEvent.ACTION_CANCEL -> {
                getViewPager2(parent)?.isUserInputEnabled = true

            }
        }
        return super.dispatchTouchEvent(ev)
    }


    private fun getViewPager2(viewParent: ViewParent): ViewPager2? {

        return when {
            viewParent is ViewPager2 -> {
                viewParent
            }
            viewParent.parent != null -> {
                getViewPager2(viewParent.parent)
            }
            else -> {
                null
            }
        }
    }
}

使用RecyclerViewAtViewPager2替代RecyclerView

相关文章

网友评论

      本文标题:ViewPager2 TabLayout Fragment Re

      本文链接:https://www.haomeiwen.com/subject/rhtevltx.html