我重写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 该方法内有这三次调用,具体为什么有这个设计,希望你能研究一下写个文章分享一下