安卓面试之自定义View流程及原理

引言

自定义View的流程及知识点比较多,所以直接整理了学的博客内容,多阅读整理学习

1.安卓自定义View流程原理

自定义View的实现方式有以下几种

类型定义
自定义组合控件多个控件组合成为一个新的控件,方便多处复用
继承系统View控件继承自TextView等系统控件,在系统控件的基础功能上进行扩展
继承View不复用系统控件逻辑,继承View进行功能定义
继承系统ViewGroup继承自LinearLayout等系统控件,在系统控件的基础功能上进行扩展
继承ViewViewGroup不复用系统控件逻辑,继承ViewGroup进行功能定义

View的绘制基本由measure()、layout()、draw()这个三个函数完成

函数作用相关方法
measure()测量View的宽高measure(),setMeasuredDimension(),onMeasure()
layout()计算当前View以及子View的位置layout(),onLayout(),setFrame()
draw()视图的绘制工作draw(),onDraw()

View坐标系内部视图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ICYq1BSM-1638794173424)(../../pic/10294405-4ca426e6a92db696.png)]

View的绘制基本由measure()、layout()、draw()这个三个函数完成

函数作用相关方法
measure()测量View的宽高measure(),setMeasuredDimension(),onMeasure()
layout()计算当前View以及子View的位置layout(),onLayout(),setFrame()
draw()视图的绘制工作draw(),onDraw()

对于View来说,MeasureSpec的 mode 和 Size 有如下意义

模式意义对应
EXACTLY精准模式,View需要一个精确值,这个值即为MeasureSpec当中的Sizematch_parent
AT_MOST最大模式,View的尺寸有一个最大值,View不可以超过MeasureSpec当中的Size值wrap_content
UNSPECIFIED无限制,View对尺寸没有任何限制,View设置为多大就应当为多大一般系统内部使用

2. View 的绘制机制吗,能说一下吗?

requestLayout和invalidate方法
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-G3nTcM07-1638793370327)(../../pic/image-20211126172413618.png)]

3.一个View被添加后第一个回调的方法是哪个(onAttacthToWindow)

浅谈自定义View中一些常用的回调方法

4. 为什么View.post能拿到view的宽高

onResumeview 才会被添加在window内并且执行view的测量布局绘制 这就是为什么在onCreate()时获取到view宽高会是0的原因,因为那时view都没有添加进window呢!!!
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UEXPhOwQ-1638793370328)(../../pic/image-20211129103433243.png)]

5.刷新机制

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-65uEzkcD-1638793370328)(../../pic/image-20211129110403264.png)]

6.LayoutInflater#inflate 的 attrachToParent true 是什么意思

inflate(int resource, ViewGroup root, boolean attachToRoot)
  1. 如果root为null,attachToRoot将失去作用,设置任何值都没有意义。

  2. 如果root不为null,attachToRoot设为true,则会给加载的布局文件的指定一个父布局,即root。

  3. 如果root不为null,attachToRoot设为false,则会将布局文件最外层的所有layout属性进行设置,当该view被添加到父view当中时,这些layout属性会自动生效。

  4. 在不设置attachToRoot参数的情况下,如果root不为null,attachToRoot参数默认为true。

7.theme 和 style 有什么区别,优先级

8.你知道哪些Layout,ConstraintLayout 的特点是什么

  • LinearLayout(线性布局),垂直或者水平方向排列

  • RelativeLayout(相对布局),可设置相对位置

  • TableLayout(表格布局) ,适用于多行多咯额

  • FrameLayout(帧布局),将所有的子元素放在整个界面的左上角,后面的子元素直接覆盖前面的子元素

  • AbsoluteLayout(绝对布局),

  • GridLayout(网格布局)

  • ConstraintLayout (约束布局)

9.View的第一次绘制是怎么调到的,View的后续绘制是怎么调用的

10.讲一些自己做过的自定义VIew的例子

11.FlowLayout怎么实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值