面试准备-打卡第十二天-Android篇

211 阅读2分钟

什么是事件?

我们对屏幕的点击,滑动,抬起等一系列的动作都是由一个一个MotionEvent对象组成的,根据不同的动作,主要有三种事件类型:

  1. ACTION_DOWN:手指刚接触屏幕,按下去的那一瞬间产生该事件
  2. ACTION_MOVE:手指在屏幕上移动的时候
  3. ACTION_UP:手指在屏幕上松开的瞬间产生该事件

什么是事件序列?

一个事件序列是指:由一个ACTION_DOWN,0个或者1个或者多个ACTION_MOVE事件,加上一个ACTION_UP事件组成的一个序列

什么是MotionEvent对象?

MotionEvent对象是对Touch事件的相关细节(发生触摸的位置、事件等)的封装

事件分发机制的流程?

事件是用户与屏幕发生交互时产生的,而Activity则是Android中负责与用户发生交互的组件,所以事件的传递,首先是到达Activity,再通过内部传递之后,到达我们布局文件中的layout和View,事件发生之后,需要进行响应处理,在传递的过程中,都有可能有机会处理一个事件序列,如果从Activity往下,到最终的View,事件都没有得到处理,则事件又从下往上,回到Activity,如果回到Activity之后,Activity没有处理这个事件,那么这个事件就会自动结束。

事件分发的三个方法?

  • dispatchTouchEvent:用于分发传递事件,只要事件能够传递到当前View,这个方法就会被调用
1. return true:表示消耗了当前事件,有可能是当前View的onTouchEvent或者是子View的dispatchTouchEvent消费了,事件终止,不再传递
2. return false:调用父ViewGroup或Activity的onTouchEvent
3. return super.dispatcherTouchEvent:则继续往下(子View)传递,或者调用当前View的onTouchEvent方法
  • onInterceptTouchEvent:用于判断是否拦截事件,不往下传递(此方法只有ViewGroup拥有,Activity和View没有)此方法在dispatchTouchEvent方法中调用
1. return true:ViewGroup将该事件拦截,交给自己的onTouchEvent处理
2. return false:继续传递给子元素的dispatchTouchEvent处理
3. return super.dispatcherTouchEvent:事件默认不拦截
  • onTouchEvent:用于处理事件,同样是在dispatchTouchEvent()方法中调用
1. return true:事件消费,当前事件终止
2. return false:交给父View的onTouchEvent
3. return super.dispatherTouchEvent:默认处理事件的逻辑和返回false时相同