国家企业信用公示系统官方网站,总结格式模板,开发者联盟官网,线上电商平台与手势事件有关的方法
dispatchTouchEvent()#xff1a;该方法将触摸事件分发给相应的视图或视图组。onInterceptTouchEvent()#xff1a;该方法用于判断是否需要拦截触摸事件#xff0c;如果需要拦截#xff0c;则返回 true#xff0c;否则返回 false。onTouchEvent()该方法将触摸事件分发给相应的视图或视图组。onInterceptTouchEvent()该方法用于判断是否需要拦截触摸事件如果需要拦截则返回 true否则返回 false。onTouchEvent()该方法用于处理触摸事件返回一个 boolean 类型的值表示是否消费了该事件。
此外与手势事件有关的常见方法还包括
onTouch()在视图上触摸了屏幕时调用。onLongPress()在视图上长按屏幕时调用。onDoubleTap()在视图上双击屏幕时调用。onSingleTapUp()在视图上单击屏幕并且手指抬起时调用。onShowPress()在视图上按下屏幕并且没有松开时调用。onDown()在视图上按下屏幕时调用。onUp()在视图上抬起手指时调用。onScroll()在视图上发生滚动时调用。onFling()在视图上发生滑动时调用。
手势事件的分发流程可以描述如下
用户在屏幕上进行触摸操作触摸事件被Android系统捕获。Android系统首先将触摸事件传递给当前活动的窗口即顶层的窗口。窗口会将触摸事件传递给当前显示的页面类Activity、Fragment等。页面类会根据触摸事件的类型将其分发给相应的容器类或控件类。容器类ViewGroup会先接收到触摸事件它会遍历其子视图并将触摸事件传递给子视图直到找到合适的控件类。控件类Button、ImageView等接收到触摸事件后会根据事件类型进行相应的处理。如果控件类设置了触摸监听器OnTouchListener则会调用监听器中的回调方法。如果没有设置触摸监听器控件类会判断是否实现了手势识别的接口如OnGestureListener如果实现了则会调用相应的手势回调方法。如果触摸事件没有被任何控件类处理或消耗那么事件将继续向上层传递直到被处理或到达顶层窗口。如果触摸事件最终没有被处理系统会执行默认的处理逻辑例如滚动屏幕或执行点击操作。需要注意的是触摸事件的分发流程是按照视图层次结构从上到下的顺序进行的即从窗口到页面类、容器类和控件类。每个层次的组件都有机会处理触摸事件
如果事件被处理或消耗则不会继续向下传递。这样可以实现触摸事件的精确分发和响应。
手势方法的执行者
对于Android触摸事件中手势方法的执行者可以将其进一步细分为页面类、容器类和控件类。
页面类Activity、Fragment等在Android应用中页面类是最顶层的组件负责显示用户界面和处理用户交互。页面类可以实现手势识别的接口并通过重写相应的手势回调方法来处理手势事件。例如可以在页面类中实现OnGestureListener接口重写onFling()方法来处理滑动手势。容器类ViewGroup容器类是用于包含和管理其他视图组件的容器。例如LinearLayout、RelativeLayout等。容器类可以监听并处理手势事件并传递给包含在其中的子视图或控件。在容器类中可以实现OnTouchListener接口或重写onTouchEvent()方法来处理手势事件。只有容器类可以调用onInterceptTouchEvent方法控件类Button、ImageView等控件类是Android中内置的UI组件用于展示特定功能或接收用户输入。控件类可以设置监听器来处理手势事件例如设置OnTouchListener接口或实现GestureDetector.OnGestureListener接口。通过将手势事件传递给控件类可以实现对于具体控件的手势操作响应。
综上所述页面类是顶层的组件负责整个页面的显示和交互处理容器类是用于包含和管理其他视图组件的容器负责组织和布局
控件类是用于展示特定功能或接收用户输入的UI组件负责展示和响应用户的交互操作。通过理解它们的功能和作用可以区分页面类、容器类和控件类。
对实际开发来说把常见的几种手势流程的排列组合搞清楚
页面类的手势处理,它dispatchTouchEvent方法必须返回super.dispatchTouchEvent如果不分发页面上的视图就无法处理手势
至于页面类的onTouchEvent方法基本没有什么作用。因为手势动作要由具体视图处理页面直接处理手势没有什么意义。所以页面类的手势处理可以不用关心直接略过
控件类的手势处理。它的dispatchTouchEvent方法没有任何作用因为控件下面没有子视图无所谓分不分发。至于控件类的onTouchEvent方法如果要进行手势处理就需要自定义一个控件
重写自定义类中的onTouchEvent方法;如果不想自定义控件就直接调用控件对象的 setOnTouchListener方法注册一个触摸监听器OnTouchListener并实现该监听器的onTouch方法。
所以控件类的手势处理只需关心onTouchEvent方法。
容器类的手势处理。这才是真正要深入了解的地方。容器类的dispatchTouchEvent与 onlnterceptTouchEvent方法都能决定是否将手势交给子视图处理。为了避免手势响应冲突
一般要重写dispatchTouchEvent或者onlnterceptTouchEvent方法。这两个方法的区别可以这么理解:前者是大领导只管派发任务不会自己做事情:后者是小领导尽管有拦截的权利
过也得自己做点事情比如处理纠纷等。容器类的onTouchEvent方法近乎摆设因为需要拦截的在前面已经拦截了需要处理的在子视图中已经处理了。
经过上面的详细分析常见的手势处理方法有下面3个:
页面类的dispatchTouchEvent方法:控制事件的分发决定把手势交给谁处理。容器类的onlnterceptTouchEvent方法:控制事件的拦截,决定是否要把手势交给子视图处理。控件类的onTouchEvent方法:进行手势事件的具体处理
在Android中点击事件的传递顺序通常是按照以下顺序进行的
Activity当用户点击一个应用程序的界面时首先会触发该Activity的onTouchEvent()方法。Window在Activity的onTouchEvent()方法中会通过窗口管理系统Window Manager将触摸事件传递给当前窗口Window。当前窗口可以是Activity中的任意一个视图View。View在窗口中触摸事件会被传递给视图层次结构View Hierarchy从顶层视图开始依次向下传递。每个视图都会根据自己的需要进行处理例如点击事件可能被传递给一个按钮Button或者文本框TextView等。