为什么在NestedScrollView中放一个布局,点击时还会产生ACTION_MOVE事件?

我重写NestedScrollView的dispatchTouchEvent方法:

public boolean dispatchTouchEvent(MotionEvent ev) {
        switch (ev.getAction()){
            case MotionEvent.ACTION_DOWN:{
                Log.e("AJKSHD","ACTION_DOWN: 坐标("+ev.getRawX()+","+ev.getRawY()+")");
                break;
            }
            case MotionEvent.ACTION_MOVE:{
                Log.e("AJKSHD","ACTION_MOVE 坐标("+ev.getRawX()+","+ev.getRawY()+")");
                break;
            }
            case MotionEvent.ACTION_UP: {
                break;
            }
            default: {
                Log.e("AJKSHD", "default 坐标("+ev.getRawX()+","+ev.getRawY()+")");
                break;
            }
        }

        return super.dispatchTouchEvent(ev);
    }

然后布局是:

<com.sandgrains.edu.student.utils.custom.MyNestedScrollView 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/scrollView"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">


    </LinearLayout>
</com.sandgrains.edu.student.utils.custom.MyNestedScrollView>

当我点击屏幕时,它打印的结果:

2021-10-05 22:02:33.291 6858-6858/com.sandgrains.edu.student E/AJKSHD: ACTION_DOWN: 坐标(493.0,792.0)
2021-10-05 22:02:33.331 6858-6858/com.sandgrains.edu.student E/AJKSHD: ACTION_MOVE 坐标(493.0,792.0)
2021-10-05 22:02:33.364 6858-6858/com.sandgrains.edu.student E/AJKSHD: ACTION_MOVE 坐标(493.0,792.0)
2021-10-05 22:02:33.394 6858-6858/com.sandgrains.edu.student E/AJKSHD: ACTION_MOVE 坐标(493.0,792.0)

产生了额外的ACTION_MOVE事件,系统为什么这个设计?

你可以观察一下 ViewGroup#dispatchTransformedTouchEvent 该方法内有这三次调用,具体为什么有这个设计,希望你能研究一下写个文章分享一下