viewPagerとrecycleViewのスライド競合の解決

917 ワード

viewPagerに横方向のrecycleViewが含まれている場合、横方向にスライドするとviewPagerがページをめくることになります.解決策は
/**
 * zivon
 *   viewPager recycleView     
 */
class NestedRecyclerView(context: Context, attrs: AttributeSet?) : RecyclerView(context, attrs) {

    private val globalRect: Rect = Rect() //     

    override fun dispatchTouchEvent(ev: MotionEvent?): Boolean {
        var x = ev?.rawX?.toInt()
        var y = ev?.rawY?.toInt()
        getGlobalVisibleRect(globalRect)
        if (ev?.action == MotionEvent.ACTION_MOVE) {
            if (globalRect.contains(x!!, y!!)) {
                parent.requestDisallowInterceptTouchEvent(true)
            }
        }
        return super.dispatchTouchEvent(ev)
    }
}

ここでもう1つの問題は、横方向recycleViewが縦方向scrollViewにネストされている場合、recycleView領域を上下にスライドすると、インタフェース全体の縦方向スライドがトリガーされないことです.上のコードにスライド方向の判断を加える必要があり、横スライド時にparentを呼び出すだけである.requestDisallowInterceptTouchEvent(true)