00:00
啊,我呢也来说一下这个时践机制的这个情况,时间机制的话呢,我们首先呢可以看一下,诶,我们之前分享这个view和view的生命周期的时候,当时我们用到了这样的一个思维导图,哎,在自定义控件里边,哎,我们先来看一下这个慢的。哎,因为自定义控件这块的话呢,我们就会去重写,那它的相应的一些方法,就刚才提到的像dispatch touch event和untouch event这样的方法,那如果我们使用的是系统提供现成的一些控件,比如像test view image view,那你是不会再去重写它的这个方法了,因为你重写呢,意味着你一定是子类了哈,自定义的了,那那如果我们使用系统默认的这些控件,那我们顶多呢,就设置它的一些相应的监听器就可以了,点击事件还是长按事件,还是ontouch listen的事件。啊,所以呢,就是我们用系统控件的话呢,就是直接叫监听器啊,那如果说涉及到这个事件的这个机制,那具体的涉及到有分发啊,有处理,有消费拦截,反拦截,那这里边呢,就涉及到相应的一些方法的调用和重启,那只要涉及到重启,那一定意味着这个控件呢,是你自己提供的,所以呢,我们在讲自定义控件的时候呢,呃,提到了他这样的事件的就这些方法的一个调用啊,在这个view有生命周期里边,专门有一个过程,就是事件的处理,哎,就提到了这样的一些方法。
01:29
啊,首先呢,我们从这个方法层面呢,去理解一下,哎,流程方法这里边儿提到了这样一些,当然我这个层次划分的话呢,呃,不是特别的清晰啊,比较清晰的就是我们刚才这个PPT里边这用到的这个图。哎,这个图非常的清楚,就是activity里边有两个方法可以分发,哎,可以考虑它的一个处理啊,然后view group呢里边呢,呃,首先这样说吧,View啊里边呢,有两个,一个叫分发,一个要处理,跟我们activity t里边是一样的,然后view呢,作为view的子类啊,它自然而然的也会有这两个方法,那么view group还有一个特别之处,它是可以包含子势图的,所以呢,它多了一个方法,就是可以考虑呢,拦截啊,这是有个拦截的方法,那进而的话呢,我们具体的一个view里边,它其实还可以去,呃,有一个叫反拦截的操作,但是这个操作的话呢,它不是说要你重写一个方法了,而是呢,直接调一个方法。
02:28
啊,所以这里边法兰截呢,不是说让你重写,而是呢这个结构啊,通过我们这个view呢,调它的这个view group啊让这个view group呢,所谓的啊,这个复试图去requestlo返回处的话呢,表示反拦截成功啊这个操作上有反拦截,但是它不是一个需要重写的方法,所以方法层面看到的话呢,就是这样的三波。啊,这是方法层面,然后具体呢,关于这个事件机制这块的话呢,诶,我们可以先简单点说,那就涉及到分发处理消费,这算是呃一个层面的,还没有涉及到拦截反拦截的事儿。
03:07
啊,然后再难一点呢,就可以掺杂到,呃,掺杂进来这个事件的一个冲突啊,就是我们当时讲了一个,不管是整个呃这呢是一个呃这种呢,我们说叫一个策划了哈,是整个拿这个布局策划,还是说我们这是一个Li view Li view里边呢,有一些具体的item,每一项,每一项呢,就我们昨天也说过了啊,哎,往这边滑动的时候出来,这呢是一个比较典型的事件冲突的例子啊,这个自定义控件我们讲的时候呢,里边就出现了拦截操作,也有反拦截操作。啊,那这个呢,你可以看成是这个基础之上啊,就多了一些处理事件冲突的涉及到拦截和反拦截,那如果仅仅说分发啊,处理消费这个层面的话呢,我们就只涉及到两个方法啊,我就先说有两个方法啊,一个呢就是说的这个分发。嗯,在上边呢啊,哎,分发处理消费,哎,这这一块的话,只涉及到一个分发和这个具体的呃,消费啊,Ontouch event,哎,我们先暂时的就是考虑这两个事情啊,那如果涉及到拦截反拦截呢,那就再加上这个方法和这个方法,这算是这两个层面,如果说再多一个层面的话呢,那就是我们具体的这些控件呢,还可以再去设置监听啊,就像这里边提到了,还可以给具体的一个view设置onto listener。
04:29
啊,而且这个的优先级是不是最高的呀,哎,就是我们在给一个具体的view来设置一个ontouch listener的时候,需要重写它这个方法,嗯,那这个方法呢,我们发现只要你把这个事件啊,就是你最外层的activity,然后这个view group,具体这是一个view,这个view呢,我们设置了一个这样的一个监听,只要你这个事件分发到我这了,那么这个考虑消费的话呢,它ontouch就是这个监听器的回调,他是最先考虑的。
05:00
所以从优先级上来讲,关于处理消费这一块,它是最优先的啊,只要这个方法返回是处啊,那这个事件呢,表示就由这个啊,To listener来来消费了,当然了,你要是false,那就继续的考虑你这个view啊,乃至于再往外他们的一些onto even的这个方法,看到那是出了,就是由来费的。啊,所以它的优先级呢,是最高的啊,这个先明确一下啊,那么真正开发中用的话呢,诶,我们通常情况下,比如说这是一个activity,这是一个view group,这是一个具体的view。啊,一般情况下我们都不会去重写这三个结构的分发的方法的。啊,一般都不会重写这个分发的方法啊,就是分发呢,就是或者这样来说吧,因为我们具体真的是这是一个view了,我们通常情况下都是让这个view去来考虑消费这个时间。啊,那如果你重写了这些啊,它的外层或者是activity的分发啊,因为分发里面。
06:07
啊说一下,因为分发里面它掉了这个拦截,以及呢,掉了这个onto event啊,就是默认的这个分发里边那个修贺点啊paage event啊,他就要调用你这里边这个这个拦截和这个unpa event啊,所以呢,他才可以往里边一层一层的去往里边去传。啊,那如果说你这块despitech touch event,你直接给他return to那个false,它都会导致这个不会再往里边去传递了,所以呢,我们这个如果你在外层view group和activity里边写了分发的这个重写方法,而且改成return true和false了,就会导致这个事件不会再往里边发,不往里边发,你里边这个就不会去处理事件。这是我们一般很少见到的,所以通常情况下,我们这个view呢,都让他去消费这个事件,或者是它上面的一个哎监听去消费。所以意味着呢,就是这些刚才提到的ftd跟view group,呃,我包括这个view本身哈,一般我们都不会去写它的这个分发的方法的,就是让它默认的执行,默认就往里发啊,那处理级别上的话呢,我们说就是从里向外了,哎,所以优先考虑这个view本身上的是不是有ontouch listen,如果有他先处理return出了,那就不再往外分,哎,这个考虑消费了,就到此为止。
07:26
啊,如果说你没有处理,那再考虑我这个view,那通常情况下这个view呢,它就自己ontouch event给他return出了,所以这个呢,就接着不再往外发了,这是我们见到的最多的情况啊,那顶多呢,就是这个方法没有接听没有设置过,那就直接考虑ontouch就可以了。啊,那这个untouch里边回头我们还可以去自定义是不是监听器啊。对吧,咱们讲自定控件不是也应该定义过自定义监听器啊,哎,自定义监听器说白了就是你定义个监听器,在这个ontouch event里边,你是down啊还是木的时候,是不是你调一下那个方法呀,哎,所以呢,你一运行啊,就体现为啊,你那个监听器就起作用了,就比如说我们的点击事件啊,点击事件是你,呃,你按下去是在你up的时候呢触发的,那就相当于在这个里边呢,我们在up的时候呢,让它调用了你那个点击事件那个监听器的那个呼调呼调方法了。
08:24
啊,点击实践呢,其实它不是像它是这样的一个就不能再细分的一个实践了哈,这个点击实践实际上是你看成是一个在我们这个unto event里边调用啊,然后给它封装出来啊,就一个现成的一个呃监听器啊,叫点击的一个事件的监听器了哈,那那回头我们也可以就像点击事件一样去定义,那它就是在你这里边调,那在这里边调,那很显然在这里边调,你的这个优先级呢,应该比我这个untouch listener监听器的优先级要低一些。啊,这是说的第一个层面啊,然后第二层面的话呢,再要说,那就涉及到这个叫拦截和反拦截啊,拦截和反拦截啊,这块一加起来,先说这个拦截哈,啊一说这块的话呢,那就在这个基础上就更复杂一些了。
09:10
啊,这一说有可能有些同学同学呢,可能就会有点这个乱啊,那如果乱的话呢,那我们这呢,就不再按照他来说。哎,我就不看他了啊,哎,看谁呢?哎之前呢,把这个印象笔记这不是都给大家打包发了一下嘛。如果你解压出来,你能看一下的话呢,实际上我在这里边呢,有两个帖子哈,呃,这个事件机制。哎,这里边儿我有个帖子。诶,这个帖子的话呢,建议大家下来的时候呢,一定要看一看,那这个事件机制本身的话呢,是不是特别好描述啊,就是哎很容易说着说着就说乱套了啊啊这里边这个帖子呢,写的还是比较好的啊,我们稍微捋顺一下,实际上这个实践机制的话呢,拿这个例子来说是特别好理解这个情况啊,事件机制就是跟我们生活中的这个实际生活情况呢,是完全一样的啊,你看这里边举了一个例子啊,说这个公司公司的一个经理,经理呢啊,这这就是个经理啊,经理下边呢有组长,组长下边成员,成员下边就是习生啊,你把这个经理的话呢,你可以就把他看成是一个activity啊,那下边呢,就是一是它里边这个view group,这个view group里边呢,又有一个一啊,这是具体的里边一个view,所以呢,你如果看一个图就像是这样样。
10:31
哎,首先这个结构呢,先清楚啊,就是又往里边呢,它就是内部的一些组件了,好,那现在呢,有一些什么情况呢,就公司呢来了一个任务,就相当于现在有一个档幕或up的一个事件啊,这个事件的话呢,呃,就开始经理拿到以后,经理就开始往里发了,啊说这个感觉有点简单,就往里发吧,啊一顿往里发,那就相当于他们现在都在分发,而且谁都没有改变这个分发的形式,也就是说这个分发pach全是掉到super的。啊,没有试图return true或false啊,那最终发呢,一定会发到实习生,就是最里边的这个view这。
11:06
好,那这个实习生的话呢,他能干,那就表示他自己来消费啊,所以这个事儿呢,他就给搞定了。啊,这里边这是第一种情况啊,给搞定了,那搞定以后的话呢,如果后边又有类似人就是你,比如说你这是个当事件哈,有我们这个实习生呢,哎,在他的on,他是event里边,我给return出了,那么后续的这些move和up,哎。你没有特殊情况,如果你前面没有在比如这个木的时候拦过哈,那那后续的这个全都这样放。就是还都到实习生这儿。啊,这是这种情况,然后第二种情况呢,就是这个实习生呢,研究了一段时间,发现搞不定。搞不定的话呢,他就往上提交,就相当于是他return的false onto,哎他的上一层是成员,这个成员呢,他自己也没搞定,他也没搞定,就相当于他的ontouch event里边也是false,他就交给了再上一层,哎这个人呢,或者这个view group呢,哎,他自己呢搞定了。
12:06
搞定以后呢,他心里一想说,如果以如果以后还有类似的任务,我就自己整不给他们了啊,那就意味着这个事儿呢,现在呢,是我这个开发组长处理的,那以后再来这个相应的事件,你是木啊或者是up呀,这个我就不再往这个程序员和实习生这块去发了。啊,那接着过来,这不就是到他这儿,他就给搞定了,我自己弄。哎,所以这个事儿呢,是生活中我们说比较好理解这个事儿,那这个事儿如果理解了,那我们这个事件分发呢,其实跟他呢是一样的啊,是一样的啊,那下边这个例子,下边这例子的话,这个方法这块呢,就看这个就可以了啊,然后还回过来。嗯,下边呢,这是他的一个列举的一个例子啊,这也有两个图,哎,我通过这两个图呢,再来说一下啊,刚才刘琦这个图呢,也挺好的。好,这个呢是最常见的一个情况,嗯,先呢是这个activity activity的话呢,这个我们可以先看这个,你先看红线吧,红线呢是一个档啊呃,分发分发,然后呢,诶注意哈,这个拦截。
13:18
啊,拦截也好,反拦截也好,其实都是在这个分发这块呢考虑的,也就是这个拦截的方法实际上是要早于这个ontouch event的哈,就是你这些方法是是发到没没没地儿再发了,然后呢,回来的时候考虑掉的,还是有可能说从来不掉,因为你就在在里边已经消费掉了啊,他有可能都不掉了,嗯,这个方法是在它后边啊,它这个是要早于这个的,或者说你画一条线的话,应该是这从这画一条线这块呢,先这样走,这是往下的过程,然后这块呢是往上的过程。啊,是这样的啊。那首先呢,我来当分发,分发这个分发完以后呢,它就自动在这个分发这个方法里边调它自己的onin intercept了,如果你这一个它就不掉了啊,那我就调给自己这个拦截,意思就是说拦不拦,那我这说不拦啊,不拦的话呢,就接着往下走。
14:14
来,往下走,再问难不难啊,不懒不懒,再往下走。这就到这了,所以像这个方法一般我们都不写哈,一般你要写的话呢,我们在代码中是不是也顶多就是写这个方法呀,意思就是说,呃,你到这儿你拦不了这个现在可能时间有冲突了啊,你要不要让此事都去处理,你说我得拦一下,哎,那我就在这拦一下,我一拦他不就底价就处理处理不了了吗?或者我这个蓝的话呢,我们就像咱们写那个view一样,我是有条件的。就是你的垂直方向的距离,哎,大于水平方向的距离了啊,垂直呢,也大于一定值了,我才拦,那就意思呢,就是也是不是分成两种情况,一种情况就发下去,一种情况我就给拦住,拦住的话呢,那很自然的呢,是不是就有你自己去处理了,对吧?啊,你没拦的话呢,不是就发下去,他可能自己就了。
15:02
哎,所以呢,就是把这个事件冲突呢给它,哎区分了一下,就是通过这个方法来区分的啊啊那这里边红的往下走都没有蓝,都没有蓝呢,那就是调到你最里层那个view了,这个这块呢,哎,他就执行踏UCH1问啊执行他行,那那这呢是你一个当就像刚才说这个实习生呢,他自己能搞定,能搞定呢,下次呢该募了,那这个时候呢,就哎还按照原来这个套路这样去执行。啊,那另外一种比较常见的一个操作,就是这里边这个列举到的,哎先呢是一个当当呢,就是一顿往这里边发,谁都没有拦啊啊那就也到这了,到这以后呢,发现这个呢,它return的是一个false。那就是说他不去处理或者叫消费,那就再往上,那他就会执行,他呢也是force,那就给他。啊,那就这个呢,他给出了表示呢,我来消费。啊,那么这种情况呢,就直接导致下一次的时候呢,也就按照当前这种方式去处理了,我呢就不再往里发了,所以这个时候就直接走这个黄色的,但那个黄色的有个问题就是他就没有再去拦了哈。
16:13
你也用不着蓝了,他本身就不进去嘛,所以这个黄的呢,不应该这画这个箭头,而是呢,直接应该从这呢就直接画到这儿了。哎,就是在你分发完以后,诶,他直接呢,就自己来消费。啊是这样的,这个就不了啊,就不掉了啊,哎像包才包括包括刚才这个刘琦说到的,说最后这个图,哎他觉得有一个意义啊,其实这个意义呢,是有道理的,哎就是哎你这他这个是关于这个dispatch了啊return false呢,就相当于是交给他的这一层处理了,哎这个呢就不去调了,哎像这个呢,情况你发现它有问题了,你是不是完全可以自己验证一下。是吧,你就下来就自己造一个造一个程序,然后呢,你就按照他这个写成四层呗,然后你按照他这个逻辑,你就是填个,你看它掉不掉不就知道。
17:03
是吧,哎,所以这些呢,其实好多问题呢,诶可以自己能够去测试的哈,哎,你现在去理解发现理论上它应该是不对的。啊,其实它确实这是不应该掉了,就啊就没有了啊,那你真正你测试也发现,诶,确实是这样,这就可以了啊,要不你去在百度去查怎么的,你可能怎么查也找不到这个关于他这个描述啊,你测试那个是最准的。嗯,行,就刚才我说的这个呢,是我们这个开发当中最常见的两种情况。啊,最常见这两种情况啊,那这里边没有涉及到说这个叫反拦截对吧?嗯,这个反拦截的话呢,实际上是不是由我们具体的这个view来说的呀,就相当于是就像刚才这个问题,嗯,他是不是给拦住了,拦住了我是不是是不是得考虑一下,得反拦截一下呀。反拦截的话呢,就相当于是你你你这别懒了,然后我还要执行呢,是这意思吧,啊就这样的操作啊,那那这里边儿他呢,还就呃说的不明白了啊,他没有说这个反拦截的这个事啊,这还有一个这个呢,也没说也没说那怎么办,那我们就自己测一下。
18:20
呃,这块这个内容呢,确实是,呃,应该算是我们讲的些内容里边哈,它比这个消息机制呢,其实还要是哎,难理解一些哈,因为它这个实际情况啊,比较复杂。嗯,我这呢写了一个DEMO啊,关于这个事件的一个DEMO,这个DEMO里边呢,一个activity啊就这俩方法,哎,我们先默认的是都是super的,哎然后呢,有一个my view group,哎,继承于这一个线性的里边呢,有个分发,有一个呃,Ontouch,呃,还有一个呃这个拦截的,那拦截这块呢,我先把这个呢就先注释一下。
19:01
啊,这都是用的这个默认的啊默认的,然后在这里边呢,我放了一个view。啊,放了个view,嗯,这个view这块呢,我们这是一个分发untouch,它没有那个拦截的啊,这我写的都是super号啊,这个节我也先注释掉,嗯,然后呢,也先把这个打开。哎,先这样一下,哎,这都是默认的调的修克的啊,然后把这个程序呢跑一下。啊,这还有个button,这个也看一下这个button的话呢,呃,这有一个dispatch,有一个onto,我这都是也写的super,就跟我这个my view这里边是一样,都是super的。啊,为什么我要写个button呢,我们看一下这个super呢,他们是不是一样啊,好,把这个我们都清掉了,这是他进来看这。这就是我们这个map view,这button好,现在呢,我按一下。
20:00
哎,零是当时间移动。撒开,哎,这些方法哪些掉了,你应该可以自己写出来,这就说明你理解了,看一下。我都写的super,所以呢,是不是一顿就往里边发呀,发发,然后呢,这不是紧接着掉了一个中,呃拦截嘛,拦截完以后呢,My view啊,自己呢掉踏没有处理,再往外再往外好,最终的话呢,是不是这个事件我们说如果你们都不去处理,最后谁处理处理了,所以就都交给了,然后接下来好,既然我从外边往里面发,结果最后你们谁也谁也不干是吧,还是我自己干了,下次呢,干脆不发了。哎,就是你上一次是谁消费的,直接呢决定下一次呢,就直接交给他来处理了,所以就相当有个记忆功能啊,哎,那就接着导致呢,我们下边直接呢,就他自己发自己处理,这就是个重复过程,包括最后的up也是一样。
21:04
这个理解是吧,好,然后呢,我们看一下这个。Button。那这个button啊,Button的话呢,你看我这呢,就写了一个my button去继承于button的。好,我点击一下。然后呢,再滑一下。看一下。嗯的话呢,这块过程跟刚才这个嗯啊不一样了是吧,分发we发we intercept,然后呢,这个button分发啊,这个button on event没了。到此为止了,那这说明什么问题啊,是不是说这个呢就给处理掉了,哎,那也就是说呢,像我们系统呢,提供好的这些件,他呢,我们当时讲了一个VIVO时候,据说它有自己的事件处理的能力,或者叫这种机制,那那就说明他们呢,就是就是也就说系统这块提供这些呢,默认它就是处理的啊,所以我们这呢,写修复的时候呢,这里边返回的就是个处。
22:10
啊,它返回是触,那就直接决定了,我们后边再去这个目的时候。是不是就应该到这儿啊,到button这,那再接下来就还是你这样的一个button的一个重复调用,包括最后的up也是这样的一组。哎,这应该就能理解了,那么我们如果自己去定一个view。如果你还涉及到自己呢去处理,那么通常情况下你也会去模仿这个现成的这些空件来做啊,那就是一般情况下,如果我们自己去定了一个my view,那通常情况下你这个ontouch,你想想你是不是肯定不会去用这个吧,你想你用这个以后,你就第一次调一下,是不再去木的时候从来就不掉了。所以说呢,我们如果自己去定view,你也会去仿照着像这个button这样造好的这个空间一样,哎,所以我们也会呢,去考虑应该return true。
23:05
啊,我这一出的话呢,那我再一执行,其实就跟我们这个这个效果实际上是一样的了啊,就一样了啊行,这是这个,然后的话呢,我们比如说以这个它为例吧,啊my view group my view group呢是中间的这样的一个呃结构了啊,然后我们这呢,呃,在分发这块呢,我return一个处。哎,分发这块呢,Return true,嗯,这return true,然后行我就先这样跑一下啊。好,现在呢,你看我这样互动一下啊。在看一下,首先呢,是你这个这他的一分发,然后呢,是我们这个他的一个分发,分发呢就完事了。
24:04
哎,完事以后的话呢,你看他这个就相当于是就结束了是吧,就是我这呢,相当于是return这个输处啊,就相当于他呢,在这个方法里边,他会去调这个interceptft这样的一系列的操作,哎,Interceptft完了以后,再去调它的子势图的这个分发,然后最后呢,呃,最后的这块再又调到这个ontouch event,呃,就相当于是我们这个方法里边,因为我调他了,他后续的才会调到他,呃,当你这个return处的时候,就会导致我后续的这个方法是不是就没机会了。所以呢,我们看到的就是它只有分发。没有是不是这个这个呃,这个后边这个调用了是吧,因为这样的情况,你想想你平时写的话呢,一定很少出现的,你很少去说拦截跟这个都从来不掉啊啊所以一般情况下,我们这个分发这个都不写。所以我这也不会,我不再去细节去研究return有什么区别了啊,就是研究那么透呢,其实也没有多大作用,你就记住一点,开发当中这个方法基本上不会去重写的啊,即使你重写也是super,那跟没重写一样啊,所以这个呢就不去动它了啊,那不去动它的话呢,我们接着看下什么问题呢,关于这个拦截。
25:18
啊,拦截的话呢,我们说了说,如果我这个是return,嗯,我先return个什么呀,我先return true。认真处呢,表示的是我拦截了啊,那拦截的话呢,就是他就不应该再往里边去访了啊,那接下来是不是就考虑他自己去考虑这样的一个处理的自理那一的是处理这。好动一下看呃,这种情况下呢,呃,他先发,发完以后再往这发,再往发呢,他自己呢,就给拦截了一下,拦截一下是我自己就处理啊,哎,自己就消费掉了,这是我们说比较常见的一种情况啊,然后接下来的话呢,你这个木的时候呢,也是发发。
26:19
呃,这时候发完以后呢,你就不用再拦截了啊,因为你都拦住了,你下面还拦什么呀,因为他又不往里发是吧?呃,所以呢,你在这个目的时候呢,它就是发发发,然后自己处理,哎,再就是发发自己处理啊,就没有拦了,因为你那会儿都拦住了啊,他又不往里走,你就不用再拦行,这就是我们说的这个拦截的操作,那拦截操作有了以后,可能有同学想你这个布局啊,你想拦我,那我呢还想反拦截你呢,是吧,我还不想让你把我给拦住了,那我们就会想说我在my view里边,我们是不是得写个反拦截啊。啊法的话呢,呃,这呢,我给写到这个位置了啊呃,其实这个位置跟这个位置都行。
27:04
那写到这呢,其实也可以啊,也可以考虑写这,因为你这是具体这里边这个view了,你要能执行到你呃,你要也不重启,他肯定会执行到这个的,所以其实写这两个里边都可以考虑啊啊那写那我把这个打开吧,其实都一样把这个打开,这呢叫法兰迪这parent requestlo应该他是even章法拦截了,那意思就是你拦截我,你这就应该不好使啊,应该还能进来才对,行看一下。好滑动看效果。哎,这呢是一个分发分发拦截。自己消费。没了。是还是一样,就相当你这个里拦截没有是,那为什么就没拦住呢。
28:11
哪个你说我这个了,还是这波出马。风筝写的处。嗯,为什么说本来应该反拦截,那应该成功才对啊,怎么都没成功呢?嗯,没成功的原因是因为什么呢?嗯,他这个VIVO group啊,他在这个down的时候,他是不是就根本就给拦就就他就给拦住了,他根本就没有往里边一次都没有进去过是吧,就是他一次都没有进入进入过view,你你连拦法兰截有没有这个操作他都不知道。所以根本就没有机会让你去看到,说你反拦截了,就跟你你你整的再好,他都根本都不去看是吧,所以你这个根本就没有用啊,要想有用的话呢,那这个拦截就应该是有条件的,比如说呢,我们这样写的啊,说你这个down事件的话呢,我就return,呃,Return吧。
29:15
啊,那就是休克,这里边默认就相当于是没有栏的,那它就进去了啊,那如果你是一个木事件,木事件的话呢,我再拦,那至少那个当事件的时候是不是进去了。能理解吧,哎,大事件你进去了,你要进去,那我接下来,呃,你这块没有栏,那我就会执行my view的这个,呃,执行它这个完以后呢,不管你这是啥吧,他肯定会掉到这儿,所以呢,就是你反拦截写到这也行,写这也行啊,另果写到这儿了,我反拦截我我掉了,但这块你掉了,就至少知道你这块有反拦截了,然后他再回过来说,哎,我下边该木了啊,我该木的时候我拦住你了,然后你再看看这个反拦截有没有效。
30:06
好动一下。打开看。好分发分发,然后呢,嗯,这我们写的是一个没有栏的是吧,没有栏的话呢,所以他这块呢,走了以后,接下来就my view的这个也走了,然后view这个也执行了,这我们而且在这写了个是吧,所以他到这就结束了。嗯,到时结束以后呢,接下来接下来的话呢,就是呃,这块再发,这是一个二二呢,就是一个目是吧,发发再发。大家看啊,这个时呢,是不是我又执行到这了,相当于是不是就交给我们这个去消费了,按正常来讲,你这个时候呢,你要是有。是不是就应该走不动了?能理解吧,你看我这不是相当于是我在试图当中,我是不是拦你了呀,但是我这个是不是没有效啊,在刚才这个结果里边发现是不是还是有这个去消费的,而并没有走我们自己这个里边这个。
31:10
原因就在于它里边写了反结了。嗯,就这个事造成的啊,这个是造成的,所以说他就不能够再去执行了,所以这就是反拦截这个操作,那就是大家写代码时候呢,拦截怎么去写,拦截就这样去写啊,呃,重写这个方法,而且拦截一般情况下不是说就是上来就没有任何条件的拦,一定会有一个条件的啊,你你就像我们说的,你是呃,纵轴大于横轴了,做怎么怎么着了,我就懒啊,没有达到这种情况呢,就不懒啊,这是一种事儿啊,这是我们平常这样做,那么这个反拦截怎么写呢?有同学写了反拦截发现没有效,那就得你至少保证这个反拦截的时候呢,就是你前期的那个当事件得传过来过,如果你当事件都没有传过来过,就像我们这个呢,直接就给它注释掉了,长了个return触。啊,你这个大事件都没有进来,那你就永远没有机会去发现,你这里边写过反弹界,所以至少当事件要传进来,才有机会实现反弹界。
32:10
嗯,其实也就差不多这么多了啊,那具体这些情况呢,我就不罗列了,罗列太多的话呢,就反而晕了,你就把我们开发中最常用的这些一些点记住就可以了啊呃,这个例子呢,发给大家,你下来自己开一开关一关,你测试测试啊就知道了。
我来说两句