00:00
嗯,好,这个刚才的话呢,我们是重写了这个叫on measure方法,那这个方法呢,重写呢是必要的啊,就是这呢,我们重重写这个方法,我们就能够确定一下你这个视图到底是多宽多高了。那以前的话呢,我们,呃,比如我去这个怎么着呢,我去继承于啊,像这个线性布局啊,继承于相对布局啊,线性布局也好,相对布局也好,里边呢,我们也放了一些具体这些视图,然后这个布局本身呢,我们也用的是制度模式。然后你运行发现啊,这个前沿布局是多宽多高啊,他已经把这个onma方法都重写好了。都已经重写好了的啊,那我们现在呢,是继承于view group,就是我们得自己啊,指定你到底当前这个布局多宽多高。因为你这个宽高直接影响了我这一行到底能放几个。啊,这个高度是什么样子的都会受影响,所以呢,我们需要呢,去指定一下你的一个宽高问题,然后呢,把这个宽高呢,设置为你自己的一个最终的一个宽高,那这个设置宽高又涉及到你到底是什么模式的,你要是一个精确模式的经营模式省事了,那下边这些呢,就不用整这么复杂了啊,那你如果要是个至多模式的,那我就得真的得算一下每一个子视图是什么样,因为呃,至多模式的。
01:21
这个宽高值就是由内部的这些视图所决定的。不光是我们这个问题,所有的都是这样,只要是声明是自适应的,那都得是看看内部是什么情况,那内部的呃,相应的一些该计算的值加起来以后呢,就决定了你这个外层布局的一个自适应值到底是多少啊,所以我们如果是自适应的话呢,就得是写这么多的逻辑了。啊,就是这样的行,那接下来的话呢,我们来看这个on lay out,那这个方法我们现在要做的一个目的,或者叫重写的一个目的,就是呢,给我们一个一个的内部的指示图啊,给它布局一下,就是你到底是放在哪个位置,就希望呢,我们运行完以后呢,应该是能显示出来的了。
02:07
啊,因为现在你没有去指定每一个的lay方法啊,指定它的左上右下,所以你根本看不到这个文本啊行,下边我们就重写它啊,这我们写一下重写的目的。哎,重写的目的呢,就是给每一个子视图。嗯,然后指定显示的这个位置啊,其实就相当于是要调我们这个child的view,它的一个layout的方法。啊,就是这样一个事啊,那那每个插view呢,倒是都可以获取到这个的难度不大。嗯,关键的就是,嗯,我放的时候呢,到底这个放到这这一行还是放到下一行。啊,这里边呢,我们还得去做这样的一个事情,比如我们在使用过程当中必要的呢,要定义两个集合。
03:03
啊,你看我这两个集合是要做什么用啊,第一个集合呢,是一个list,里边呢又是一个list。在里边呢,是一个view。哎,我这呢叫all,就是我们所有的这些子视图构成一个集合,当然这个集合我不是一层啊,我是两层。哎,这个呢,怎么表述。就是每一行的子视图的集合。构成的几何。啊是吧,写一下啊每一行。的子视图的集合啊,构成的这个集合啊,那就相当于我们里边这个呢,就表示的是这一横,这这一横对这这几个view啊,然后每一行呢,就作为一个子势,作为一个子元素啊,放在我们这个外层的例子当中。Private这呢,放一个啊叫all hat。
04:06
汉。哎,它表示的就是嗯,每一行的高度构成的。集合。哎,就这里边的元素呢,就是每一行的这个高度值。嗯,就它啊,哎,为什么要定义它呢,其实就为了方便我们后边呢,去给它调这个料的方法啊,你这左呀,嗯,然后上啊右啊下呀。呃,像你这个上跟下,上跟下,具体这是到坐标了,那得非常精确了,你就会受这一行。到底比如我们算第二行的这个top,那你得把第一行这个高度值是不是得算进去啊。呃,那这呢,就是直接从这里边取一个那个高度值就行了啊,那个底部的话呢,就是你这个值再加上你自己的一个高度那样算啊啊所以说这呢,要用到这个变量,那左右的话呢,呃也要左右,或者以及说每一行到底什么时候该换行,什么时候不该换行。
05:07
哎,就跟它相关。啊,你变力板里边的这个元素了,那就该换行了啊,那一换行,那你这个高度值应该加上啊作用,然后考虑这个值的这个值。啊,就是我们需要呢,把这些子view呢重新给他再梳理一下,看看哪些呢到底放在哪一行。啊,那接下来我们这要有两个事情要做啊,在这个方法当中,我们做的第一个大的事情。就是呢,初始化。那叫初始化了啊,给我们这两个集合呢,去添加元素。啊,那言外之意呢,就是把这两个集合这些元素了哈,该放的都都得放进去了啊,哪一行放谁啊,然后总共几行这些呢都得制定好,这是第一个大的事情,然后第二个大的事情,也是我们第一个事呢,最终要服务的一个目标,就是给每一个子师族呢啊去定位。
06:04
这是我们要做的第二个事儿。好,那先看第一个事情,给这个集合呢,要添加元素。嗯,我们这块怎么去把这里边都给他艾特上啊,行,那我们下边呢,就看一下该怎么去做啊。那添加元素呢?很自然而然的,我们就需要去循环建立每一个元素啊,先get一下count。啊,看。嗯,然后呢,我们这里边再去衣啊是放。I小于的count。那进来呢,就遍历每一个元素。Get child at。I。这个逻辑呢,我们在上个里边呢,其实写过类似的,然后下边呢,直接获取视图的测量宽高。以及呢,呃,这个视图,这个编剧啊,是所以我们这个child will。
07:03
啊,第二直接get一个measure的一个。Child的一个外。Get了一个Mar。嗯,Measure的一个子视图的一个高度,嗯,就这两个值呢,我们在这个measure的时候呢,受到上面得去调用一下这个方法。来调这个方法,因为这个方法在前面已经调过了,所以我们这呢,在测量这个子适度宽高的时候,就不用再调这个了。呃,以及下面这个我们去获取他的编剧的这个对象的时候。哎,或许它那个时候呢,因为这个方法也已经重写过了啊,所以这块呢,也就可以直接拿到了啊行,这些参数呢,我们就得到了,得到以后的话呢,接下来嗯,我们到底是放在每一个元素,到底是放在嗯这个例子里边,还是放行了下一个里边,那其实还是取决于我们这里边儿你这一行的。
08:07
这个宽度哈,有没有超出去,所以我这呢,还得去定义一下叫LA。啊,行。好,这呢,还是定义每一行的。啊,宽高石。呃,这是这个数,然后的话呢,就是你这个时候啊在这,嗯,到底是这一行能够,因为我们还得是确定一下你跟这个值的的比较啊,在这个时候呢,叫制作模式了,那你现在在这儿呢,是不是已经都知道它到底多宽了。啊,所以我们这儿呢,就是获取。啊,整个这个布局的一个宽度。哎,我们就这次点啊,Get一下这个measure的一个,呃,One,哎,你经历过这个measure方法以后。
09:01
哎,我这儿呢,再去获取它的测量的一个宽度,这个就有意义了。啊,这个呢叫measure wise,或者我就写个叫wise了。这是我们整个布局的一个宽度行。嗯,那每一行那个基础之上再放一个,能不能放就取决于跟他嗯比较大小关系了,行,嗯,那好了,基本上储备工作呢,差不太多,我们就开始来写这个衣服。啊,已经知道的当前这一行的宽度,再加上我这个child view。它的一个measure的一个宽度。上面已经都写好了。再加上你自己的边距左边的。嗯,右边的边距加起来如果小于等于谁呀?Y是吧,嗯,那这个呢,我们就哎放到这一行,这呢表示的叫不换行。
10:02
哎,那不换行,那是不是应该,呃,把你这个元素加到我们这一行的这个集合里边了。对吧,哎,这个集合我们还没有造,所以呢,我们给它造一下,造的话呢,我们也可以写在这个上面。啊,这提供一个啊,这个呢叫。嗯。嗯,提供一个集合保存一行元素啊,一行这个差。啊,这个呢,我们叫啊烂。嗯。来list吧。嗯,好,它是用来保存这一行的view的啊,那我们CTRLC当你不需要换行,那很显然呢,我们这一行呢,就应该把你当前这个差的呢,给它加进去。
11:02
哎,加进去以后呢,我们当前这一行的这个宽度啊,应该加等于。哎,我们这个child这样的一个值,跟上边我们这个measure里边一样。高度呢,也一样。啊,那看看。这个你写这单词又写错了,哎。哎,它呢,还是等于这个ma。点哎,Max本身呢,你自己的这个hat在跟我们本身这个child的这个hat。加上mt.marin。方做一个比较,取出它这个较大的,想想还有别的逻辑吗?这是不用画好的。这个主要目的是为了加到这个集合里面啊。
12:03
行,差不多差不多我们就接着写,哎,这个呢,表示叫换行。那我一换行,表示上一行呢,已经都定定死了。那这个里边。做什么?嗯。嗯,这个要定死了的话呢,我们最终目的是不是第一个大事,是不是主要要给我们这里边这两个大的集合去添加元素啊,那你现在一换行,是不是上一行这个集合都已经搞定了,所以我们这个all。啊,应该呢,做一个A,把你刚才上边造好的那个集合给它加进来。对吧。同时的话呢,我们这儿还有另外一个几何计算高度,你都换行了,那刚才那一行的高度也就确定了。把我们上面这一行的这个高度呢,给它添加进来。理解吧,嗯,那以及的话呢,就像我们上面写迈里边写过的,你这一行的这个,哎,宽度是不是应该就变成是。
13:09
换行以后这个元素的这个宽度了。然后这一行的高度。哎,那也就变成了你这一行这个唯一的目前这个元素的一个高度。对吧。还有别的操作吗?嗯,你这时候呢,一换行,我这呢重新指定这两个了,那你要一换行的话呢,呃,再回去去加一下,那你这里边儿这个集合,这个集合呢,都换行了,也加到这里边了,是不是这个集合应该这一行的集合了,是不是应该更新一下了。对吧,CTRLC。这个集合的话呢,我们就再重新给它去new一个啊a release。啊捏完以后呢,你这一换行了,那这一行是不是应该也把当前这个元素呢加进去啊。
14:06
所以得非常小心。这逻辑呢,是少一个都不行。还有吗?哎,这不已经写了吗,这个。在这儿呢?行,哎,这个呢,就差不多了。然后呢,跟上边measure是同样的问题,仍然需要考虑一下if,如果I呢,正好是你这个差count减一,也就表示呢是最后一个元素。哎,这个元素仍然没有被考虑到。嗯,你想想,如果你是最后一个元素的话呢,我加到这一行的集合里边了,这一行的这个宽高呢,也都加了一下,一个没有解,没有走,没走的话,你现在最后这一行就根本没有考虑。呃,所以呢,你还得把最后这一行加到我们这个整个的这几个集合里边,高度呢也得加一下,所以这个呢得动一下。
15:04
哎,这块呢,就用不着了哈,这块再造也没有必要了,行这是这个事情,然后呢,如果你这一行换行了哈,最后这元素换行了,换行这个加的呢,也是你上面那一行的。啊,那你把最后这个元素呢,又加到这个里边,这个呢,相当于你新得到的这样的一个啊拉,跟这个list也得去加进来,所以跟上面这个measure时候套路一样,也得把这个逻辑加上。好,嗯,这个整体在进行一个for循环,遍历完以后,我们呢啊,就得到了有具体数据的这样的两个集合。那下边呢,我们写一个log。哎,唠个什么呀,我看一下我这个all.size。哎,我呢,再加上一下。has.size。大家想一想这两个值。
16:02
有什么特点吗?相等,有同学说相等。你想它俩相等吗?这个size表示是不是应该有几行呀?这个表示的是多高的size,是不是也算是有几个高度的行呀。应该是不是一样的。应该是相等的啊,来测试一下。你看这是三行。就这三行啊,这两个值呢,是相等的行,这我们第一个事情呢,就做好了,给这两个集合呢去赋值。
17:02
啊,添加元素啊,我们先停一下。
我来说两句