00:00
啊,那接下来呢,我们主要来考虑这个onto是这样的一个写法啊,那这个写法的话呢,我们可以这么着了,那我可以先做一个判断吧,说如果刚才我们上边呢。哎,抽取出来这样的一个视图,那一开始的这个属性呢,相当于就是个no啊,那如果你这个长度呢,就是零,那其实就是绕了,所以我们可以先这样判断,如果你这个char count啊,差will。等哪弄?嗯,那你这个就没啥可说的了啊,我直接呢,就现在按照你这个复视图的这个。啊,做一个return就可以了。啊,就是没有子视图了啊,那你这个正常的view里边怎么处理的,这我也怎么处理。我们不管了啊,那重点我关注的呢,就是你这个不是一个闹的情况啊,那不是闹的,下边这个怎么去写,那你就得分了啊,一般的啊,它是因为在里边我们一上来就会给它Switch。对吧,even.get一下action吧,Motion even.action down依次的这样几个。
01:07
和阿。啊,这是对应的,我们说这个事件机制里边这样的几个行为啊,盗墓和up,行,嗯,然后呢,在这里边的时候呢,我们看看应该做什么样的事情啊呃,我们现在呢,刚才已经简单分析了一下,就是呃,原有的这个sc view呢,它是有这样的范围内的一个动动态变化,我们现在呢,希望是它超出这个边界,还可以再往下。啊,以及呢,还可以再往上啊,做这样的一个事情啊,那到的时候呢,一般我们做的事就是记录一下你当前是不是你点上去的这个位置啊。啊,这是我们当通常做的事情啊,那在我们这个问题当中,跟横坐标有关系吗。没有,只是纵轴上的对吧,所以我们这呢,可以提前的这个位置,我先provide一下int型的叫last y。
02:03
啊,就是上一次Y轴方向的这个位置啊。看坐标位置。Y轴方向上来操作的。坐标位置啊,那一般我们在到呢,会者我们先写到,应该先写到这吧,一上来时候呢,我们先获取一下啊,它的一个坐标啊,Get一下Y。这呢,我们给他这我就都用个in的行了啊。Even y,做一个强者。啊,这个呢,就是我一上来的时候呢,就先呃获取一下你当前啊,你手指按下去的这个位置坐标,随着你不断的去目这个每次我们说你这个手按到这个屏幕上荡一下以后,我这不断的去动的过程当中,这个方法是不是不停的被调啊。哎,就是你只要一进来不停的调的过程当中,我每次一进来都获取一下你Y轴的坐标到底在哪啊。
03:03
啊,获取。当前的。啊,Y轴坐标。行,然后呢,如果我发现你这是一个down,那就意味着你是第一次触动了这个屏幕,是个down的操作啊,那我们就可以呢,让我们这个last one。那就复制为我们这个,呃,叫疑问的。啊,去做这样的一个操作啊呃,那接下来我们重点考虑的就是这个木的操作了啊。啊,重点考虑是这个木的操作,那想一想这个木啊,以及呢,包括这个阿尔法,这其实是我们这个说的这个难点里边的核心。嗯,木移动。嗯,移动的话呢,我们就得看怎么去动了啊呃,因为这个目里边呢,就涉及到你对此视图的一个重新的给它lay了,看一下啊,一开始的时候呢,一上来是这个样子的。
04:01
啊,那用户的这种情况下,如果我们不去重写这个本身的onto疑问,假如这方法没有重写,那本身用户啊继承于是呃,Score will,他其实他自己就可以这样做。都没事儿是吧?啊,那什么情况下我们才做一些特殊考虑呢?是不是他在这种情况下呢,再往下这个时候才会考虑啊。啊,以及呢,就是刚才的这种情况,以后呢,再往上才会考虑,所以说呢,就是哎,这是两个临界位置,这块大家得注意听啊,这个还是因为这个你听得懂,你才能会写这个代码,这是一个领域位置。这是一个临界位置,当在这个位置下,用户再往下,以及刚才这个位置用户再往上,才需要按照我们自己的方式去指定。如果不是这种情况,而是呢,就在这个范围里边,是不是还按照原来这个复始图的,你怎么操作就还怎么操作呀。
05:01
哎,所以我们这里边呢,嗯,可以去这样写一下哈。怎么写呢?嗯,我们说啊说如果叫is need。呃,逆什么逆木?如果你需要做一个移动,就是我们希望做的那个啊,超出那个临界范围的那个操作,那我们下面呢,才按照自己的方式来,那你要是没有不需要木,那是不是还按照原来那个套路走就可以了。哎,就是我们就不用写什么逻辑了,因为这儿是不是还有个super了啊,就是你你要按自己的这块你就写,呃,发现它在正常的这个范围里哈,临界范围里,那这块呢,就不用走了,最后呢,它就在这,那就还按照考这个方式去去去做啊,只有need目的时候才按照我们自己那什么时候need目。哎,这就是我们刚才说的,呃,你得把那个临界状态呢,得划分清楚啊,先false啊。呃,意思逆目,哎,这个呢,就是我们目前的一个核心的方法,这个方法的话呢,我们得把这个临界位置呢画出来,这是一个,然后呢,这是一个。
06:10
嗯嗯,怎么去标识这个事情啊,嗯,这呢就还是看我们之前的一个复习内容啊,嗯,一开始的时候是这样。这是一个初始状态,然后用户的话呢,再往上往下滑动的时候,我们有一个方法叫。哎,是不是叫get一个叫SCW。WHY?还记得吧?就是获取用户在Y轴方向上的一个是不是移动的一个距离啊,相较于最初始的这个状态。哎,那我们这里边呢,就可以呢,做这个事情,说这次点get scw。就获取用户在Y轴方向上相当移动的一个距离是吧。嗯。The kill away。
07:01
那这次点get。获取用户在这个Y轴方向上的偏移量啊。行,这个偏移量的话呢,需要大家去注意一个事情,我们当时讲的时候呢,自定义师总也说过了,它应该是叫。嗯,比如说是我往上滑了啊,这是一个屏幕,这是初始状态,我往上手往上滑,这个get sc是正还是负的。哎,是不是正的呀。往下滑get y是不是负的呀?这得整清楚啊,嗯,所以这个我们就理解成叫上加下减。啊,就是上是正下是负啊,你往下滑就是负的,就是这个意思啊X就是左加右减行,那获取到这个呢,就是我记录一下你这个偏移量相当于啊,那这个偏移量的话呢,就是呃,如果我们手那因为一开始初始化是这样状态,我再往下动。
08:13
那相当于你这时候这个Y是不是,如果一旦发现你是小于等于零了。其实用户是不是就想是按照自己的方式做啊。哎,那就意味着我们下边写的时候啊,说如果哎,我们这个四号Y呢,是小于等于零。那说明用户呢,就想自己的方式动,那这种情况下我们是就个除法。对吧,哎,那除了这种,这是其中一种临界状态,还有一个临界状态就是。这样。这个时候呢,这也是一个临界值,这个呢是用户在初始化,在初始的这个状态,这个时候get sc y是个零哈,那用户是相当于往上呢,划了这么多。这算花了多少?划了这么多,减去这么多吧。
09:04
是不是就划了这么多的时候,以及用户再想滑的时候,是不是就是另外一个连接状态,所以这个时候一个关键值我得计算出来这个距离差。哎,这个距离长怎么算?嗯,相当于是获取这个也是有些同学可能不太理解的点啊,我们上面呢,是不是获取了这个child view啊,就我们所谓的理解撩是吧,嗯,他点get measure at。哎,这个结果啊,差的没有。哎,看你说这个结果,我们得到的是这里边的蓝色的还是红色的高度。哪个红的红的啊,因为你本身这个红的人家是不是本身就是这么高啊,如果你红的都是蓝的,那就不用划了,这不屏幕都充满了嘛,也够是吧?哎,所以这时候你子示度,你本身子示度不就太长,所以乘下嘛。
10:06
啊,所以说这个时候我们get到的是红色的这个长的啊,哎,是他的。行。再回过来。获取子视图的一个高度,这个是这个高的值哈,一会我们也可以打一个log,你看一看。来打印一下这个值啊,这是它了,然后的话呢,我们再去获取一下你这个屏幕的这个像一个高度一样是吧,那这个呢,实际上我们是可以通过当前的这个sc view来获取的,因为我这个my sc view我在这写的时候呢,是不是充满的呀。哎,它充满其实这个时候呢,你这个负视图,或者叫我们my view,它的高度充满了,也没有别的视图了,它其实就是我们整个。呈现了一个高度,但是你这用整个屏幕的高度还不太合适,因为上面白给他。
11:02
你是不是得把它抠出去啊?啊,所以这个时,这个时候的话呢,你相当于是我们这个屏幕里边上面你放了一个这个comment,它后边这块呢,整个给了sc view了,所以我应该是用这个sc view获取它的高度。就是。它就是啊,只不过你这个strong view里边放的这个子势图有点大。是这意思啊,行,那可以了,那回过来啊,回过来的话,我们通过这次,这次不就是这个my view吗?他点get一下measure,一个hat。嗯,这呢就是。是。啊,Bill它的一个迈。CTRLC一下,我们也打印一下。嗯,行,那这两个的话呢,我们。
12:02
计算一下他们的这个差值。啊,相当于是你这个呃布局啊。嗯,它两个的这个差值,那很显然是这个数应该可能会更大一些,所以我用它去减它。In一个D等于child measure at减去。的一个measure,然后这个差值,这个正常情况下这个差值是不是不会是负的呀,那一定是大于等于零的是吧。大于点零的,然后正好用户呢,他是往上滑,往上也是正的,所以我这儿呢,就是你这样情况或者。怎么着啊,Y呢,是不是大于等于我们的这个DY啊。哎,Y大于等于它,那言外之意就是用户呢,在这种这个位置,这不正好是DY吗?在法是不是就是。哎,就是你要是再想房,呃,用户呢,我认为你就是需要按照我们自己的这个方式来了,所以我是这么住,那其他情况下呢,认为都是在临界范围内的啊。
13:10
呃,其他,呃处在。啊,临界范围内的。哎,返回false啊,即表示。来表示啊,人。按照。嗯。人。啊,仍按照本身的这个score view啊,这个view不是my view,仍按照这个score view的这个方式。啊,然后呢,去处理你这样的一个上下滚动啊,啊这个时候呢,再按照我们自定义的方式啊,这个处表示着。按照我们自定义的啊,MY。
14:00
Will它的这个方式来处理啊,所以有区分为一个是to,一个是false啊行true跟false,我们这呢,就标示了一下,就这里边它了啊,哎,这是我们需要动的时候。那需要动的时候呢,我们这里边儿就进来,进来以后的话呢,我们看看应该怎么去做啊,比较关心的事就是主要呢,我们就想给这个child view呢,是不是主要去调这个layout的方法呀。是吧,呃,就是相当于让他重新定位一下啊,那这个料的方法呢,跟左右没啥关系,所以这呢,就还是你本身这个child view,它的一个get left。呃,关键呢,就是这是我先写个零吧,你的上变了是吧,然后呢,这个插view呢,盖念一个right这也没动,哎是不是又是这个,呃,下变了,哎关键的时候就设置它的这个上跟下就行。对吧。能理解吧,行,嗯,那这个时候我们看看啊。
15:00
嗯,设置它,设置它,然后呢,这是我们在木的时候啊,那木的时候呢,我们就可以是不是计算一个它的这个DY,就是到底是移动了多少。嗯,叫。Event y让它呢,去减去我们的。Last one就是用户呢,到底是移动了多少啊?就是一个微小的移动量。哎,计算这个微小的移动量啊,那你防止你忘了啊,最后记着是不是给他重新复值啊。这个啊。啊,这个别忘了,这个微小的移动量的话呢,就应该是给我们这块呢相关了,所以我们是在原有的你这个child view,它的get一下它的top,呃,在它的基础之上,你这时候你注意一下啊。嗯,加还是减的问题。
16:02
看一下假设用户是往下移啊。就是在这种情况下。这是初始化状态,我现在再往下转,嗯,这个时候。地块是正的负的。跟那个外得搞清楚,它俩不一样啊。你Y的话呢,是往下是不是负的呀,那我这时候这个D呢。嗯,回去把那个自定义控件再看看啊。嗯,是不是应该是正的呀,因为你这时候是不是用Y坐标表示的,你往下划,你这个是个往下Y轴是正方向,这个数要大于这个数嘛,这是坐标上的一个差值,所以这呢是一个正的。啊,这是一个正的,我现在往下滑,你这个整体是不是应该往下移,所以我这呢是加还是减呀。
17:01
中午多吃点儿啊。M。是不是应该是个正的呀。哎,你整个你往下移了,你这个泡泡不应该是加上一个正数就往下移了吗。所以这是加上DY啊,所以这呢也应该是一样的。啊,Child的,它这样盖成一个包层,然后加上了地板啊,但是这时候我们让他这个用户呢,呃,假设用户往下拽了十个底皮,我就让他以五个地皮,就是让他这个你拽的可能挺挺狠的,但实际上呢,就移动了一点点是吧?哎,我们这呢,是不是可以通过让它出一个二移动一半处理一下。两球除以三行不行?可以是吧,嗯,就是我们这呈现一个这样的效果啊。嗯,这是一个他,嗯这样写,这就相当于是给他做了一个重新的布局啊,嗯。嗯,重新布局,这时候我们再想一想啊,这个时候我们还需不需要做个事。嗯,要做个什么事呢?你想想啊,我们这儿呢,给它重新布局,相当于呢,你就让它往下动,动了走了是吧,我一会儿是不是要撒开啊,我一撒开你得回去回哪。
18:13
回到这儿,那你得告诉我回哪吧,那你应该是不是应该记录一下,当初你这个在这个时候啊,这是临界状态,这个时候,然后呢,这个时候我应该是不是试图记录一下你的上下左右。然后呢,当用户哎,往下动了,我再一撒开,好,我就是是不是回到你最初,刚才记录的那个啥作用。这个也是一样。哎,当你到这儿的时候呢,我就赶紧记录一下你的上下左右。啊,记录完以后呢,你现在这样动好,我让你动,当你撒开的时候呢,我是不是就按照你那会儿记录的临界状态的杀闪左右把你重新调到这。所以我们应该呢,是不是需要呢,在你重新布局,因为重新布局这时候已经是不是改了你的上左右了,那应该在这再靠上一点。先记录一下你的。
19:02
30左右吧。能理解吧?哎,能理解啊,那这个商X左右的话呢,是四个变量,那这个四个变量可以直接写,或者我们就封装到一个类的对象里啊,这呢。就是一个啊,我们那会儿用过的啊。800。那就可以,它就有上下作它这个句型。来,我们这加个normal吧。等于你有一个。说用于记录啊,记录我们这个叫临界状态的上下左右。啊,或者叫左上右下。行,这个目前呢,它里边这四个值都是空的啊,四个值是空的,四个是空的,那我们这里边呢,我就在这个位置,我应该呢,是给我们的这个叫normal啊。
20:01
那么我们去是不是设置一下它的这个上下左右啊,设置的话呢,那就是child will.get一个left啊child will。Get这个top,然后在will顶上get一个。Get一个button行,这样写行吗?这样写成啥了呀?我是不是不断的去往下拽,这个方法是不是一直判断都是出现在你这个木的话呢,是不是不停的被掉啊,不停的被掉啊,这个也不停的执行,这个料呢,是一直在一点点一点点往下,那你这个呢也是跟着变。这个是不是应该不要变啊,就光记录这个临界的这个位置。啊,就在这个位置,你人家如果再往上走,你是不是就不要拿它新的这个位置再去给他定位了。这个怎么整啊?当就是你这个的这个过程当中是就记录一次值,就是你刚开始这个临的状态,你再的时候就不要再记录了,怎么办。
21:03
这个还是有点困难,所以我们这呢,哎,这就就是调另外一个方法了啊,Normal呢,它有个方法叫empty。你看这样行不行?如果呢,你之前没有记录过DG,就是它是个空白的。就是还是干净的是吧,呃,如果你你没有之前记录过,好,我让你记录一下这个是不是就是那会儿刚变成处的第一次。是吧?理解吧,就是你刚是到临界状态的时候,一开始这不是都是false嘛,就在你一开始这个这个这个过程当中啊,在这里边你可能就都动了,哎,刚到这个位置,那我们这个意need的木就变成true了,刚要变成true的时候,此时的你这个normal是不是还是一个空的吧。此时你是空的,我呢就给你定义一下,然后当你再去做这个木的操作的时候,呃,由于你这个时候已经有值了,所以就不再进去了。
22:03
所以呢,就不再对它复制了。所以我们这个时候呢,是不是就是记录了你这个child will的一个临界状态的是吧。啊记录了,所以这个还是有难度了啊X的一个。临界状态的这个左上右下啊。行那行,我们这个操作的话呢,就写成这样了,相当于目前呢,我们应该是往可以往下拽,可以往上拽了。啊,只是说呢,我们这时候up还不行了是吧,我们看一下这个效果先啊。嗯。
23:02
也这个动态加载过程行,然后呢,我们看看啊,这还是有点小激动的。往下。那是不是可以了。只是我撒,我现在撒开了啊,我撒开以后的话呢,他肯定回不去,因为你还没有写安up。嗯,然后我往上。那就是,哎。这样是吧,哎,所以现在只能是做成这样啊,但是这是已经是呃一大步了啊。行,那回过来。该写这个了。啊,这个先停一下吧。
我来说两句