00:01
好了,说一下它相关的一些API。首先啊,有一个这样类叫某一文场。打开一下。这里面呢,有一个事件的类型,有三种类型的常量值,它用的是一个int值来标识的。0211个代表弹幕和什么二。嗯。好,零是down啊,一是up,中间呢啊是木。好,下面有一个。叫坐标。这两个都是去得X轴的坐标。能看懂吗?那它们的区别在哪呢?区别就在于原点在哪里。很简单,这是我的屏幕,手机的屏幕,这是我的那个视图,我的操作呢在这里。可以理解吧,嗯,我的操作在这里好了。那现在呢,就有可能有两个原点。
01:03
一个是这里,这是原点,如果它是原点,是不是能得到一个,得到一个坐标啊,啊得到一个坐标,那它的坐标呢,是这样子的。对吧,这样的坐标。那它就对应什么呢?对应这一个get ox,它是相对于屏幕的左顶点了。这个没问题吧,好了,那还有一种情况就是相对于发生事件的那个视图的着顶点。就是它把这一个看成着顶点,看成原点。对吧,如果它是原来的话,那个值是不是就有变化呀。这很有可能有变化。那现在我们的X轴坐标和Y轴坐标是不是就变了呀。看得懂吧,这个也很直观啊。如果你是相对于发生事件的那个视图。那就是。
02:01
Get X。啊,这个点有时候最麻烦的事就是,因为他们就两种情况,记不住知道吗?到底是跟X是相对于屏幕着力点呢,还是相对于是图。没关系啊,你记不记住没关系,这个东西你记不住你就看一下对吧,你只要知道区别是关键。至于你记取能不能记住他们的这个,到底这个方法对应哪一个啊你。你们说这么简单,不就两个方法吗?有的时候越简单你越好记,它就两种选择,你搞不好就记混了。好,下面一个这个就是Y轴的坐标了吧,啊,没什么太大说的了。好,下面一个呢是activity。Activity呢,它有一个方法。叫分发事件,这是也是一个回调方法,我们不会去调用的。一个什么意思呢?大家在想,这是我们的手机屏幕,这是我们的某一个视图啊,我操作它,谁最先接收到我这个操作来说,对于整个手机来说,你说谁谁最先感应到我的这个操作啊。
03:15
谁谁最先感应到我的时候,就对于整个手机来说。啊,屏幕屏幕对吧,我我反复强调对于手机来说,我没有说对于activity来说对吧。手机来说,最先感应到的是屏幕啊,大家知道屏幕有两种类型,一种叫电容屏。啊,一个叫电阻屏,以前呢,都用的是电阻屏,因为电阻屏便宜,知道吧,好那个以前呢,那个屏,那个电阻屏它需要有个什么。是不是有一个有一个笔呀,那个笔是不是头上还比较尖,对不对,好了,那。那个那个笔,那个电阻屏,它是靠什么感应到你操作屏幕的某一个区域,某一个位置的呢?
04:06
是压力是吧,啊,你按下去才行,你你可其实你也可以用指甲对不对啊,你皮肤有点皮肤也可以,皮肤可不以可以,就是你要拼命来对吧。有时候还按的不准确对不对,因为你不是你的皮肤,就这么你拼命的按下去,可能你本来是按左边的,你把你没法准放到右边去了是吧,好。电容屏它是靠什么来去感应的呀?啊,通电电流啊,非常低的电流来去感应的,好,我跟大家说说,还有一个概念啊,关于嗯,屏幕呢,它有个这样的一个东西。一个叫硬屏,一个叫软屏。有软硬之分,好,那我问大家,你说谁是硬平?
05:00
啊,就是你们现在用的是软片用的一瓶。啊,你搞不清楚了是吧,那也就是说你用你为什么说电阻屏是软屏呢。对呀,就对了,这就对的,这就是因为那个建筑屏他不开,刚开始我还故意的跟他说了那个那个头是比较尖的。对吧,你要拼命的往下按它,拼命按下它是不是有一个嗯就凹下去了,还是软的嘛,就局部区域那个很小的那边区域,不就把它压下去了嘛,一旦压下去了,它是不是就感应到了呀,但硬频你是压不下去的,对吧,也就是我们平常说的电容屏,它是靠你的皮肤跟它通电来产生的,对吧,就低电压啊,低电流来去产生的。一个通电的效果以后呢,它来感应到你到底操作的是屏幕的哪一个区域。的一个坐标啊。
06:00
这个能理解吧。嗯。但电容屏稍微要啊,肯定要贵一些,对吧,尤其是好的电容屏特别特别贵啊。电容屏有一个不好的地方就是容易,干嘛容易,就是感觉特别脏。对吧,就你的皮肤操作以后是不是很那里面很油腻啊,你的表面各种就不知道什么叫油腻吗?这一这一听就是那那个不爱惜的人就瞎整的人是吧,我我就感觉我好像不是特别爱惜手机,我基本上一年一个手机。所以说我一般都不买好手机好啦,这是这一个啊,大家先要去有一个基本的了解啊。那好了,来我们继续来说啊,来说这个事先呢,我去操作屏幕的某一个视图的时候,其实最先感应到的是我的屏幕。
07:01
屏幕就是我的硬件感应到了对吧,我我们前面说过那个安卓系统是不是一个分层的结构啊,啊底层是一些什么呀。驱动吧,Linux内核对吧,直接驱动啊,一旦我们操作了,屏幕就会驱动了,就会收集到一些信,得到一些信息。啊,得到信息他就一直着在往什么。是不是再往上传呢,传传你说最终会传到哪来呀,是传到我的某一个应用里面来吧,操作的是某一个肯定操作某一个应用的某一个界面嘛。对不对,我启动了很多应用,但是只有某一个应用是的界面是可以操作的吧。嗯,好,当前呢,就会发到某一个应用上面,记得应用再交给谁去了。是不是要交给我的activity啊?对不对,因为我们的activity是整个界面的一个管理者。这个能理解吧,就activity是整个界面的一个管理者啊,最先是由他来接收啊,那他接收到以后干嘛呢。
08:08
叫分发事件。好,这样一个分发事件,最终大家知道响应事件的是谁啊,譬如说我抄的,抄的这个button。真正响应世界的,是不是这个疤痕呢?是吧,是视图本身吧,这个大家知道,因为我们那个监听器是加在那个activity身上呢,还是加在视图身上的,是不是视图啊。只是说我们去加的这个动作是谁做的?我添加设置监听的动作是谁最多activity,但是是那个监听器加在谁身上呢?是不是视图啊,所以说真正去响应事件的,去处理事件的是谁啊。是不是土啊?对不对啊,就这样的一个事,而我们activity它相当于是整个界面的一个管理者啊,这个大家要知道,好来下面呢,就会去继续往下啊,其实activity它也可以处理。
09:11
啊,他也处理的方法,但是他的优先级是最低的。我以前跟他同学说一个概念,有个概念叫备胎。啊,这是什么意思呢?就是优先级比较高的,肯定视图对吧,我优先去叫分发,他这个分发就是叫视图去处理。但如果试图他不处理呢?那没办法了,最终他这个备胎是必须用的,也就是说没没人没人那个来处理这个事件,那就交给什么。Activity。嗯,这就所说的备胎啊。好,后面呢,还有关于我们视图里面的也有很多啊,View group里面也有一些,看着视图它也有什么。分发了什么什么个意思,大家想啊,我们的整个界面假设这是外面那个布局,里面是不是又有可能布局啊,这里面要有两个石头,假设我操作它这外围我们我们假设啊这样。
10:15
啊诶诶的那个好吧,这个我假设代表是activity啊,他是activity,我们最先是不是activity接受的事件来分发呀。他分发,他他能一下子分发到这个八点上吗?来哎,你你为什么说不能呢。这个地方我们看一下这个视图的结构,那个视图结构是外面是不是有一个视图里面有孩子呀,也就是说我的腹啊,有关的这个东西好不容易搞过来。我们的那个里面大家看看啊,这样吧,嗯,这样这个呢是一个假设,是一个线性布局,这是我的activity,这是我两个button啊。
11:01
我的TP能直接看到八吗?不能对吧,OK,或者说我这里面再来再来一个啊,这也是个L。你说我的桌外围这L能看到这个能直接看到八了吗?也不来。他是整个设计的,Android是这么设计的,他是父亲管孩子,孩子管什么孙子。对不对,就是你只能管你自己直接的孩子,你是不能跨级去管人的。如果你这样能跨级的话,这个设计就不好,不太好设计了。你说跨级整就从头从外省到里呗,那到底多少层,这个是。不确定的吧。那你要写的时候,你说你的代码怎么定义,就不好定义了。对吧,但是我说我只管一层。只管我的直接孩子,这个时候就好听了,对不对,那我的孩子如果他是一个group,他是不是又去管他的孩子啊,那得了那就可以了,对吧?嗯,那分发的时候也是一样的,我activity先去分发,它先找的是它的根部局。
12:08
根不语了再去。由他来去分发,懂意思吧,我的在activity只负责把事件是不是交给这个根布局啊。而下面一是往下传,是不是他们自己的功能啊,不是五就不是X的功能啊,再往下走。这个能听懂吧,好,这是一层一层分发的。下面看到view呢,它有一个处理事件的方法,叫onto event。只要这个方法一调用,就叫处理事件。好了,这个时候它有一个返回值。类型返回值是什么意思呢?后面我们要,其实前面我们说的话呢,都有点小问题啊,因为没有说一个概念。呃,叫消费。
13:02
啊,有处理和消费的概念啊,处理呢,只要调用的方法就叫处理了。但是并不代表消费啦。什么时候代表消费了呢?只有你返回处才代表消费了。能理解吧,能理解好了。那说到这个事呢,其实前面我们有一个东西就说的有问题,我们前面是不是说它的时候,我们说activity是个备胎,对吧,什么时候才调用它呀。没有试图,我们前面是不是说没有试图处理就带上他呀,那个其实是不对的。对吧,它处理了并不代表会掉鱼。你就消费了,一定是什么呢?没有人消费。啊,没有一个人消费才会去调用我的处理,一旦activity处理,那谁是消费者呀?Activity消费者,嗯,这个大家得知道啊。啊。
14:01
后面再跟大家详细的去说,大家就能明白了啊,下面除了回调方法,大家看我们前面说回调方法是不是用来重写的呀,哎,这一个。是设置什么设置监听都是用来处理事件的。那后面我会跟大家说,为什么会存在两种方式是吧?都用来处理事件,怎么还搞两种方式呢?一个设置监听的方式,一个是回调方法的方式。啊,后面再跟大家说啊,不急好。这是点击监听,长按监听,怎么用来创建菜单的监听,这三个呢?都比较简单,我们前面也搞过了是吧?啊小case,好,我的view group这个地方我之所以写是因为我的view group重写了这个方法。你说视图里面是不是有这样一个方法吧,我的子类v group重写的这个为什么要重写了?因为他们俩的行为是不太一样的。
15:01
如果我是一个group,你说我怎么分呢?我的分发是做什么?是不是找孩子?是吧,就找子去处理,那你说我的这个分发还需要找子吗?还需要吗?不需要了,我没有孩子了,对不对?是这意思吧,我这个分发就是确定到底是调用监听器的回调方法呢,还是调用我自身的回调方法。我不有监听器,有两种处理方式吗?我到底用哪一种呢?由它来去控制。能理解吧,嗯,好。下面啊,后面这个东西我们要后面再说。事件的拦截intercept拦截事件啊。好,这是这一个啊。那先把我们这里面的API呢,先有一个基本的理解。
我来说两句