自定义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.pngView的绘制流程
image.pngAndroid两种坐标系
image.pngimage.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()过程结束后才能获取到;
通过视图右边的坐标减去左边的坐标计算出来的.
网友评论