本图主要包含三层,即activity viewGroup view,按照事件的传递逐级传递。有几个要点要注意,
1.dispatchTouchEvent如果处理了本次事件,
那么他的执行顺序是这样的。这里是viewGroup的dispatchTouchEvent处理了本次事件
2.onTouchEvent 如果子view的TouchEvent没有处理本次事件,那么该事件会依次向上传递,知道有人处理,如果一直传递到activity 的onTouchEvent还是没人处理,默认本次事件结束.
核心代码
1. Activity
public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}String tag = "MainActivity";@Overridepublic boolean dispatchTouchEvent(MotionEvent event) {String tag1 = "dispatchTouchEvent";switch (event.getAction()) {case MotionEvent.ACTION_DOWN:System.out.println(tag + tag1 + "ACTION_DOWN");break;case MotionEvent.ACTION_MOVE:System.out.println(tag + tag1 + "ACTION_MOVE");break;case MotionEvent.ACTION_UP:System.out.println(tag + tag1 + "ACTION_UP");break;}return super.dispatchTouchEvent(event);}@Overridepublic boolean onTouchEvent(MotionEvent event) {String tag1 = "onTouchEvent";switch (event.getAction()) {case MotionEvent.ACTION_DOWN:System.out.println(tag + tag1 + "ACTION_DOWN");break;case MotionEvent.ACTION_MOVE:System.out.println(tag + tag1 + "ACTION_MOVE");break;case MotionEvent.ACTION_UP:System.out.println(tag + tag1 + "ACTION_UP");break;}return false;}}2.viewGroup
public class MyViewGroup extends ViewGroup {public MyViewGroup(Context context) {super(context);}public MyViewGroup(Context context, AttributeSet attrs) {super(context, attrs);}String tag = "MyViewGroup";@Overridepublic boolean dispatchTouchEvent(MotionEvent event) {String tag1 = "dispatchTouchEvent";switch (event.getAction()) {case MotionEvent.ACTION_DOWN:System.out.println("------>"+tag +"-->"+ tag1 + "ACTION_DOWN");break;case MotionEvent.ACTION_MOVE:System.out.println("------>"+tag + tag1 + "ACTION_MOVE");break;case MotionEvent.ACTION_UP:System.out.println("------>"+tag + tag1 + "ACTION_UP");break;}return super.dispatchTouchEvent(event);}@Overridepublic boolean onTouchEvent(MotionEvent event) {String tag1 = "onTouchEvent";switch (event.getAction()) {case MotionEvent.ACTION_DOWN:System.out.println("------>"+tag + tag1 + "ACTION_DOWN");break;case MotionEvent.ACTION_MOVE:System.out.println("------>"+tag + tag1 + "ACTION_MOVE");break;case MotionEvent.ACTION_UP:System.out.println("------>"+tag + tag1 + "ACTION_UP");break;}return super.onTouchEvent(event);}@Overridepublic boolean onInterceptTouchEvent(MotionEvent ev) {String tag1 = "onInterceptTouchEvent";switch (ev.getAction()) {case MotionEvent.ACTION_DOWN:System.out.println("------>"+tag + tag1 + "ACTION_DOWN");break;case MotionEvent.ACTION_MOVE:System.out.println("------>"+tag + tag1 + "ACTION_MOVE");break;case MotionEvent.ACTION_UP:System.out.println("------>"+tag + tag1 + "ACTION_UP");break;}return super.onInterceptTouchEvent(ev);}}3.view
public class MyButton extends Button {public MyButton(Context context) {super(context);}public MyButton(Context context, AttributeSet attrs) {super(context, attrs);}String tag = "MyButton";@Overridepublic boolean dispatchTouchEvent(MotionEvent event) {String tag1 = "dispatchTouchEvent";switch (event.getAction()) {case MotionEvent.ACTION_DOWN:System.out.println("------>"+tag + tag1 + "ACTION_DOWN");break;case MotionEvent.ACTION_MOVE:System.out.println("------>"+tag + tag1 + "ACTION_MOVE");break;case MotionEvent.ACTION_UP:System.out.println("------>"+tag + tag1 + "ACTION_UP");break;}return super.dispatchTouchEvent(event);}@Overridepublic boolean onTouchEvent(MotionEvent event) {String tag1 = "onTouchEvent";switch (event.getAction()) {case MotionEvent.ACTION_DOWN:System.out.println("------>"+tag + tag1 + "ACTION_DOWN");break;case MotionEvent.ACTION_MOVE:System.out.println("------>"+tag + tag1 + "ACTION_MOVE");break;case MotionEvent.ACTION_UP:System.out.println("------>"+tag + tag1 + "ACTION_UP");break;}return false;}}以上只是部分代码,但是所有事件都已列出。