自定义View理论

自定义View类型

1. 自定义View

在没有现成的View,需要自己实现的时候,就使用自定义View,一般继承自View,SurfaceView或其他的View


image.png

2. 自定义ViewGroup

自定义ViewGroup一般是利用现有的组件根据特定的布局方式来组成新的组件,大多继承自ViewGroup或各种Layout


image.png

自定义View流程

image.png

所以,自定义View任督二脉就在于此:
自定义View主要是实现 onMeasure + onDraw
自定义ViewGroup主要是实现onMeasure + onLayout

View的层级结构

image.png

View的绘制流程

image.png

Android两种坐标系

image.png

image.png

相关知识点:

1.LayoutParams 是什么?与MeasureSpec有关系吗?
前者:是存储xml中配置参数的
后者:是View的一个内部类
存在一种转化关系
2.MeasureSpec 是什么?
MeasureSpec是View中的内部类,基本都是二进制运算。由于int是32位的,用高两位表示mode,低30位表示size,MODE_SHIFT = 30的作用是移位
UNSPECIFIED:不对View大小做限制,系统使用
EXACTLY:确切的大小,如:100dp
AT_MOST:大小不可超过某数值,如:matchParent, 最大不能超过你爸爸

3.为什么要MeasureSpec?
为了将自定义View中子View xml中配置的宽高参数表达为Java代码


image.png
image.png

4.getMeasureWidth与getWidth的区别?
前者:
在measure()过程结束后就可以获取到对应的值;
通过setMeasuredDimension()方法来进行设置的.
后者:
在layout()过程结束后才能获取到;
通过视图右边的坐标减去左边的坐标计算出来的.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。