00:00
同学们,现在我们面临一个困惑,就是我们上下滑动可以左右滑动。上下滑动可以,左右滑动不行,但在这里左右滑动又可以,导致这个问题的原因是因为我们在这里面事件可以回传到这里,过后在MP里面是我已经在这个地方里面对我们的触摸事件。已经已经把这个事件传递给手势识别器,手势识别器帮我们去移动页面了,手动识别器帮我们去移动页面,所以我们可以滑动。对不对,那么这个移动其实我们自己去选也可以知道吧,这可以选也是可以,好,那同学们大家要注意了,在我们这个地方里面,我们呢,这个可以滑动,但是在这个地方左右滑动不可以,导致问题的原因是这个地方里面就消费者事件他没有回传,就导致在我们的这个MVP节这里,他就没法触发我们的触摸事件,大家可以看一下,我明明就在这里面点击了,但是你看到没有。
01:23
没有响应。对不对,那这个时候怎么办呢?好,我们要进一步学习事件分发中的三个主要的方法了,在事件方法中主要的有三个方法。那也就在事件这个传递和这个消费和传递过程中,主要有三个方法,好注意这里面是预估了的事件啊,指的预,因为我们这个地方里面是谁呀。制定这个类似继承谁呀,U古洛普,所以现在我给大家讲的是U古的事件的存递和消费,好大家可以看一下,因为古洛普事件中的消费和存利主要有下面三个方法实现,注意了,这个是事件的分发,这个方法之前用过吗?
02:12
一会我们就要用它来做一个小案例,好,安卓所有的事件都必须经过这个方法。的分发,然后决定是自身消费当前事件,还是继续往下分发子控件处理。注意,都是由他想传递给谁就给谁。传递给谁,谁就。就有我们的时间。如果返回two。表示不继续分发。就是不惧于分发。但呢,事件没有被消费。对啊,世界没有被消费,因为他没有消费的能力,他这是分发嘛。
03:01
但是这个有有消费对不对,返回复则继续往下分发,如果是玉古路普则分发给我们的,注意,如果是玉古路谱则分发给N。当注意分发给当前控件的on inage event进行判断是否拦截。因为古洛普是里面有孩子啊。我们这个空间是有孩子啊,有六个孩子啊,我们是不是可以去拦截某里面的这些孩子啊,是可以拦截他下一层试图的孩子的事件的啊,一会我们要在这个范围做事,好,大家看好。On in the touch event是预group中才有的方法,注意在预中没有预group才有,为什么呢?它用来拦截指视图的事件。它的作用是负责拦截,负责事件的拦截。
04:05
那么返回to的时候表示拦截当前事件不具集分发,但是会触发我们的on touch event会交给自身注意,就是当前试图的。他经问他。那么我们这个时候,刚才他提问的有有执行吗。刚才我们按啊on touch,当我们去按这个地方的时候,有执行吗?Touch,没有,那么如果我们拦截了,是不是就就把它这个方法就执行了,那也就是说我们如果返回to的时候,就是交成自身的注事就可以了,那返回force就不拦截,继续传递,这是预骨路卜特有的方法,因为预骨萝卜中。不可能有U,不可能有主U,而在安卓中,U是不能再包含子U的,对不对?你看它有这么一个特点的话,我们就制定一个类继成预骨的骨,这一个类继成用它实现了不同的自定义方式,对不对?
05:08
好,我touch意味着干嘛呢?用于这个事件的处理,返回to表示事件消费,处理当前事件,反或就不处理交费子控件继续。分发好,那同学们在我们的地方一会会有有有一个案例啊,对这些进行演示,但是我们先来解决问题,就是我们是要拦截过后这个触摸时间才起作用啊,现在触摸时间起作用啊,好,那我们就来打拦截了,哎呀,拦截一下这个on in,因特,Such such,普特,然后他e went对吧,好,就这个方法,那么我们如果把这根们返回to过后,好,那么我们写个注释了,如果当前方法返回to,我们就是拦截事件将。
06:17
将会触发当前控件的own event方法,反回复时返回po,不拦截实件,事件什么继续传递给什么孩子。对不对,指示图,那么这个时候我们直接返回就是拦截,就触发这个事件了吧,好大家看好,我们这个bug呢就解了。
07:08
太急了。运起来。左右滑动是可以啦,好也可以了,好,但是你上下滑动你觉得还有用啊,好,你看上下滑动不起作用了,看到没有不起作用啊,为什么呀,因为我们在这个地方里面,在试验传力的过程中,我们。直接在这个就又重进来的,这个是这么P吧,直接在这里面拦截了,它下面就什么没有机会了。来吧。那没有机会了,过后那是不是就就就就没办法了,那怎么办呢。我们可不可以这样,同学们,我们这样,当我们这个左右滑动的时候,我们需要响应我们的这个是是不是要拦截啊,好,那也就是说左右滑动。
08:16
这个是。左右滑动,如果是大于上下滑动。三华动是这个方向啊。那么我们这个时候在这个地方里面。这个返回的值,返回的值就返回为都是拦截吧。这个时候该方法返回的值是多少啊?就是拦截我们的什么事件将会触发on,他选event是这样的。
09:07
这问题吧。把它都小一点这么点吧。好,那假如说我们要上下滑动。它是大于我们左右滑动。那这个时候就返回多少了,这个时候我们就这个地方里面就方法返回多少,Force不拦截我们的事件,将会把事件传递给什么,只视图对不对,是不是啊同学们。好。
10:03
是这样啊好,那现在问题是我们怎么判断竖直方向滑动,水平方向滑动是500直摆动,记,记下起始值N的值,然后取绝对值,就知道它的方向滑动了。是不是判断它的水平方向滑动速度方向滑动以后工作呢,可能会用得着,就是你你要在某个空间滑动对不对。那这样的话。我们呢,就用得着,那怎么做呢?看好了这个时候我们就要在哪里做,应该是在这里面做处理了吧,首先我们这边写一个值,把类型result,那默认呢,默认是默认是传递给孩子吧,默认传递给孩子,然后我这地方呢,区分了是吧,好,然后get我们的X,然后这里面的内容是不是都差不多啊好,我把它给。
11:03
复制。啊,水曲里面是这样啊,当然这些模式都要干掉啊,啊干掉。这没这没问题吧,你看这没问题吧,一样的吧,然后我们这个时候要记录我们的这个啊坐标啊,这个时候就是我们要记住这个坐标了,然后这个时候嘞,我们在这个地方里面,好我看看这里面这个们叫down对吧,那我们就叫这样吧,Float类型down down什么呢?X类型float类型down我们的Y对吧,好记录我们的起止坐标,然后这时get我们的什么。
12:06
跟他们的Y是不是有了,那接下来我们就摁计数计算结束记录,就是记录我们的记录结束值。这个float类型and X e get X float类型一的Y等于EV1VY,然后接下来就计算我们的绝对值了吧。三计算绝对值好,怎么计算呢,和心。D是ten X,然后绝对值是吧,然后N的X减掉多少啊大当X是这样的距离知道吧,X移动距离好佛六的类型y math,然后end y减掉down。
13:28
Y这样的话得到的是绝对值啊,那么如果X大于如果。这个它大于Y是不是就是水平方向滑动啊好,那这个时候大于它,大于它不注意,那是不是有可能万一都是你就这个是一。这是零,那是是还了一点,我们是不算的,至少呢要五个。好,注意大于它,并且这个呢,至少这个要大于什么五个嘛,懂意思吧,然后这个时候就是水平方向滑动了吧,水平方向滑动我们需要做一个什么事情啊,是拦截吧,是要响应这个。
14:14
好,这个时候把它设置为一个什么呀,为Q把它相等对吧。但相等怎么做是吧?啊,那就就啊一般不会相等是不是啊啊斜斜助的时候,相等就一个项数那种概率很少是不是好,那这个时候我们就把这个值把它设为多少啊为Q好,那么同学们这个时候我给大家运起来看一看。给他看看。大家看好啊,我们呢,在这个地方里面大家看好。
15:04
我们现在在里面上下滑动,我就左右滑动,这没问题,是不是没有影响吧。然后上下滑动也没有影响吧,左右滑动。我看看啊,如果我们在滑动的时候。我们把它看看啊,在这个地方里面,我们去动态的去计算这个值,然后相减,那大于它,好,那么如果改为no X呢,现在难道是内部不行了吗?好,刚才我们的no。
16:12
来好这个好,那么我们去再去运行起来啊,给大看一下。在地方里面。大于就是至少要大于它。好,我们。一起来。诶好,我我看一下这怎么怎么突然就不行了。我们在拦截。这里当记录下来目语。啊,取这个绝对值X大于Y哦,等于X大于,错了,是不是我们错了?大家想想,我们刚才用的是Y大于,意思就是必须在Y上有距离,Y上你看有移动吗?当然有的不那么多,对吧?应该是什么X有移动至少是不是。
17:23
大家想一想是不是这个样子啊,对不对,就是说我们这个时候,我在这里滑动的时候,可能如果我的手特别精准,是崴根本就没有啊,但是我崴一张大V骨,这不是强制让别人这么滑吗?对不对,所以只能是什么这个大V骨或者是大V8都行啊,咱们一起来给他看看。啊,这是呢,我们写错了这个,但get漏Y的话应该是都差不多啊,好,我们约习起来。点头。可可滑动啊,可以滑动,可以滑动。
18:01
好,给华栋。点击上下滑动。上华东可以啊,左右滑动可以。好,但是这里面呢,有一个bug。什么一个bug呢?给大家看一下啊,什么一个bug大家好,我先那假如说我先正常情况下,我一会儿滑的话,在这个地方里面,它假如说我在这个按住的那头,我在这滑动的时候,是肯我们在滑动区域是在这个地方闪的。大家好,我黄这里面你看我的鼠标实在是这个区域啊,它不会闪的太厉害对不对,根本没有闪对吧。但是你看好我上下滑动,然后我左右滑动了。删了吧。好,但就是我按理说我按这个字母带左右滑动闪了吧。是不是啊好,那么我再上下滑动,然后再左右滑动,你看想了很多。
19:03
是不是好,左右滑动一按一下的时候没事,但是我们一旦这个上下滑动,然后再左右滑动时,你看闪了很多吧。是不是这个就是一个bug,怎么。有这个bug的呢,那么我们这样都打印一下,看看哪个地方。没有执行在这个地方里面呢,是我们的拦截的这个档,然后这个地方里面呢,有我们的这个地方里面有一个布椅。然后在这个地方里面,它有一个up。一个up,好,这地方里面有一个up,就是呃,在这里。啊。这里是吧,好,那同学我们建议用,我们之前用的是X,这是不是我们都用X啊,好最好都用X啊,直接方呢在这里。
20:12
是好,这没问题吧,然后接下来我们运行起来给大家看看。啊,这个时候我们看看哪些方法没有被执行。啊好,那这个时候我们看看它有什么一个情况。在我们这个过程中,在我们的过程中,大家看好。我们现在按下。在这个过程过程中,你发现没有。当木语执行二是没有啊,这是在拦截里面,但是我们触摸之间也没有啊。对不对,好,那么我们在地方里面。在我这一块里面,我们有这个情况好,但我左右滑动。你看闪闪退了吧,好大家再看一下,我一按到下的时候,在我们的木语这里面,这木雨木雨。
21:08
因为我这个地方是之前是上一次的吧,当沐雨,但是这里面你看你看有档吗。这个触摸事件是没有当啊。没有大。好,那么后来有个up,那没有档的话,大家看一下我们的滑动,这个页面是靠谁滑动的呀。这页面之所以可以滑动,是靠谁滑动的?靠谁滑动的,靠手势气。但是我们在当这一刹那。在这个地方里面按下这一刹那,这个世界没有,那意思就是这个方法整个就没进来吧,在在当这一刹就那没有的话呢,这个时候。在这个时候,我们在滑动的时候,这个在我们滑动的时候,当的声音瞬间没有那么突然,我们滑动距离有一点大过后,这个时候呢,它会回传,就是这个地方回传过后它才会响应,这个距离是一瞬间就变大了。
22:08
你睡没了?这个时候就跳出去了。那解决问题的话,是不是要持续的让他这个方法执行就可以了,好,那怎么办呢?就是在拦截这里面也把这个事件传给它解析,因为这个拦截地方里面大家看好,拦截这里面大家可以看一下是不是始终有当啊。这里有当,但是木语没有当,是不是刚好就形成一个产业链了?形成一个链条,你看你都有右当有二有目,你该执行就执行了,是不是这样的啊。是不是好,这样的话,就因为在这个地方里面,它有时候你看它这里面它有up,你看我我再给大家演示一下啊,大家再感受一下,首先我们这个地方里面。我按下上下移动。在移动这个时候他触摸时间有执行吗?
23:02
没有,所以触摸实上没有,但我们的手势识别器,它有把这个页面滚动吗?显然没有滚动吧,好,但是我一按下左右滑动。好,在这个过程中大家看好。在这里面我一按下过后,但是我们的触摸事件里面,大家看一下,这里面是拦截事件,但触摸事件里面你看好,这里面是拦截事件,接下来是触摸,触摸这里面有有档吗?没有档。没有弹,但是有木语有up,但是这个时候,当这一场这个时候他没有就这这个时候是他没有把这个事件扔给我们的滑动,这个时候没有滑动之后,它就没有把这个过度啊,没有把这个中间这个这个差值和过度啊,结果就导致一个问题,瞬间你看到没有。就瞬间,什么是瞬间呢?就当我们左右滑动的时候,大于一定距离的时候,这个时候我们的拦截事件是起作用了,起作用了过后。
24:03
起作用过后他没Q吗?Q过后他触发谁。触发我们的touch event,这个时候目语有作用了,但是作用的时候,但是导这个问题我已经滑动了一大截了,一大截过后,这个时候我们的我们的手势识别器里面这个值就猛增了,一猛增一倒了,我是一下子定位到某一个位置去了。这样导致的,那么解决方案就是什么呢?就在拦截的时候要把这个事情给大家不断的回传。好,这个时候你看我们再来演示这个bug。大家好,我上下滑动,然后左右滑动。你划一点点,你看是不是散了这么多啊,好再演示一下。我上下滑动。我一环我往我我我从左到右滑。这这散的不多。这散的有点多,看到没有?
25:02
好,我上下滑动,我按住。往这个方向滑动,这个还行,然后再滑,我上下滑动,然后接下来我按住。我往左滑动。往上滑动,然后我往滑往右滑动,看没有闪多了吧,闪这么多,看到没有闪这么多,那这个时候我们呢,就是把这个也拷贝到这里来。是不是好,那么把它给复制一下好再运行起来。这样的话呢,它就不会有这样的一个闪动了。好,我们上下滑动,左右滑动,看到没有。好。这个上下滑动,然后往左滑动,你看是不是没有闪动了吧,好,没有闪动了,OK,好,这个时候呢,我们就解决这个问题。
26:00
明白了吧,这就是用我们事件的传递过程去解决一些问题,就说以后你们工作了。就要把我们在上里面所学的这些东西是吧词痛,然后灵活运用于你们的项目中,这样的话它才有价值。对不对,光学具体的知识,你没应用的话就没用对吧,要用上你看用用这些拦截啊什么的,你用上过后都已经很牛了,关键是你要怎么灵活运用,这才是很重要的一些事情,好那同学们在我们这个地方里面的话呢,就是解决了我们的这个时间冲突,对吧,先冲突好我们把这个视频呢保存下。
我来说两句