zoukankan      html  css  js  c++  java
  • Android开发系列之事件拦截机制

          对于Android开发者来说理解事件传递机制的重要性,我想应该是不言而喻的。在一个Activity里面,我们经常会重写onTouchEvent事件,可是重写结束之后,对于是返回true还是返回false却感到迷惑。心情好的时候返回true,心情不好的时候返回false。

          要完全理解事件拦截机制,我们首先需要明白这几个方法的作用:dispatchTouchEvent(MotionEvent ev),onInterceptTouchEvent(MotionEvent ev),onTouchEvent(MotionEvent ev)。

          首先我们先抛出一个问题,当我们点击LinearLayout里面的一个Button的时候,按照事件传递的机制会发生什么呢?会发现ViewGroup里面,我们可以重写上面三个方法,但是在单独的一个子View里面,我们却只能重写:dispatchTouchEvent(MotionEvent ev),onTouchEvent(MotionEvent ev)。为什么呢?所以下面我们就来分别将一个这三个方法的作用。

          dispatchTouchEvent(MotionEvent ev)方法作用是分发事件,当一个事件到达当前的View时,View将调用该方法进行事件的分发,正确传递到能够处理、响应的控件上面。该方法所携带的参数MotionEvent已经封装了该次事件的响应参数信息。

          onInterceptTouchEvent(MotionEvent ev)方法作用是是否拦截该事件,当一个事件到达View的时候,如果View重写的该方法返回true的话,那么表示该View能够处理响应该事件,那么该事件将不会继续往下面传递。如果重写的该方法返回false,那么该事件将继续往下面的子控件传递,最终到达能够响应的子View里面。

          onTouchEvent(MotionEvent ev)方法是作用处理响应事件的地方,当该方法执行完成的时候同样会返回一个boolean值,只不过该boolean值是判断是否需要向上级View反馈信息,就比如你完成一个任务之后,是否需要向项目经理报告完成结果一样。如果返回true,那么表示不需要反馈了,我已经处理好。如果返回false,那么表示需要向上级View反馈,让它决定最终的结果状态。

          当然上面的三个方法参数都是MotionEvent,表示都会携带该次事件的参数信息。

  • 相关阅读:
    LeetCode 977 有序数组的平方
    LeetCode 24 两两交换链表中的节点
    LeetCode 416 分割等和子集
    LeetCode 142 环形链表II
    LeetCode 106 从中序与后序遍历序列构造二叉树
    LeetCode 637 二叉树的层平均值
    LeetCode 117 填充每个节点的下一个右侧节点
    LeetCode 75 颜色分类
    redhat 7.4 挂载ntfs格式的u盘并且使用
    redhat 查看CPU frequency scaling(CPU频率缩放)
  • 原文地址:https://www.cnblogs.com/xiaocai20091687/p/xiaocai_android_new_6.html
Copyright © 2011-2022 走看看