00:00
呃,因为呢,我们今天这个上午的话呢,相当于是定义了两个view啊呃,一个呢是我们这个圆形进度条round progress,另外呢是关于一个布局啊score view属于一个view group了啊,我们这呢定一个叫my view啊这两个的话呢,比较具有典型代表性,所以呢,今天我们中午分享的就是关于这个view和view的生命周期啊,那提到他们两个的话呢,就像我刚才说到的啊,涉及到是小自定义控件的啊啊所以呢,我们打开这呢,我有一个Chairman。哎,打开这个插的。诶,刚才那个崔江龙这一上来就讲到了,说关于这个自定义控件的一个问题哈,诶,那我们也可以从这引入一下,说什么是自定义控件啊,就是这些呢,都算是啊,比如说呢,呃,使用多个系统的控件实现特定的效果。啊,就是这个呢,呃,我们不一定是非得是自己去继承的了哈,就是更广泛的一个自定义控件呢,就是系统的几个控件呢空呃结合在一起啊,这个我们也可以算成一个,比如说呢,我们呃当时不知道有没有大家讲资金空间写过这个啊就这呢是一个文本框ID的test,这一个小三角,一个image view啊当我一点击它的时候呢,下边出来一个呃,泡泡window是吧。
01:17
呃,这个的话呢,整体是我们自己定义的啊,系统呢没有比如说提供一个现成这个,我们自己这样给它组合在一起啊,形成了一个效果,所以从广泛的意义上来讲,也算是自定义工间。嗯,然后呢,呃,狭义上来讲的话呢,就是我们自定义的继承于view或者是view group的子类啊,这样的一些类的话呢,都称作叫自定义控件呢,那下边为什么要自定义控件,那刚才呢,也提到了啊,就是系统空间那个风格呢,无法满足我们的需求啊,系统在固定的这呃特定那个版本下,它有时候一些比如说diallo感觉嗯比较丑是吧,或者跟你整个这个应用的这个风格呢,不太统一,哎,我们呢,就可以实现一个自定义啊。啊,这就提到软件的整体风格,在手机上呢,显示是一样的,就是为了的,就是比如在四点几上啊,它系统默认是这个五点几上是那个了啊,那我们这个应用呢,是有可能装在用户的不同的这个系统上的,所以为了整个软件的一个统一,我们自定义的。
02:15
啊,同一个控件呢,就在不同设备上显示效果不同啊,就我们刚才说的这个事儿哈,呃,上面的也是说到就是,诶我们在一个应用里边,比如主色调是蓝色的,那希望我们这个控件呢,哎,都跟这个蓝色呢,比如比较接近啊,或者跟它就对比在一起,不能这个花里胡哨的什么颜色都有啊,也不太好看啊,显得不是很专业,为了整个风格的一个统一。呃,自定义空间的原则是尽量的使用系统的自带的空间,呃,当需求无法满足的时候呢,我们才自定义空间。啊,不是说呢,我们上来以后看到一个test view感觉就很不爽啊,自己呢,还经营一个test view。是吧,那那你肯定是能用系统的,肯定用系统的啊,系统这个的话呢,比如说从优化的角度啊,还是从方便的角度啊,他都给你写好了,肯定用系统的更好啊,当然觉得不满足的时候,你再去自定义啊,没必要无限制的都去定义啊空间。
03:06
啊,常见空间的一个回顾啊,这里边一般的那个view啊,这一看来应该都比较熟悉啊,View group啊,这里边提到一些啊,刚才也提到了,说这几大布局哈,啊,这里边像呃,县内布局,相内布局,真布局。嗯,这个呢,只是说一些这个列表显示网格显示的是吧?啊还有呢,就我们说的这个表格布局table layout啊,还有一个绝对布局是吧,Absolute layout啊,其他布局,哎,FA。非view啊啊,比如说呢,像aler dialog它呢,就不是第呃继承于这个view的啊,包括progress dialog,它本身是承于aler dialog的,Menu也不是power window也不是,Tos也不是,呃这些呢,我们也会在界面中看到相应的一些效果,但是呢,它不属于view这个体系下的。啊,这个要清楚一下啊,怎么学,现在呢,就是一些具体的例子了啊,然后呢,呃,在自定义控件这里边,我们非常重要的呢,就是涉及到了关于view的生命周期方法。
04:07
啊,涉及到view的这个生命周期方法了,那首先呢,我们这里边先泛泛的去理解一下view,啊这里边儿呢,提到了一个知识点,就是view view group,以及view呢和activity的一个区别。啊,那我们按照这个顺序呢,来看一下。啊,View是什么?说view呢,是用来构建用户界面组件的一个积累。啊,翻译过来呢,叫视图,就是你能够用眼看得到的一个图是吧,俗称啊就是这样,所以呢,它是能够在界面中呈现相应的一些效果啊,那这个呢,我们把它称作是view啊,相对来讲是一个鸡肋。啊,它在屏幕上呢,是占据一个矩形区域,负责啊界面的一个绘制和事件处理。哎,从这个里边呢,我们看到这个视图,他自己呢,是。有一个绘制啊,相当于我们在生命周期里边也有所体现啊,照啊照啊啊,然后时间处理。
05:03
啊,这想表达的就是我们这个视图本身呢,就可以处理作用在它上面的这些事件啊,也是我们说这个一个button,我们一点击它,它自己呢,是可以考虑这个事件该如何处理的啊,那么我们后边呢,就需要大家再去总结一下这个关于事件处理的问题啊,今天呢,其实我们也用到了。然后呢,手机屏幕上所有能够看得见摸得着的都是view,这个呢,是比较形象的一个说法啊,当然你摸的话呢,你也摸不出来这个3D感觉是吧啊,只能说呢,比较形象点啊,你能够去操作它啊,或者你按下去的话呢,它颜色变了啊,能证明你确实是哎操作它了。哎,常见的这些view啊,这就不用多说了啊,那每一个view呢,它们不同里边呢,也有一些特定的一些属性,比如说像progress bar。啊,有一个progress max等等啊,就是具体的一些组件的话呢,我们常用的这些啊啊,其实也不用刻意的去记了,因为基本上常用的你这个属性的老师用也都记住了。
06:06
啊就够了啊,然后这个will group呢,哎,这呢是我们说从类的继承关系上来讲。Group。啊,实际上是我们说这个view的一个子类是吧。啊,他俩是这个子父类的关系啊。行,嗯,然后呢,它是各个布局的一个积累啊,它界面上呢,是不会呈现一个效果的展示的,你说诶我这个长得这个样子,它是一个什么什么的,呃,View group这你是看不到它呈现的一个效果的,呃,它呢只是决定呃此view的一个布局。相对位置到底是什么样子的?啊,这是v group它的一个存在意义啊,所以呢,这个v group里边呢,我们说哎,它一般都是会包含子view的。啊,你要不包含那没啥意义了啊,你的意义就是view构成了一个口入款都没有will啊,他也没有什么意义啊。这是我们说到这几个,嗯。
07:02
五大类这样的这个布局啊,用来控制这个s view啊,涉及到呢,就是我可以给这个s view呢,进行一个布局啊,调用它的这个量方法。行啊,这是它,这是它,嗯,常见的这个view group,这不用多说了啊,然后这个view manager view manager呢,是我们这个view呢,它其实的一个,呃,相当于它的一个负类了啊来我们可以看一下c shift t,来找一下我们这个view group。啊啊,准确说应该是个接口了啊,哎,我们发现呢,它实现了这个叫view manager啊,就是view的一个管理器啊,这个view manager里边呢,有三个方法,先删改。哎,那这三个方法呢,由于我们的view group呢,做了一个实现啊,那这呢相当于他呢就有了,或者即使他没有重写完它的具体的子类,像我们说限定布局,乡内布局等等,那他们一定是哎重写来的。
08:01
因为那些呢,对象那些类呢,都不是抽象类了啊,那既然重写了,那就意味着每一个具体的we group啊,相应布局也好,相对布局也好,他们就有这样的方法。啊,那也就是说我们这个布局里边呢,是可以添加删除或修改这样的一些视图的啊呃,为什么说view group里边能够呃包含子view呢?就是因为它实现了这个接口啊,里边包含这样的方法。嗯,而你具体的一个view啊,它是没有这样的方法的。好,然后呢,下边是关于这个view和view group啊呃,这里边提到一个点,大家去关注一下,就是我们整个手机屏幕。啊,整个这个界面有一个跟will是吧,这个跟will呢是什么?跟will应该是一个布局了,对吧,跟will是不可能是一个普通的view吧。因为你要是普通的view,你也不可能有此节点是吧,所以这个跟will呢,一定是一个view group。
09:01
那这个VIVO是一个什么类型的呢?哎,我们说是一个frame layout这个类型的。这个知道吧。说过吧,这个事情。没有啊,我看一下我这个模拟器能不能看得到啊,嗯,我现在是把这个手机给它连上了,手机连上我起一个界面啊。哎,这是我们这个刚才写的这个应用的一个界面啊,打开了。接一下这个位置。嗯,我接一下,我这好像是装在这了。SDK。这个工具用过吗?没有啊,这个工具呢,就不是在我们的这个位置哈,就是整个这个SDK呢,有个tools tools打开呢,这里边儿有个这个操作啊。
10:09
哎,就打开它就可以了,然后呢,这是我的这个手机哈。也不行吗?然后我这个模拟器吧,还看不着。这是各种遗憾。就看不着了,就。那我得开一个内置了,那等那个课间,等我下节课再开一个吧,那待会大家带着大家去看一下啊,那你先把这个结论记一下。呃,结论的话呢,就是我们这个屏幕上的这个根式图是谁呢?是我们可以通过这样的方式来获取啊,也就是说在我们这个代码里边,比如说你在这个ST里边,我们可以调get window,然后呢,还可以调get you。嗯,然后这个时候呢,返回的就是phone window的一个内部的一个,嗯,相当于一个类的对象哈,叫deck view的一个对象,这个deck view呢,就是我们整个手机屏幕上的一个跟view。
11:02
那这个跟VIVO是什么类型的呢?我们以get class,发现也不是framelo,但是我们也拿着这个对象呢去get super class再get。呃,再去打印一下,呃,发现它呢,打印出来的就是一个。啊,也就是说我们手机屏幕上这个根view呢,叫dark view,这个de view它的负类哈,是一个frame,那YIG那是不是就是frame。啊,这个我就不演示了啊,所以你把这个结论你记住就可以了。然后的话呢,我们这个在activity里边,我们在方法里边有一个叫set content view。啊,Set content view呢?呃,它里边加载了一个布局,比如我们这个it里所对应的是一个线性布局,这个线性布局它可不是我们的根布局啊。嗯,这个线性布局呢,其实它的上层呢,是一个frame。那这个呢。跟这个是一个吗。
12:01
不是一个。啊,这呢,我们没有那个图看呢,就是感觉就比较抽象了啊,就是这个out还是它的这个下一层。啊,顶层的是这个,然后呢,它下边有一个frame,这个frame呢,有一个啊ID为content的一个属性,那个content呢,是我们用这个set content view的方式呢,我们给它加载的set content view嘛,所以是它的一个属性叫content。啊,加载过来的啊行,这个呢大家要清楚,就是跟跟这个view呢是一个分。然后下边涉及到一个点,就是区别view和activity啊,View呢是屏幕上的呃,一个UI组件,Activity呢是四大组件之一,然后呢,它上面呢是可以呃对应的一个用户界面,这个界面呢,就是我们所说的这个view啊来实现的,所以RT呢是控制和管理view。啊,而真正这个显示和处理事件呢,就是这个view。啊,是这样意思啊,或者你可以形象点理解这个view呢,它有个载体,它得在哪呈现呢?是在我们这个itt上来呈现的,包括呢,我们在itt里边写一些逻辑啊,里边呢,涉及到关于它的一个处理。
13:12
啊,处理的时候让你自己去处理啊这样。啊嗯,这个我们就直接过了哈,然后下边呢,提到关于这个呃,Content view,哎,我们在T里边呢,可以去加载一个布局啊,这个content view呢,实际上是有这样的几种方式,我们用的最多的呢是这种。哎,下可能view里边呢,填一个具体的一个布局的一个ID啊这样的方式,那实际上上呢,我们还有一个方法叫下可能view这个参数呢,可以写一个view。那可以写个view呢,我们就可以通过这样的方式。哎,把这个view呢,先加载过来,其实还是我们上面这个啊,加载让它生成个view,然后呢,把这个view呢下载过来。其实上差别不大是吧。嗯,当然另外一个层面呢,就是我们可以自己在Java代码层面造一个B,然后塞过来也行。
14:01
比较简单啊,还是第一种最常用,因为第二种呢,你没有必要非得写第二种,第一种就行,而这种自己造的又更少。来抓第一种。行,下面呢,就提到我们这个VI的这个生命周期啊,也是我们说的,今天让大家重点的来分享的这个事情啊,有这样的一个过程,创建对象测量。布局,绘制事件,处理死亡。啊,这个view的话呢,在面试里边呢,也是传统的比较经典的这个问题啊,一定要会,那相应这里边儿呢,都做什么事情,有哪些相应的方法啊,需要大家去掌握的啊,创建对象这里边呢,提到了两个,一种是单参的,一种是呃,就这个啊一个参数,一个是两个的啊这个呢是我们在Java代码层面自己new的时候用,这个呢是在布局文件中用。嗯,然后这两个的话呢,哎,我们涉及到有对应的两个回调方法,一个呢叫unfinish inl啊on attached to window。
15:00
这两个方法的话呢,首先说一下,只有这种就是在布局文件中用的时候,这个跟这个都会掉。如果是你自己拗的。只会掉这个。对吧,哎,这个先明确一下啊,哎,然后的话呢,我们说这两个方法呢,我们可以去重写,那重写的目的是什么?哎,就是为了得到子六。啊得到子view,也就是说呢,当我们这个对象创建以后啊,如果你是一个group,那这个view group它创建完以后呢,我们在这里边,实际上它这个下边的这些具体的子view呢,也就相应的都创建好了。啊,我们可以通过你这个在view group里边我可以,哎,通过get view get at的方式,我就找到一个一个的这个view。啊,这个找的方式呢,我们也提到了,说就是按照你加载的一个顺序啊,你在布局文件当中先写的谁,后写的谁,然后这个顺序呢,也是按照这个顺序来的啊,依次往下on attach to window,这个呢,也可以在这里边来获取啊,啊这是关于对象的一个创建。
16:05
你看这里边还提到这个事情,说activity的这个on resume啊,执行之后才会进入后面的流程。啊,也就是说呢,只有到我们这个it,首先呢,它能是一个可见可操作了啊,哎,可操作了以后呢,然后我接着,哎,把你现在的一个view呢,往上面去摆放。啊,所以这个方法呢,还相对早一些啊。下边这个过程呢,叫做测量啊,一说到测量呢,就是主要呢,大家关注于这个方法就可以了,那在这里边我们一般的话可以做什么事情呢。哎,是不是一方面我们可以测量自己这个视图的一个宽高啊,上午我们画这个圆形进度条的时候呢,这不就哎就是这样子吗?哎,测量一下自己的这样一个宽高,呃,另外的话呢,我们是不是还可以去测量你这些子视图的一个宽高啊。啊,因为我们在这个unfin这里边呢,已经得到了子视图了,哎,去获取此视度的宽高也行啊,这里面提到一点,说测量得到的宽高不等于视图的宽高。
17:06
啊,就是我们这里边,比如说你里边有个child了哈,我通过这个child呢,叫get married he跟get he。其实你要非要是讲这个事儿的话呢,还不太一样。啊,因为get measure的hat还仅仅处在测量这个环节里,还没有真正的给你画到这个布局上,就是画到你这个整个这个温这个界面上啊,或者叫画布上啊,你只要画到这上边了。啊,时间也都加了,这个时候我们才谈说你的宽是多少,你的高是多少,我们才会去掉get get s。啊,你在测量的时候跟你这个画布目前还没有关系,那我们这时候呢,仅仅是获取测量的一个宽框,所以他俩呢不一样啊。啊,当然一般情况下这两个数值的话呢,是一样的,呃,一般重写的意义呢,就是得到当前视图或者子视图的一个宽高了啊,当然我们也可以呢,专门用来保存我们自己的一个宽高,这个我们在讲到这个流失布局的时候,我们就这样去做。
18:10
嗯。行,那下边呢,就是关于这个布局,嗯,布局这里边的话呢,这个方法我们如果重写。就是在这里边对子view进行重新布局。所以呢,一般如果你是自定义的一个view啊。不是一个group,一般这个方法我们就一般不重写了。不是一般不重写,是你就不可能重写。因为你自己这个view里边,你on out,嗯,应该定位到哪,这个一般我们是定位它的子势图,你也没有。啊,哎,这个方法呢,我们是不是经常掉啊。哎,就是决定你谁调查,那就是把谁呢,自己呢,重新指定一个上下左右。啊,就这样来用啊,它呢可以重写,这个呢是我们经常会调的啊,这里边凡是带这个on开头的都是我们,呃,要可能会重写的啊,就相当于是个回调方法了。
19:05
行,然后下边呢,提到一个绘制啊,这个绘制的话呢,我们说只有自定义view,我们才会考虑去重写这个on照啊,然后具体的就是你要画一个什么东西是吧,自己呈现的样子啊,这个呢是需要我们重写。啊,像这个text view啊,Image view啊等等,他们一定是重写这个方法了啊,那这个呢,一般就不会重写了,然后这里边提到一个概念,就我们上回用到的啊,嗯,强制重绘。啊,主线程分线程都可以,它呢只能在主线程中。原因就在于我们这个post invalid。啊,为什么它可以在分线程中呢?看一下我们上午写的,找一下我们这个home fragment在这个位置,我们用的post啊,Post你点开。到这儿了再点。然后执行到这,执行到这再点。是不是出现handle了?
20:01
哎,Handle德呢,给我们呃发了一个消息,那就相当于把它就发到主线程就行了,哎,所以呢,它就可以在分线程当中去写啊,而这个呢,没有使用汉德ler,它就必须呢自己在主线程当中才可以调。啊,这是提到叫强制重汇啊,那其实在这个布局这块呢,有一个强制重新布局,但这个一般我们不会去。啊,一般不会去调了啊,你可以直接调这个量的方法就可以了。再往下事件处理,这是我们后边呢,让大家重点来分享的一个哈,事件处理这块呢,我们安卓中的这个事件就是引用机制,有两大机制啊,一个呢叫消息机制啊,一个呢就叫事件机制。哎,那我们这里边主要提的就是这个事件机制啊,那这个事件机制里边是不是又分成两种事件。对,一个呢叫做motion event啊,一个呢叫k event啊。行,这个我就捡起了,哎,这两个的话呢,等大家在分享的时候,把这两个都要说清楚啊,尤其是这个motion疑问啊,因为这里边涉及到了这样的几个事情啊分发。
21:10
处理消费。嗯,然后呢,对应的有可能出现拦截和反拦截。这块呢,我不详细的说,等到大家分享的时候呢,把这块呢说清楚啊,嗯,这块应该说相对还是比较难的啊。难是因为其实也不难,就是因为他感觉比较绕啊,哎,所以你给大家分享的时候呢,要说清楚。死亡,嗯,RTD死了,那你也对应的也就死了,因为你是依托于RTD存在的啊,再个呢是RT不死你也可以死。那就直接呢,我把你给移除掉。那一出的话呢,就是刚才在我们这里边。啊,没有,嗯,这个给关了啊。呃,没group这里边,呃这呢,我们可以有一个艺术操作。哎,你就挂掉了啊,那流程方法来讲呢,就是on detached from window啊,这个跟我们上面的onached to window它俩正好是,哎相互呼应的。
22:07
啊,它俩是一对一啊,像这呢,就我们说这个view的整个生命周期这块呢,需要大家熟啊,要熟这个过程里边哪些方法,什么时候掉,那通常用来干什么,这个要会啊。那这就没啥,这就是一些具体的例子,这个我们当时讲课都说过啊,把这个关掉。
我来说两句