ScrollView嵌套ScrollView时的滑动冲突问题(同向滑动)

当ScrollView内部再嵌套另一个ScrollView时,就会出现滑动冲突问题,经常看到的就是,内部滑动失效。


通过对事件分发机制的了解

  1. dispatchTouchEvent:负责事件的分发
  2. onInterceptTouchEvent:判断是否拦截某个事件
  3. onTouchEvent:消费点击事件


事件传递遵循的顺序:Activity->Window->DecorView->顶层View->子View

我们可以通过对事件的拦截处理,来解决这个问题。


1、布局文件

    android:id="@+id/programPlayParentScroll"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:scrollbars="none"
    android:focusableInTouchMode="false">
            android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">
                    android:id="@+id/programPlayMusicListScroll"
            android:layout_width="match_parent"
            android:layout_height="100dp"
            android:scrollbars="none"
            android:layout_marginTop="80dp"/>
    

2、解决方法

当父类布局滑动时,父类拦截事件,子类布局.getParent().requestDisallowInterceptTouchEvent(false)

当子类布局滑动时,父类不拦截事件,子类布局.getParent().requestDisallowInterceptTouchEvent(true)

具体代码如下:

programPlayParentScroll.setOnTouchListener(object : View.OnTouchListener{
    override fun onTouch(p0: View?, p1: MotionEvent?): Boolean {
        programPlayMusicListScroll.parent.requestDisallowInterceptTouchEvent(false)
        return false
    }
})
programPlayMusicListScroll.setOnTouchListener(object : View.OnTouchListener{
    override fun onTouch(p0: View?, p1: MotionEvent?): Boolean {
        p0.parent.requestDisallowInterceptTouchEvent(true)
        return false
    }
})

你可能感兴趣的:(Android笔记)