00:00
先,我们还是一起来把上一次课学的东西给他复习一下。上一次课呢,我们主要是讲了一个事件机制。嗯,主要分为屏幕的触控和按键的操作好了。在讲这两个东西之前呢,我们先要提出两个问题。在这里面,也就是说我们的界面是由FT来展现出来的,对吧,那我们现在界面展现出来以后,我们可能会进行两种操作,一种呢是触控那个界面的某一个视图。可以是按下去,可以是移动,也可以是离开,对吧,甚至有可能我们也前面学的什么点击什么长按。嗯。这是一种就对视图的一个屏幕触控的操作,另外一个呢,就是我们对手机上的一些按键的操作。
01:03
他如何来做响应?是这样的两个问题,我们把这两个问题呢,给它复制下来。啊,或者把这个activity改成Android吧。这样可能会更好一些,来我们来看一下,来我把我把这个PPT上面改一下啊。啊,现在大家应该知道了,我们去响应对屏幕触控系统是做了一个什么事。是不是将它做了一个什么工装啊,叫什么呀,是motion呀,啊,也就是motion机制啊好下面一个。
02:05
如果是对按键的操作,它做了一个对应的什么叫key的,对吧,Key啊。这里面啊,重点是motion的key呢比较简单,要它的处理特别的简单,而它呢相对来说比较麻烦一些。好,我们先来看这个难一点的,也是比较重要一些的。有屏幕触控的机制好,首先我们得知道事件的类型。有了一种。啊,我们重点的有三个是吧,当还有什么木和啊,这个应该是比较简单的对吧?好下面一个就是事件产生的一个先后顺序。先是产生当事界啊。
03:01
大世界,也就是说我会封装一个某些对象吧,它的类型为什么?大是吧,接着才是木好了,那有可能我是不是产生多个移动啊啊,那就可能会产生多个目啊,中间的可能还有更多的好,最后有一个叫什么二。啊,离开或者叫起来,对吧?嗯,那也就是说down和up只有一次,而木有什么多次。吧,这是我们的一个事件的操作,它以及它的一个先后顺序,下面要说的是API了,你能想吗?我们对评委的一些操最终都体现在程序上面,对不对,我们要程序来处理。你要写程序,首先得要累,要有接口。啊,现在我们就去学它里面定义的一些相关的一些API。
04:04
啊,首先第一个。是它的这一个事件对象叫motion event对象。嗯,在这个里面呢,大家去看的时候,他有这么多,你你记的时候,你是怎么个记法,我不知道大家怎么记的啊。我找一个问问他是怎么记的,就是这么多东西对吧,看起来很多很多,嗯,找个。刘神龙。你说呀,你你记他怎么记。这几个东西。就是一个套路,什么套路啊,你这是秘籍,不告诉大家是不是?嗯。嗯。坐下来吧。
05:02
吕少强。你说下,你记怎么记?不用记是吧。嗯。就能点出来是吧。嗯,坐下吧。其实它其实是一个是一个数据封装体。知道什么叫数据呢?它主要不体现在行为上面,它是体现在我作为一个数据包装的对象,我里面能封装数据,它是不是封装的是什么数据啊?是不是我们对屏幕的一个操作呀。你就要想着我对屏幕的操作方法哪对应哪些,有哪些数据。对不对,有哪些数据啊。就两个类型和坐标。
06:06
能理解吗?就两个一个类型,一个坐标,就就是说它其实就分为两个部分,一个是上面这一部分。这都是它对应它的类型的。对吧,下面这一部分对应它的什么。坐标。而且这个东西是要你要先要理解了,而我我操我操作屏幕这个事件,首先我当然是目是二呀,这是这是世界有不同类型啊好,那我怎么样得到当前世界类型呢?得到第二条嘛。对吧。就你要这么想的去记,你要先分好类啊,要知道下面一个就是坐标,这有四个方法,我得到一个坐标,其实只有有几个数据我要得到,要确定一个坐标,两个A轴坐标,一个什么Y,诶它怎么又有四个方法呢?应该有两个方法呀。
07:02
你说区别在哪?为什么有四个?就是算一个,大家就要想啊,自己的脑子里想清楚算一个坐标,坐标有首先得确定一个什么。原点对不对,你原点在哪里,就是说,也就是说我们是不是有两种原点呢。一种是屏幕的着定点,一个是什么视图的着定点?对呀,你要这么整它,它就简单了,知道吧,它实际上是跟你的那个现实生活中的一些呃,相关的一些体验啊,包括大家以前学的一些数学的知识啊,都是关联在一起的。好,这说的是他大家一定要有这种概念,你一定要知道,我去记一个API,它的一些方法,不是说我死记硬背的。其实还是有一定的套路的。
08:03
下面一个打开。Activity。这个我们说activity,它其实主要是两个相关的功能方法,一个是什么呀。那你看你学他现在有两个方法,你怎么去理解啊。这两个方法大家想啊先,大家现在学会这么久了,你要想到我们现在学了这么久,是事件,事件关于事件的处理有哪些方面,对事件的操作就三个,现在我们不就就有三个吗?分发处理消费是吧,而消费是建立在处理的基础上吧,也就是说你不处理能消费吗?不能对吧。OK。那那你想啊,分发对应什么方法呀,对呀,就对应dispa方法。
09:06
啊,我就下,嗯,差不多写一下啊,Despite英文的方法对吧?啊处你们。On onto有一个onto,这是带个回调方法吧,是不是监听器,还有一个on,什么是按踏方法呀?嗯,接着消费什么意思?就是处理请事件的方法,返回处就代表消费事件,那事件一旦消费了,那个事件的生命周期就什么呀,是不是生命就结束了呀?啊,事件就结束了。
10:00
关于事件,我们暂时就学了分发处理和消费,后面我们会再学到什么拦截反拦截,这后面的知识先你暂时不用管,你就管到我们的分发处理和消费就行。那其实后面所有的API都是关于。事件啊,操作操作事件这三个方面。嗯。好,那你和如何来理解他呢?他你怎么想啊?它什么时候一个方法,它是一个都是一些回调方法吧,你就要想的回调方法是什么意思,你一定要知道它什么时候掉。用来做什么的?就两个概念,什么时候发生?调用这个方法,它调用它起什么作用,首先得说什么时候调用这个dispatch他呀。嗯。世界里面。是不是事件一产生,我们最终系统就会调到activity这个分发的方法呀,那事件一产,也就是我一旦操作视图。
11:10
Activity就会调用这个方法。没了吧,这一个是调什么时候调用,再一个做什么。也就是说在这个方法里面。他做了些什么事情呢?啊,我们叫它分发事件是吧,那分发事件是分发给谁去啊。播放给谁?我们的activity将事件分发给谁啊?这布局啊,那那就简单了嘛,就分发给布局去嘛,对不对。那现在啊,记住了,回调方法大家一定要知道两个概念,一个是它调用的时机,什么时候调用,再一个调用它,一般我们用它来做什么。或者系统用它来做什么,你看我们一般去重写这个dispatch英文的话吗。
12:00
不不重写吧,我们一般不用重写,因为他的那个那个分发事情,他是不是已经早已做好了呀,我们要重写的是他。我们前面说过,这是一个处理情,处理事件的,对不对,我们说过他叫什么来着。是备胎呀啊,大家一定要你应该能理解,不是一定要理解,应该能理解备胎的概念,如果你不能理解,这个事情就有点怪了啊。你说我从来没做过备胎,所以无法理解是吧?啊,如果你不能理解,你即将会理解啊,好啦。有时候备胎也是种幸福,你你你在追求别人的时候,越是不同意,你越有越有劲,是不是你要是突然一上去一一请求就同意了,那个事情就可能你就觉得太轻松了是吧,可能就不太珍惜啊。
13:05
好。这是这一个,还有一些其他的,我们来看一下下面关于view和view group的,其实它这里面所有的都是一些事件相关的一些方法,我把它呢复制下来。而且前面有几个呢,是我们学过的,什么点击啊,什么长按呐啊,什么产生菜单呐啊等等,嗯。这几个大家下啊,我们需要去关注的还是这几个关于touch事件处理的,包括他,嗯,现在我们来看一下,这个里面有一个分发事件的方法是吧?啊v group里面也有一个,那说明是不是有一个重写的一个。过程呢?你看我要是他要没有功夫,要没有重写,我就肯定不会把它列出来,诶为什么要无功要重写这一个。
14:05
斑马了。也就是说我们的这一个方法用来干嘛分发事件,那到底是怎么分发的呀?是分发给孩子吗?是吗?是不是风法孩子,是啊,那他哪来的孩子呢,对吧?嗯,大家看到他根本就没有孩子,所以说他是不?诶这个地方来打开一个啊。给大家看一下,大家就明白了,这里面应该有一个方法,CTRL加O。干嘛去了?来叫迪斯派。其实就是在干这个事。大家看了啊,先呢,它去判断监听器有没有啊,如果监听器有,它会去调用监听器的什么,是不是on touch方法呀,如果你看监听,而且它掉以后是不是有一个结果呀,如果它返回的是to,那就什么呀。
15:18
是不是那啊啊就结束了。那如果说他为force了。是不是他会去调用onto英文的方法呀,这个这个写这个代码的哥们是蒙圈的吧,直接返回不就得了吗?本来是一条语句,它变成三条语句了,是三行了,本来你就返回它不就得了吗?啊哦,对啊,我蒙圈了啊,确实是这个地方,它下面还有我没仔细看啊。也就是说它反而force的时候,它是不是下面还有一些事情要做呀,对吧,OK,好,这个地方啊,大家看到,也就是说在那个view里面,它的分发其实是在。
16:06
一是去调用什么监听器。和什么毁掉方法吧,但是不一定这个东西啊,如果监听器消费了。那回调方法就不会处理了吧?因为我们说过了,世界一旦消费事件就是什么。是不是结束了,前面说了一个列啊,来看的。事件一旦被消费,事件的生命周期整个就结束了啊好,这是说的是他view里面是去找处理的监听或者方法,那view group呢,我们来看一下啊,看看它会跟前面一样吗?找找啊,Group它里面应该有一个方法,也是叫dispach。
17:01
Disch啊,Touch even的方法。是吧?OK,他干嘛去了?大家看着往下看。啊,找什么去。是,大家说他找什么去,是不是去找孩子去分班呀?但他一定能找到孩子吗?大家说比如说这是一个,这是我的activity,这是我的线性布局,这是我的image view。你说我如果一个事件发生了,他一定能找到对应的孩子吗?不一定,K说,我点到这里。是吧?那他找能,他确实能看到孩子对不对。你说刚。他为什么不会调用孩子的那个代价?他会根据坐标来去看我的事件到底发生在哪个孩子身上吗?
18:02
能理解吗?嗯,这个地方得确保一下,他会编辑他所有的孩子,接着去找。我这个事件的坐标在哪个孩子的坐标范围之内?对吧,那如果没有。如没有,怎么回事?那谁就是优先级最高的呀,是不是就是我自己线性布局啊,OK,那如果我发生在这个身上。那优先最高的就是是不是这个email意外孩子啊,嗯,就这样的一个事。啊。他会去找自己的孩子,最终呢,去让孩子去分发啊。好,这是这样一个是,所以说他们的逻辑呢,是完全不一样的吧。这个地方后面呢,我跟大家说啊,拦截事件相关的一些知识啊,因为这个东西呢,刚说没什么,就大家可能很难懂,但是有了一个需求以后,我们要做一个功能。
19:06
那。再说就要好一点啊好,这是关于它相关的一些API的。嗯,下面我们来看事件的分发和处理,首先呢,大家要知道这里面有几句话在说啊。我把它copy一下吧。这是文字的一个表达,其实还有一个,大家这个图也可以好好的看一下。这个图也就是说分发处理和什么消费,就刚才说了几个概念啊,分发这不是在分发嘛,对吧,分发到最里面的那个视图。
20:00
啊,最里面的视图一定一定是一般的V吗。你说我在分发的过程中,一定是分发给了一个一般的什么image view啊,什么什么text view吗?不一定对吧,可能我这个事件就仅仅是发生在线性布局相对布局身上了,对不对,这是有可能的吧,嗯,反正要分发到事件发生的最里面的那个视图。啊,分发以后接着做什么。这是第一个分发,第二个是不是处理啊,啊,刚才说了一遍,我们反复强调这个事啊,处理什么叫处理啊。什么叫处理?是不是调用unto even的方法或者unto方法呀,那就叫处理事件。好,下面一个解决概念叫消费。对吧,消费了就是看处理的那个方法,返回的结果是错还是什么force。
21:04
那如果是处,就代表消费了,那消费了,这个世界的生命周期就什么结束了。那就不会再传递了,对不对?好,那如果说他没有消费,也就是反馈的是force。这个时候啊,返回boss就看啊,这个时候如果这它其实描述的是当事件。我们前面通过测试能知道如果是当事件,它会返回给谁。是返回给上一个视图副视图吧,啊,让负视图去掉。也就说副布局吧。他去处理啊,记住了是交给它处理,也就是说调用他的方法呗。好,它呢也会返回一个结果是false还是true。如果是true,就代表消费了,那也结束了。那如果是force呢,是不是再去交给外层的四度或者叫布局啊,嗯,一直往上交啊,最终如果还是force。
22:09
交给谁了?这个地方实际上是不是交给activity了?嗯,再说了,当事件。啊,大事件用来是确定消费者。对吧,消费者,那消费者有个什么样的优势呢。就是事件会优先交给他什么,是不是他处理啊,事件会优先交给他处理,只是。啊,后面是不是就当事界和up事件呢。啊,假设是木事阿尔法事件啊,木的时候大家想啊,假设是我消费的。那木世界交给我,那我一定消费吗?一定吗?不一定,对不对,那不一定,如果我没有消费,交给谁呀?交个activity。
23:01
对吧,嗯,那这个时候就存在一个很大的问题,知道吧,你这个地方,那现在就有矛盾,你是那个木世间阿布时间跳过我的这一个。复试图和顶级复视图啊,后来我在想,他为什么不这么做,为什么不像当那么做对不对?就是一层一层往上冒冒啊,对不对啊,就是什么意思啊,跟大人一样,你不行教他,他不行再教他。对吧。首先得说啊,我后来我仔细的想了想,我觉得还是他这种做法有一定的道理,道理在哪呢?木事件发生的次数是不是特别特别多啊,特别频繁对不对?那特别频繁有个什么问题,大家看啊。有个这样的问题,我如果一直都按照当的做法那么做。那个效率特别低。大家不觉得吗?我不行啊,又找他,他不行又找他,我是会执行更多的代码呀。
24:01
能理解吧,啊,我会执行更多更多的代码。啊,因为木事件它特别平繁,也就说当事件为什么要这么做,因为当事它只有一次啊,对吧,麻烦一点没关系,因为我必须至少要有一次特别麻烦的事情,因为我要确定。这一个过程对吧,因为大事件,我要确定消费者到底是谁呀,你不能说我孩子不行了,直接叫activity啊好,那这个时候就有一个问题了,你说我的父亲要想去。处理那个木事件该怎么处理呢?首先当事件被他消费了是吧,被孩子消费了。关键后面呢,我这个父亲吧,我又想去消费那个木偶世界。有这种可能性,大家可能现在没有这种感觉,后面是可能很有可能有的,嗯。就尤其以谁为明显的list view。
25:02
List view最明显了,你看我们list view是不是有一个有一个很多个item呀。我item是不是点击接听啊?你说当时间是交给谁的,是交给list view还是交给我的item呢?当时间交不起了,是不是肯定交给我的了,对不对,必然的。因为如果说当时间要交给他的话,那以后再也进不去了。对吧,好了,当事件是交给了我的孩子,看到你是不的孩子,你想想看,最终我是不是可以把你是不是有进行滚动啊,那后来那也就是说后面的木事件交给谁了。是不是你啊。哎,这里面就是。一个问题啊,你想啊,现在就没办法达到啊,大事件是孩子处理的,那木事件即使孩子不处理。他也直接交给了activity,根本就不考虑你啊,对不对。
26:02
那他怎么做到了这个就是在分发的过程中去做。也是它分发,还是一层一层分发吧。我在分发的过程中有一个概念。拦截。对吧,好,我我这个list view,也就是我的复试图,我要拦截的是个什么效果。还往下分发吗?诶不分发了对不对,好看。就是这样的一个,你说这个list什么时候拦截啊。一就拦截吗?也就是说你想想看,你你那个你点击那个item一定没有移动吗。可能会有一定的移动吧,对不对。就是有一个小大范围的移动,而且是垂直方向的移动。对不对,如果你是个水平方向移动,你你可以试一下,你你你可以拿个显示个list view,你水平方向移动啊按下去水平方向移动再起来,你看会不会触发点击。
27:05
他会。这明显嘛,你又不是垂直移动。对不对,你是水平移动啊,那如果你是一个垂直移动,移动到一定的距离,譬如说五个像素十个像素。是吧,总要有个临界点吧。这个临界点是为了干嘛呢?为了能够防止手指抖动,其实你手吧,是不能完全说没有木的。啊。这样的一个是大家需要去知道啊,这后面呢,我们会跟大家去讲拦截的。怎么做?其实拦截非常简单啊。好,这是这样一个事情。来,我把这个呢给他。整下来啊。
28:05
这里这个图大家也需要去重点的关注一下,其实这里面啊,有涉及到拦截的图看看。这就是大家可以下去以后看一下这个拦截图,其实一看你就能明白是不是分发过程中去拦截呀。能看到吗?Unin intercept,它一问题。嗯,它有一个返回值to,或者是什么boss。你说这个拦截的方法在里面有有。啊,有没有啊,为什么没有啊,因为他没有孩子,他他拦截有他定义这个方法有什么意义呢。对吧,我的拦截是不是为了去防止那个事件交给谁呀,是不是交给下一层的孩子呀,我肯定是个V才有这样的一个方法,对不对啊。
29:02
它也有一个返回值是true还是false,如果for,如果true呢,代表拦截啊,如果force呢,代表不拦截,那默认是还是false啊,不拦截。叫on。默认是不是force呀,对吧?好,我们前面不是说过list view啊list view好了,我们找一下list view啊,List view呢,它本身没有,我给大家看一下啊,看一下就明白。好,他好像没有重写,我们找一下他的父亲找一下啊,看他有没有。嗯,叫on intercept。有没有,是不是有啊啊,它会根据你的一些,呃,是那个。试图的一些移动来去做判断啊,大家看在这里面。
30:04
有木木的时候,最终是不是有可能返回什么?是返回处啊,这不是木事件吗?大家看呢,对吧,木事件的时候有可能返回处,最终呢,有一个返回啊,如果它返回处就代表拦截了,拦截了这里面图应该能看懂啊。就这个图。嗯,记住了,拦截是在什么时候发生的。对分发的时候发生的,对吧,我把这个呢也给它留着啊。好,那。触控事件呢,我们就说到这里,下一个我们说一下K事件,这个就比较简单了,这个快点说一下啊来有两个类型,一个是大,一个是啊啊,这个是它的一个相关的API。
31:12
啊,来在这,嗯。好把它呢,我把它解一下。就两个。那一个叫K,一个是叫activity。我们主要做的是谁呢?跟大家说一下,其实我们重点做的时候,只去会去做这一个,做的最多RKR。对吧。好,这是它后面呢,我们做了一些练习,那第一个第一个练习是那个叫什么呢。叫拖动那个拖动一张图片对吧,拖动图片啊,第二个练习呢是什么。两秒内啊,也就是说平常可以他可能不会说两秒内,这不一定是两秒对吧,是不是连续点击back才什么退出。
32:16
引用是这功能吧,好用它我们来想一下,它这个时候我们要拖动它,一个是大家看的啊相关的知识点,一个是事件处理。也就是说,最终事件由谁来消费处理啊?事件处理由谁来消费处理?是不是image啊?对吧,啊好啦,那除了它还有一个非常重要的就是动态给试图嗯,进行重新布局。定位。
33:02
对吧,而这个地方对它去做了,就涉及到我们要去取那个视图的坐标。啊,得到视图对象的坐标。啊。坐标,这个坐标是指什么呀?哪个坐标啊?是图的什么坐标啊,左上角和什么呀?是不是右下角啊,啊右下角的坐标,那实际上就对于我们平常用的什么left,什么top,还有呢?呃,什么right,还有什么bottom对吧。那我给你一个数字对象,怎么样得到life的呀?Get like呗,是吧,啊,非常简单的一个事啊,那我们进行重新定位是用什么呢?
34:02
是点layout的方法吧,对吧,里面是不是去传几个值啊,什么top什么right什么。嗯,这样一个是大家需要去知道啊。还有连续点击两次半小键,我们主要用到了两个技术,肯定是一个K1的处理,对吧?好,还有什么,是不是handler去发送延迟消息啊,Handler处理延迟的工作。嗯,好,就是说的是他啊。我们先把这个给他停起来。
我来说两句