题外话
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在IT学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多程序员朋友无法获得正确的资料得到学习提升,故此将并将重要的Android进阶资料包括自定义view、性能优化、MVC与MVP与MVVM三大框架的区别、NDK技术、阿里面试题精编汇总、常见源码分析等学习资料。
【Android思维脑图(技能树)】
知识不体系?这里还有整理出来的Android进阶学习的思维脑图,给大家参考一个方向。
希望我能够用我的力量帮助更多迷茫、困惑的朋友们,帮助大家在IT道路上学习和发展~
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
普通遮罩
可以设置组件内一个图片或者图形作为组件的遮罩。
当使用图形(Graph)作为遮罩时,有图形的区域内容可见,例如,一个圆形,则圆形区域内可见,其他区域不可见。
当使用图片作为遮罩时,图片内透明度为0的像素对应区域的内容不可见,反之可见。超出图片区域的内容不可见。
反向遮罩(挖洞)
效果和正常遮罩相反,也就是可见的区域变不可见,不可见的区域变可见。
使用图形(Graph)作为遮罩时,有图形的区域内容不可见,例如,一个圆形,则圆形区域内不可见,其他区域可见。
使用图片(Image)作为遮罩时,图片内透明度为0的像素对应区域的内容可见,反之不可见。超出图片区域的内容可见。
扩展
这个功能就相当有意思了,刚才我们说了,中央操作区也是一个组件,一个组件就相当于一个页面,一般都是只有一个主页面,当你的页面复杂或者想要分开管理的时候可以创建多个组件,然后放到一个组件里,将这个组将当成主页面。当某个组件(页面)复用性高的时候,这种方法很有用。
Android里面布局代码过多的时候,通常都会提炼出一个布局,或者复用性较高的布局提炼出来(比如APP的标题栏复用很高),这样后续其他布局使用的时候直接使用include关键字直接引入布局,相当便利。
当你选择扩展为“按钮”的时候,会发什么效果?
修改保存后妥妥的发现组件的图标变成了按钮的图标;
这时候我就产生疑问了:难道按钮进度条这些都是用组件封装的?
我选择不同的扩展,保存后发现组件的图标会对应修改,表现出的效果相当明显了
-
按钮/标签/进度条/下拉框等功能都是组件修改封装而来
-
组件就相当于基类,你想要实现其他功能,可以在组件上进行修改封装,之后在主组件(主布局)中使用
-
元件包含基础元件/组合型元件/特殊元件,是官方已经封装好的控件,上面元件有分类,组件就包含元件里面的组合型元件,组件还可以凭你的想象自由组合成新控件
滚动容器
对组件或者列表设置了“溢出处理”为“水平滚动”、“垂直滚动”,“自由滚动”后,组件或者列表即成为滚动容器。点击“溢出处理”旁边的按钮,可以设置详细的滚动的相关属性。
-
触摸滚动效果 是否允许用户直接拖拽滚动区域内的内容。一般在移动平台上使用,PC上较少,PC上一般需要拖动滚动条,或使用鼠标滚轮。
-
滚动条组件 设置滚动条资源。一般不需要设置,全局有一个设置,在主菜单“文件->项目属性->默认值”里。如果你要使用不同于全局设置的滚动条资源,那么在这里设置。
-
下拉/上拉刷新组件 设置上拉刷新或下拉刷新时需要显示的组件。一般是你封装好的组件
-
页面模式 以视口大小为页面大小,每次滚动的距离是一页。一般在移动平台上使用,PC上较少,拖动滚动条进行滚动操作与这个模式冲突。
-
禁用裁剪边缘 一般情况下,视口不包括边缘设置的部分,也即是容器设置四周的留空部分也会被裁剪。如果需要,可以勾选这个选项,使容器四周的留空部分不被裁剪。
-
浮动显示 勾选后,滚动条不占据视口的位置,而是直接覆盖在视口上面。例如一个适用于手机的滚动条,它是细条且半透明的,只在滚动时才显示出来,用于提示滚动位置。那么我们把它设置为“浮动”,这样就不会挤占视口的显示空间。
控制器-重点
FairyGUI的核心功能之一,提供了几个需求支持:
-
分页 一个组件可以由多个页面组成。
-
按钮状态 按钮通常有按下、鼠标悬浮等多个状态,我们可以利用控制器为每个状态安排不同的显示内容。
-
属性变化 利用控制器,我们可以使元件具有多个不同的形态,并且可以方便地切换。
每个组件可以创建多个控制器,且互不影响
在组件中点击添加控制器会跳出创建框
名称 为控制器名称,同一个组件内的不要同名
备注名 帮助你理解的注释名,会和下方的导出为组件属性联合使用,勾选导出为组件属性,当你将这个组件拖动到其他的组件上时,右侧属性区会显示
页面 你可以理解成状态,既然是控制器,就要控制出效果,比如按钮(滑过/点击/抬起等状态),设置不同的动作效果
你可以单独新建按按钮看看,按钮的上方就有一个默认名为button的控制器,有4个状态(页面)
属性控制 创建好控制器后,想要使用她,你选中一个元件,在右侧属性栏会有“属性控制”面板,隔这选择即可。她有显示/位置/大小/颜色/外观/动画/文本等控制。
她还可以实现联动效果:
-
与按钮联动,当点击不同按钮后,跳转不同页面
-
与列表联动,就像Android的列表一样点击一个item显示出对应索引的页面
-
与下拉框联动,效果同上
具体效果我们会在后续的实际案例中学学习
关联系统
不管是前端还是移动端或者PC端,应该都有这种相对布局体系。
比如移动端的相对布局(RelativeLayout)
FairyGUI任何元件可以互相关联,在右侧有关联选项,可以实现布局自适应,对话框自适应,动态变化的内容等。
比如:玩游戏的时候有全屏或者小屏的时候,界面大小修改后UI布局仍然保持的相当好,想想当年天龙八部窗口化UI布局就是这种机制。
按钮和下拉框
常用的基础组件,传统UI框架中的RadioButton、Checkbox、List Item等,在FairyGUI里通通都是按钮。
这里注意下要想改变按钮不同状态的效果,需要先在右侧属性控制中选择控制器
下拉框的创建已经很简单了
提前切好图,按照三部曲即可创建出来,创建好后会有三个文件
Item是下拉框内容item,双击进去后还可以自定义里面的内容
Popup是列表控件,同样可以双击进去自定义
除了在这编辑,列表需求多数都是请求自动变化的,FairyGUI同样支持代码中设置item集合内容,和传统集合一样,要想访问集合中的item通过索引即可从0开始。有一点不同的就是上图的“值”(索引),你不写的话默认从0开始。当你修改后就需要索引值就是你修改的。比如上图,我如果没修改访问叮叮当1 就是getIndex(0),当时我把值修改为1了,访问叮叮当就是getIndex(1)
还有更多按钮详情(状态分析普通按钮selected属性无效,单选按钮组的多个实现普通按钮方式 控制器+单选按钮连接方式)讲解在……,我还没上传,回头小空发布后更新出来链接。
进度条/滑动条/滚动条
进度条
可以改变元件的宽度/高度/填充比例,分为横向和纵向,还有正向和反向;创建也很简单,一个进度条背景,一个伸缩条即可。
如何显示进度条当前进度?
双击进入进度条,添加个文本控件,然后名称改为“title”,要想和进度条最右侧实时跟随移动,设置关联即可。
如何实现带有跟随动画的进度条?
细心的朋友发现了,还有个小狐狸跟随进度条,平时玩游戏切换场景的时候经常看到进度条不是单调的横线,还有些小动画跟随,增强灵动性。
这个实现和上面的文本添加类似,区别在于你要想拖入动画的话,可以在编辑进度条的时候增加个装载器,装载器放入动画文件,想要和进度条进度试试跟随的话,再设置小狐狸和进度条的伸缩条的关联设置为右右关联
如何监听进度条?
进度条最大的作用就是和程序相结合,用于加载中,流程进度节点等,所以我们要能修改和监听进度条
滑动条
她和进度条就像双胞胎一样相似,但是她多出个按钮让用户自己拖动改变进度值。
创建也很简单点击资源->新建滑动条按照提示添加即可
想要自定义她的样式也是可以的。
滚动条
在FairyGUI中,滚动条是可以随心设计的。滚动容器和滚动条是独立的,也就是说,即使没有滚动条,滚动容器也能完成滚动的功能。
她的创建同样是点击主菜单“资源”->“新建滚动条”,然后按照向导的提示一步步完成即可。
列表-重点
这是个特殊的扩展,应用场景也挺广,比如内容展示,邮箱,若项目时教学类的项目,少不了各种题目各种列表。
点击侧工具栏的 按钮生成一个列表。上面说下拉框的时候也借助了列表。
列表属性丰富多彩
-
渲染顺序 定义item的显示顺序与它的列表中的顺序的关系。
-
选择模式 支持四种选择模式:无,单选,多选(使用shift键),多选(单击选择)。item要参与到单选有一个前提,是必须为单选按钮,如果不是单选按钮,则不会参与到选择模式中。单选是指同一时间只能有一个item被选中;多选则允许有多个,多选的操作方式有两种,一种是使用shift键进行多选,不过这需要键盘的支持,不适合移动设备;另一种是每个item单击即选中,再单击就取消选中的方式,不需要键盘的支持。
-
选择控制 可以绑定一个控制器。当列表发生翻页滚动时(溢出处理必须为三种滚动之一,滚动必须勾选为页面模式),控制器也同时跳转到相同索引(页码)的页面。反之亦然,如果控制器跳转到某个页面,那么列表也同时滚动到相同索引(页码)的页面。
-
项目资源 设置列表默认使用的item类型,也就是item样式
-
编辑列表数据 除了设置固定的数据外,代码中还支持动态设置数据内容
当你对列表增删改后,列表是自动排列和刷新的,不需要调用任何API。自动排列时会根据列表的布局设置item的坐标、大小和深度,所以不要自行设置item的位置,也不要设置sortingOrder尝试去控制item的深度。除了一个例外,垂直布局的列表只会自动设置item的y坐标,如果你需要item有一个水平位移的效果,你仍然可以修改item的x值。水平布局的也是一样道理。
在实际应用中,列表的内容通常被频繁的更新。典型的用法就是当接收到后台数据时,将列表清空,然后再重新添加所有项目。如果每次都创建和销毁UI对象,将消耗很大的CPU和内存。因此,GList内建了对象池。
注意,不管是添加合适移除都要使用对应的对象池方法,不要搞什么AddChild添加RemoveChildrenToPool来清除,这明显不一致,会导致对象池不断增大,造成内存溢出。
更多详细建议看官方文档
树
她是列表的特殊个例,实现的功能为类似手机里面的文件夹列表,具有层级关系。
她的创建仍然是先创建列表,然后列表右侧有激活树视图的勾选,勾选后在编辑内容时,就会增加个层级选项。
弹出菜单和窗口
弹出菜单
弹出界面可以说很常见了,这些组件会在用户点击空白地方的时候自动消失,Android里面经常用到。
点击“资源->新建弹出菜单…”,然后根据向导完成。菜单组件里的关键元素是命名为list的列表组件,列表的溢出处理模式应该选择为可见,因为一般来说,菜单都是显示全部item的,不需要滚动。
创建完成后在Unity中用代码进行管理
UIConfig.popupMenu 设置全局菜单资源
GRoot.inst.ShowPopup 弹出组件,可以指定弹出位置在哪个下方
PopupMenu 菜单类,管理弹出菜单
窗口
窗口花样百出,可以设置任意组件作为她的显示内容,且窗口支持拖动。
窗口样式内容你需要在FairyGUI中提前编辑好,制作好后,需要在Unity中用代码进行管理。
Window win = new Window();
GRoot里提供了一些窗口管理的常用API。
-
BringToFront 把窗口提到所有窗口的最前面。
-
CloseAllWindows 隐藏所有窗口。注意不是销毁。
-
CloseAllExceptModals 隐藏所有非模态窗口。
-
GetTopWindow 返回当前显示在最上面的窗口。
-
hasModalWindow 当前是否有模态窗口在显示。
动效-重点
又是一个重点,FairyGUi除了静态UI外,动效UI做起来也很轻松
在上面讲编译器主页面的时候就说过了动效。更多图文并茂参考官方文档。
适配
做过Android开发的都知道,适配是个体力活,一分钟开发三分钟适配,即使开始经验充足或者使用了今日头条的适配,后续仍然可能有需要适配的。
FairyGUI为手游提供了自动适应各个设备分辨率的UI策略。选择一个设计分辨率的图片(通常为全屏界面)来进行开发,运行的时候会根据设备将UI界面经过缩放投到屏幕上。
有一个很有意思的机制:假如整体需要放大两倍的话,一个窗口为400*400的,投射到屏幕上是800*800放大后的,但是你用代码读取窗口的宽高时,仍然是400*400且坐标也不变化。
除了等比的缩放,有一点就得需要注意-全屏,现在有的全面屏手机,高度贼拉长,有的高度正常,大部分手机宽度基本一致,这就导致宽高比不一样,就需要有所调整了:
如果你使用的是UIPanel,那么在Inspector上设置Fit Screen为Fit Size就可以了
多国语言
三部曲
最后
今天关于面试的分享就到这里,还是那句话,有些东西你不仅要懂,而且要能够很好地表达出来,能够让面试官认可你的理解,例如Handler机制,这个是面试必问之题。有些晦涩的点,或许它只活在面试当中,实际工作当中你压根不会用到它,但是你要知道它是什么东西。
最后在这里小编分享一份自己收录整理上述技术体系图相关的几十套腾讯、头条、阿里、美团等公司19年的面试题,把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。
还有 高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料 帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。
【Android核心高级技术PDF文档,BAT大厂面试真题解析】
【算法合集】
【延伸Android必备知识点】
【Android部分高级架构视频学习资源】
**Android精讲视频领取学习后更加是如虎添翼!**进军BATJ大厂等(备战)!现在都说互联网寒冬,其实无非就是你上错了车,且穿的少(技能),要是你上对车,自身技术能力够强,公司换掉的代价大,怎么可能会被裁掉,都是淘汰末端的业务Curd而已!现如今市场上初级程序员泛滥,这套教程针对Android开发工程师1-6年的人员、正处于瓶颈期,想要年后突破自己涨薪的,进阶Android中高级、架构师对你更是如鱼得水,赶快领取吧!
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
64)]
【延伸Android必备知识点】
[外链图片转存中…(img-i2ZpXP97-1715750425165)]
【Android部分高级架构视频学习资源】
**Android精讲视频领取学习后更加是如虎添翼!**进军BATJ大厂等(备战)!现在都说互联网寒冬,其实无非就是你上错了车,且穿的少(技能),要是你上对车,自身技术能力够强,公司换掉的代价大,怎么可能会被裁掉,都是淘汰末端的业务Curd而已!现如今市场上初级程序员泛滥,这套教程针对Android开发工程师1-6年的人员、正处于瓶颈期,想要年后突破自己涨薪的,进阶Android中高级、架构师对你更是如鱼得水,赶快领取吧!
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!