00:00
好,哎,接着我们昨天那个内容呢,往下写,下边写呢,该头像的一个原因处理了,我们这里边呢,嗯,当一进来发现本地有这样的登录信息的时候,哎,我们呢,直接呢就把这个呃,SP文件当中用户的这个名称读出来,然后呢,设置个我们这个test view,呃,这个头像呢,Image view对应的那个URL的路径解析过来,通过皮卡O,哎,我们再去联网操作一下,获取了这个图片加载显示的。啊,这个图片你看它这个还是完整的哈,什么叫完整的呢?就是嗯。头到它这个尾这儿。卡出来了。嗯,上面这头到这尾,这我在服务器里边这个头像也是这样子的。嗯,看这个。这有时候不是特别好看啊,你可以这样,这个上面这脑袋这不刚刚搂着是吧,下面这个。开叉。
01:00
正好开到这儿是吧,嗯,然后这块的话呢。也这样,哎,这个图片呢。啊,就是相当于是原封不动的就给我们放到这儿了,当然这个比例缩小了。啊,其实还是一个这个这个相当于是个竖版的啊,啊,那真是我们这放的是个圆,那我现在呢,要进行一个圆形处理,就把这个图呢给给它截成一个圆的了。啊,那你现在呢,这个不是特别明显啊,它这个垂直方向上,那有时候我们这个下载过来的这个图片呢,它就特别的这样的是不是长呀。那这个时候我们去画成个圆的时候,圆形处理的时候呢,呃,你如果要是这样的截一下。那可能这个用户集完以后,这个就光截了个大脑袋是吧。啊,那我们这希望他怎么做呢?就是呃先呢,把你这个呢,先压缩压缩压缩压缩成一个正方形的,然后这样的截一下。这可能结出来以后就相当于这个人呢,有可能就胖了是吧。
02:01
原来正常的,然后往上一提就好,但是我希望它显示个完整的,所以这里边这个圆形处理的话呢,呃,涉及到这样的操作啊,就是对一个图片呢,进行一个压缩啊,压缩成一个正方形的,然后呢,再进行一个圆形的处理。是这样的啊行,那首先的话呢,我们先来做这个原因处理,也就是说呢,我就先不压缩,我们看看这个效果它是什么样子的啊。好,我们就来做这样的一个事情,呃,做这些事情的话呢,我们这儿有这样的一个步骤啊,大家照着这个步骤来写就行啊,怎么做这个原型处理,首先第一步设置一下我们要显示的这个组件的位置,就是我们这块呢,你这个圆形的这个image view啊,对应的它这个区域,这image view的话呢,要求它的school tap呢是fit X y的。啊,这是第一个设置,这呢咱们已经写过了。来找一下我们这个号,嗯,Me。
03:05
哎,这里边呢,这个圆形的L。啊,圆形的这呢,我们已经加了这样的一个teot了。啊,这是第一点已经做完了,然后第二个的话呢,我们就具体需要呢,去提供一个圆形的一个bitma对象,然后把这个bma对象呢,设置给我们的map啊,一开始你这个b map是一个呃矩形的。啊,是不合适的啊,哎,具体这个操作的话呢,大家也不用刻意的非得去记这里边这一行和代码了啊这呢,我把它直接CTRLC过来。你说不用记就不用记,你说用急就急是吧,你的标准是啥呀。标准就是我说了算是吧,你说一说啊。Bit map。把这个方法呢,粘过来啊,关于这个图片一个处理,我专门呢封装成了一个类啊,叫YouTube静态的,直接通过工具链调啊。
04:04
来我们说一下这里边儿的一个操作。嗯嗯,这个方法呢,我们叫circle bit map,就是把这个,呃,一开始你有的这样的一个bit map呢,比如说我们现在这里边你下载到的它其实就是一个矩形的啊,把这个矩形的这个加载到内存层面的这个平态化,把它呢,哎进行一个圆形处理。啊,他是怎么去做的,或者我们这个想法是什么,把这个事儿大家能理解就可以了,具体这个逻辑的话呢,不用非得自己那么会写,所以呢,我们这个关于这个代码的话呢,其实可以分成两类啊,以前应该我们也提过这样的一个想法啊,这个代码。包括大家天天写这个代码也是一样啊,就有些代码的话呢,你不用非得自己一行一行的能够敲出来。啊,这个时间有限哈,呃,需要你掌握的这些代码的话,写一遍,不会写还得再写一遍,比如说你写那个Li view啊,里边那个data,包括后来我们说分类型的Li view啊,包括这个recycle view的使用,像这些的话呢,那个逻辑下怎么装啊,这些一定得多写一些,要写的熟一些啊,还有一些这个代码的话呢,是用不着费得斯以后会写的,就是你能够整理好放在这儿,以后呢,开发中用到了,直接粘过来用。
05:18
就可以了。啊,所以你得得会学习是吧,聪明一点啊,那这个代码的话呢,其实我们可以分成这个叫呃一种呢,叫这个功能性代码。那另外一种呢,就是非功能性代码。哎,功能性代码的话呢,就是我这一段代码就是完成具体的一个功能。啊,当然呢,你如果有变化的话呢,这个变化你可以通过这个形穿的方式传过来啊,是这样的功能,然后传个这样的么样传个量啊,像我们下边的就是一个就是将一个,呃,不管你是个什么样的这个宽高的哈,总之你是个b web,我呢把这个b lab转换成一个圆形的一个。Map啊,就比如说我们这里边这个b map,实际上呢,看到的是一个矩形的,那我回头呢,这样处理完以后呢,它就变成了圆形了。
06:06
啊,这就属于一个功能性代码,那回头呢,哎,我也不用非得去记这里边一行逻辑使这个方法,我知道知道有这个方法,然后我也存着这个方法,以后你就要用,直接拿来用。啊,包括的话呢,像我们这个UI里边,呃,像这样的这个操作。嗯,我将一个DP转化成PX,具体这里面其实你也不用刻意的去记。啊,我就知道有个方法就可以专门的把这个呃,DP转化成这个概念。啊,转换成跟你这个手机密度没有关系的这样一个值,那你知道这个功能就可以了,回头呢,哎,你就能这样用,或者你忘了忘了你去百度查一下也能查到,总之让你能够记住知道说有这么一个功能可以做这个事。啊,包括呢,呃,其实像我们这个排序哈,比如你手机呃,我这个联系人的话啊,联系人的话呢,你这儿呃谁谁谁这谁谁,咱中国人嘛,中国人写的这都是汉字了,你要是英国人没啥问题,或者就是这个英语的,他就是按照abcd这个顺序去排的。
07:05
啊,那你中国的话呢,你按照abcd。那其实也是按照abcd啊,只不过这时候呢,你写的是这个汉字,你写的是这个张啊,这呢写的是这个理,他排的话呢,肯定是把里排上边了,因为它这是个L,这是个Z。但是的话呢,我写的是一个汉字。那希望人家需要做的事呢,就是这个联系人,那个英用,当我放一个人的时候呢,他得能够是不是把你这个相应的这个汉字先转化成这种拼音啊。哎,然后呢,针对这个拼音的这个首字母,按照一个顺序去做一个排序啊,底层那个数据库存的话,是不是也是得按照不是按照你添加的顺序的啊,比如说我先添加的章,后添加的理,那你这个理呢。就呃这个这个啊对这个添加的时候,其实你在数据表里边应该是写到后边,因为你后添加的就得往后放了啊呃,当然我们呃这个查询的时候,呈现给用户的应该是按照它的一个呃首字母的一个顺序排的,那这里边去实际上呢,就需要一个功能性的代码。
08:05
什么,在哪?如何将汉字转化成一个拼音是吧?哎,这呢,其实也是一个具体的功能啊。嗯。这个咱们前面讲这个快速索引的时候,应该是不是用过呀。对用过啊,应该是相应的添加啊,有个炸包吧啊,再写个工具类是吧就可以了啊,诶所以这块呢,像这个功能你也直接拿过来用就行,你也用不着去非得去研究它里边怎么怎么去写的啊啊这都属于叫功能性代码。啊,这个呢,也是其中的一个。嗯,哎,刚才那个功能已经说过了啊,哎,把它转换成个圆形的,那我们呢,简单分析一下这里边这个逻辑啊。嗯,看看他怎么去做这个事儿,你把这个事呢,能够理解一下就可以了,回头不用非得自己去敲了啊,首先第一步。啊,这里边我们把这个不用需要写的代码说的这么理直气壮的是吧。
09:00
这呢,你看我首先呢,这有个source哈,嗯,这个时候的bit map,你就把它想象成是一个。因为手机端一般我们手机屏幕都是比较这个竖竖横的,跟这个电脑屏幕一样,电脑屏幕是横向长。那电手机屏幕的话呢,是竖的比较长,所以我们呢处理的这个图片,我就默认的这个宽度呢要更窄一些,高度呢更长一些,所以我这里边儿呢,就是主要针对于这个宽度进行了一个圆形处理,相当于我画出来的这个圆呢,是长这个样子的。啊,是这样的啊,那这个圆的这个直径。很显然是不是有我们的宽度啊,所以哎,我这里边我去写这个代码逻辑的时候,你脑子里边就想要这样一个情景啊,哎,我第一步呢叫获取啊,你这个bit map它的一个宽度。啊,获取了宽度了,然后呢,我们去创建一个新的bit PA,这个新的bit PA呢,整个,哎这里边你看涉及到它的这个宽高,哎,你整个这个新的宽高就以你这个宽。
10:03
哎,作为一个标量,相对于我这造出来的这个句型宽高是一样的,那其实就先做出来,哎,这个圆还没有了啊,是不是先做出来个这么个情况啊。这样一个情况啊说。一。嗯,这个比特曼的这个宽度。值。嗯。嗯,这个作为一个新的。啊的这个宽高值。啊,那此时呢,其实就是一个矩形的,嗯,这个正方形准确说啊,那另外的话呢,还涉及到你这个新创建图片,它的一个你这个什么,就是提供了一个位图的时候,它到底是一个什么样的一个精度的啊起到叫AARDB8888,这个能了解吗。点点嗯,AR这个你看这是不是好好几种情况啊。呃,应该还有一个这个,嗯,直接2.b一共呢,应该算是有这样的。
11:02
你要整个说的话,一共有四种设置一个这是一种。这是一种,这是一种,这是一种。我们这儿呢,最高的这个,呃,或者显示最最清晰,不失真是这种。啊,这几种有什么不同?啊,这不给大家发的那个文档里边,我总结了一个啊。也不是我总结的,是我把它总结的拿过来了。RB。哎,他这呢,就写的比较清楚了。这个A2DB直接从这吧。嗯,A代表了什么呀。对阿尔法透明度啊,RDB呢都比较知道了,比较清楚每一个这个字符对应的后边一个值,这个值呢,就是它在底层占几个B。Be啊,所以八位每一个bit,八个bit就是一个be了。所以这就相当于是四个BA啊,一共是32位去存储一个小份。
12:00
那你这个每一个像素,这个相当于这样一个情况,用八个bit来存储的啊,那这个4444呢,就相当于是用四个bit去存储这样的一个像素点啊,那显然的话,这种呢,比它占用的这个真正的存储空间要多一倍啊,那很显然这个就更清晰一些啊。嗯,然后这种情况的话,就565,它没有考虑透明度的问题,分别用565个五个bit的,六个bit的,五个bit的来存个RB啊一共呢,也是16倍,跟它是一样的。啊,阿尔法的话呢,八只是针对于透明度做了一个设置啊,下面有说明,哎,我们真正在开发当中去用的话呢,如果说你嗯想更。更更清晰不失针,你可以用这个最高这个精度的。啊,那除了他以外呢,尽可能的考虑的就是2DB了。嗯,这种方式跟这种方式占用内存空间一样,但是这种方式呢,考虑到这个透明度了,其他几个都用四个位,导致这个最后失真比较严重,所以这种方式是不推荐使用的。啊,这种方式呢,就是如果你精度这个透明度要整个这个要求不是特别高哈,哎,你可以用这样的情况,这个呢,就不要用光是透明度的啊,所以呢,可以选择的就是它跟它。
13:12
啊,这里边如果我们希望它更更不失真,更清晰啊,更准确,呃,描述的信息更多,那我们就用这个最高的这个就行啊,就这么几种情况。好,这呢,我创建了一个对象。然后呢,我们接下来。啊,以这个ma对象。啊,以bit map,然后为我叫为基准吧,哎,创建一个画布。那这个画布,我们这块画布的这个空间,或者叫这个区域,就是你这个宽高这样的一个区域了,行,那下边的话呢,我们主要目的呢,就是在这个画布上呢,去画一个圆。八个圆,这个圆的话呢,这是它的一个中心点的坐标啊,因为这个画布就是刚才说的这样一个正方形了啊,圆心点坐标就1/2 1/2啊,这个圆的半径呢,当然也是1/2了。
14:10
嗯,然后画笔,画笔呢就是直接找我对象就行,这个比较简单。好,呃,这呢,我画了一个圆。这个圆的话呢,就作为我们你现在这这这其实是一个层叠图啊,作为我们这个图的一个底层的这个图了,在这个上面的话呢,我们画一个呃bit map,呃bit map,这map就是你最初的这个bit map,就是一开始我们这个画到这吧,一开始我们这个这样。刚开始我在这个画布上呢,我画了一个圆。其实其实就没有这个结构了哈,没有这个方形了,这个圆呢,作为我们的这个下层这个图。现在呢,我把这个bit map是不是放到这个圆的上面啊,然后他俩取一个。是不是交集啊?交的话呢,就是这个圆的这个区域了,那取这个交集,那到底是这两层图我都显示啊还是怎么着啊。
15:07
都显示就不对了。是不是我光显示这个,这个叫上层啊,这个叫下层,是不我光显示上层这个区域。再说一遍啊,哎,圆的是下层,这个b map是上层,把它俩重叠在一起取交集,哎,然后呢,交集里边我只取上层的这个显示的效果。就是相当于抠出来一个圆。啊啊,那相当于我们这呢,现在主要呢是在这啊,我们在这个上边呢,在画布上啊在呃,相当于是画或者叫绘制。啊,这个bitmap就是你最初传进来的这个bitmap它。啊,那画完以后这个是上层,这个是上层取交集,你怎么去体现这个概念,这里边我们是通过画笔来设置的。哎,画笔呢,可以设置这个图片交集的一个情况,那这个相交的情况有很多种了哈,那这个首先说怎么去设置,是通过这个叫mode。
16:03
呃,大家也可以百度去查哈,呃,X mode,然后呢,会查出来很多呃这种焦急的情况,以及呢,我们如何去设置。啊,这是第一个呢,就就可以啊。啊,你看那个C这个,看那个印象笔记也行,我这也有照例X。在这,哎,看他也行啊。这呢,一共罗列出来有16种情况。那大家你挑一挑,看看我们应该选择哪一个具体的属性啊,嗯,这里边儿提示你一下,这个蓝色的是上层。这个呢是下层。这考你这个治理啊。你跳哪个?D。
17:00
第二行第几段?第二个吧。看啊,我取的是交集嘛,咱们所以交完以后应该长的就是应该是这个样子的是吧,也也就这个这个是不是跟这个满足啊。啊,那这三个里边呢,这个呢,你看multiple multiple啊,相当于它们俩混合起来的一个颜色啊,相当这个蓝色跟这个黄色一混合,就是这个绿的了啊,我们肯定不要这样的,我们要的是上层,说了它是上层。那是不是就应该要这个呀。啊,就疼啊,那行,所以我们这时候设置的话。那在这呢,我们这不就是这个上层吗。啊,你也可以这个换一下,第二是不有好多吗?哎,那这个。啊,DST这个它表示的这不就是下层吗。那下次我们这就成了个圆了是吧,哎,咱不能弄它哈,所以我这肯定建议下用的这个啊,回头你需要的话呢,可以去选择啊,所以这呢就是做了一个呃,属性就测试这个层叠的一个方式。好,这样的话,把这个对象呢,就返回了啊,相当于我们就能够取这样的一个圆啊的一个b map了。
18:05
好,那取完以后的话呢,我们下边呢,要用一下在我们的这个me fragment里边,如果用户登录过呢,我们这叫do user do user这里边的话呢,一方面显示这个文本,另外一方面呢,通过PI卡O呢,获取这个呃,图片这个路径去下载显示到这个里边,那你下载完以后这呢,应该做个处理。所以我们在这个位置啊,添加一个方法啊,这个方法呢,叫穿错误方法。哎,方法里边需要传一个transformation,所以我们用一个。And transformation。那这样就行。在这个对象里边呢,我们需要呢,重写它的两个方法。哎,主要呢,就是针对这个这个方法来处理。诶,此时的这个S,就是我们通过这个ul下载过来的那个图片,在我们页面上来看的话呢,就是你这个图。就是我们这的这个SS啊,啊下载以后的这个内存中的。
19:02
啊B什么样对象。行,那有了这个source,我们刚才不是写了一个bit map YouTube点有这个circle map,把我们这个source呢串进来,哎,返回的是不是就是一个处理好以后的这个原形的呀。就它了啊,然后把这个圆形的话呢,我们返回。啊,返回返回呢,给谁自动的into就到这里了。这样就行啊,在这呢,需要大家注意个问题啊,这呢我们对这个原有的这个S。哎,他一定得需要做一个recycle。啊,叫回收。啊,这个资源啊。因为你这时候后来再用的就不是他了啊,所以把这个呢,需要做个回收啊,另外这有个方法叫K方法,这个方法呢,其实没啥用。那当然运行发现呢,呃,你要没啥用,你这个还不能让它是个空空的话呢,它还报错,他让我们运行一下。
20:16
好点进来。嗯,他这时候就挂了啊,挂了这个信息。在这里边游戏说这个transformation,这个key呢,Must not be no,不能是空的啊,所以这个位置呢,反正他也没用,那你就这样写一个得了。这样就可以啊,这呢我们说嗯,需要保证返回值不能为空啊,说否则报错啊。嗯,再来运行。
21:03
那就这样了。啊,这是我们圆形处理好以后的一个效果啊,但是这个处理效果的话呢,你跟。刚才这个图是不是还不太一样,就我们本身你看它那个是不是没有显示权,本身这个头像啊,显示全,它是不是到你看这个看下边这了到这了啊。你看这块呢,有点区别啊,这呢是没有进行压缩处理的时候,那下边呢,我们需要对它还得进行一个压缩处理啊,先说到这休息一下。
我来说两句