工业和信息化部直属大学,seo优化服务是什么意思,手机网站怎么做微信登陆,在线图片转链接生成器前言 随着科学技术的发展#xff0c;智能手机早已成为我们当代人身边不可缺少的“伙伴”之中的一个#xff0c;堪比对象女友。每天我们对着手机反复的做着点击、滑动操作#xff0c;而手机则随着我们的操作给我们展示她的精彩。… 废话到此结束。 看到这里#xff0c;即使… 前言 随着科学技术的发展智能手机早已成为我们当代人身边不可缺少的“伙伴”之中的一个堪比对象女友。每天我们对着手机反复的做着点击、滑动操作而手机则随着我们的操作给我们展示她的精彩。 … 废话到此结束。 看到这里即使不是作为移动端码农的你也应该知道触摸事件对手机经典键盘机除外的重要性了。 什么是触摸事件 顾名思义。就是触摸手机屏幕后产生的事件。这时候请你拿出手机。点击屏幕中的某个按钮不要松手移动一段距离。松手。 这个过程通常会产生例如以下几个事件 点击Down事件移动Move事件松手Up事件Android为我们封装好了一个触摸事件类MotionEvent,上述的三个过程分别相应着MotionEvent中的MotionEvent.ACTION_DOWN、MotionEvent.ACTION_MOVE、MotionEvent.ACTION_UP事件类型我们能够以此来实现不同的逻辑即事件的分发处理。所谓触摸事件的分发实际上能够理解为MotionEvent事件的分发过程即当一个MotionEvent产生了之后系统须要把这个事件传递给一个详细的View而这个传递的过程就是分发过程。 事件三剑客 一般事件的分发过程是由事件三剑客方法来共同完毕的。 /*** 剑客一用于事件的分发*/
public boolean dispathTouchEvent(MotionEvent ev)/*** 剑客二在剑客一中被调用用于事件的拦截*/
public boolean onInterceptTouchEvent(MotionEvent ev)/*** 剑客三在剑客一中被调用。处理点击事件。true消耗了当前事件 false当前view无* 法再次接收事件*/
public boolean onTouchEvent()(MotionEvent ev)三剑客的关系例如以下图所看到的以Activity的dispathTouchEvent为例 分析可知 1. 触摸事件ev类收到点击的ACTION会回调onUserInteraction方法一般项目中我们把一些须要用户開始触摸时就须要执行的任务代码放在这里。 2. 接下来触摸事件ev会传递给Activity窗体绑定的根视图rootViewView/ViewGroup。如果根视图也有子视图。事件ev会一级一级的分发下去如果在这个过程中ev被消耗了事件就此结束分发否则进入步奏3。 3. 全部的视图布局都没有消耗掉ev事件。就会调用Activity的onTouchEvent()方法。以下会详细讲诉。 Android界面简析 在详细讲诉前我们先来了解下的android的界面架构。如果说手机是一个学校那么手机中的每一个APP应用都是学校里的一道道独特风景正是它们构成了学校的魅力。而每一个APP都是由一个个Activity组成的。 还是在说废话… 例如以下图所看到的我们清晰的看到每一个Activity都会包括一个Window对象。而window对象通常由PhoneWindow来实现。PhoneWindow将一个DecorView设置为整个应用窗体的根View。它将屏幕分成两部分。一个是TitleView。还有一个是ContentView也就是大家熟悉的ContentView布局。ContentView是一个ID为content的FrameLayout而我们一直写的activity_xx.xml布局就是设置在这样一个FrameLayout里。 DecorView将要显示的详细内容呈如今了PhoneWindow上。这里面的全部View的监听事件点击、滑动等操作都通过一个名为WindowManagerService来进行接收详细可看深入理解android卷三并通过Activity来回调相应的监听。 为了让大家更好的理解。我们来写一个小demo例如以下 执行结果如图 小场景。见真理 场景一 我们写一个最简单的demo例如以下 执行程序点击button看到log输出例如以下 改动dispathTouchEvent直接return false。 执行程序点击button是不是看到控制台什么都没有输出。可见事件传递到activity的根视图就被结束分发了。以下已场景二来详细探究下这个过程。 场景二 假如在大学中。学校交给了数学老师一个任务。老师讲这项任务布置给了女班长。而女班长又将这个任务交给了帅气的我。我千辛万苦的将这个任务完毕了然后交给了女班长女班长认为完毕的不错夸了帅气的我几句暗恋上了然后将任务提交给了老师老师看了下也认为完毕的不错就把任务提交给学校了。 根据上面的场景我们设计一个场景实比例如以下 老师——TeacherViewGroup女班长——MonitressViewGroup帅气的我——HandsomeMyView布局层次例如以下图所看到的 TeacherViewGroup和MonitressViewGroup代码例如以下。重写了三剑客方法 HandsomeMyView代码例如以下view是没有剑客2方法onInterceptTouchEvent()的 点击帅气的我能够看见log打印例如以下 能够看见一般事件都有两个过程 传递过程 老师TeacherViewGroup——女班长MonitressViewGroup——帅气的我HandsomeMyView处理过程 帅气的我HandsomeMyView——女班长MonitressViewGroup——老师TeacherViewGroup传递的过程方法剑客1dispatchTouchEvent、剑客2onInterceptTouchEvent 处理的过程方法剑客3onTouchEvent 为了让大家更好的理解。整理视图例如以下 从中我们看出触摸事件ev会依照子View增加ViewGroup先后顺序相反的顺序。依次有机会去消费此触摸事件ev。即最后增加的最先有机会消费此触摸事件消费的前提是触摸点在这个子View的视图范围之内。简而言之传递由外向内消费处理由内向外。 在前面的事件三剑客中细心的同学会发现他们的返回值都是boolean类型那么true和false分别代表什么意义呢 在这里我先告诉大家结论然后在验证这个结论 dispatchTouchEvent()和onInterceptTouchEvent() 返回true表示事件被拦截。不继续。返回false表示事件不被拦截继续下一步流程。onTouchEvent() 返回true表示事件被处理了不用传递给上一级视图返回false表示事件交给上一级视图处理初始情况下他们的默认返回值都为false。 拦截onInterceptTouchEvent() 如果女班长暗恋帅气的我自己偷偷帮我完毕了任务这时候事件就被女班长MonitressViewGroup的onInterceptTouchEvent()方法拦截了即MonitressViewGroup的onInterceptTouchEvent()返回ture此时Log输出例如以下 整理视图例如以下 相同的也能够如果老师人比較好不忍心麻烦学生。自己处理了。这个过程相似女班好处理过程。 到这里我想大家对事件的分发、拦截已经有一个比較清晰的认识了。接下来我们来看下事件的处理。 处理onTouchEvent() 我们处理完任务后是须要将完毕结果汇报给上级的。也就是帅气的我须要向我亲爱的女班长汇报结果。班长向老师汇报结果。如果我不能按时完毕任务。没将任务结果汇报给女班长。也就是HandsomeMyView的onTouchEvent()方法返回true事件被处理了。不用返回给上级此时Log输出例如以下。女班长和老师不用继续处理事件了 整理视图例如以下 相同的女班长和老师也能够不像他们各自的上级汇报。过程相似帅气的我HandsomeMyView。 Ref Mastering the Android Touch SystemAndroid群英传 … 转载于:https://www.cnblogs.com/llguanli/p/8515389.html