一、前言:
viewPager里包含横向的recycleView时,横向滑动recycleView会导致viewPager翻页,

注意:GridLayoutManager 竖向4个,然后整体横向滑动
//---下方图书列表---
rvList.apply {
val gridLayoutManager = GridLayoutManager(context,4)
gridLayoutManager.orientation = LinearLayoutManager.HORIZONTAL
if (rvList.itemDecorationCount<=0){
addItemDecoration(SpacesItemDecoration(15))
}
setPadding(15.dp,0,0,0)
layoutManager = gridLayoutManager
adapter = madapter
currentStyleList?.let {
madapter.setList(currentStyleList)
}
}
1、解决办法是:
/**
* 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)
}
}
这里还有一个问题就是,如果横向recycleView是被嵌套在纵向scrollView里的话,在recycleView区域上下滑动的时候,不会触发整个界面的纵向滑动。需要在上面代码中加滑动方向的判断,只需要在横向滑动的时候调用parent.requestDisallowInterceptTouchEvent(true)
2、解决办法
后来发现横向滑动没问题,竖向滑动不灵敏,就注释掉几行代码,就OK了。
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) {
// MyToash.Log("home","----x:${x} y:${y}")
// MyToash.Log("home","----globalRect :${globalRect.contains(x!!, y!!)}")
// if (globalRect.contains(x!!, y!!)) {
// parent.requestDisallowInterceptTouchEvent(true)
// }
//
// }
return super.dispatchTouchEvent(ev)
}
}
网友评论