- 为什么要做?
普通的开发中,自定View的工作相对较少的,与其造轮子使用,现有的View(Widget,布局)一般都能满足我们日常的使用。但掌握造轮子的原理,对我们使用或改装轮子还是很有帮助。
- 怎么做?
一个无交互的View,包括测量,布局,绘制。
对应View的3个回调方法:
//测量当前View以及其内容(子View)
//作为约定,在重写该方法之后,需要确定mMeasureWidth, mMeasureHeight
onMeasure(int widthMeasureSpec, int heightMeasureSpec)
//如何放置子View,即确定子View的位置
void onLayout(boolean changed, int left, int top, int right, int bottom)
//在本视图在绘制什么
void onDraw(Canvas canvas)
三个步骤,并不是都要实现的。
比如一个Framelayout
,作为承载View的容器,它不用绘制什么,仅仅是做好怎么放置子View的工作既可, 实现onMeasure()
, onLayout()
方法。
而一个ImageView
,用来展示一个图片,它的主要职责是确定好自己的大小以及如何绘制自身,需要实现onMeasure()
, onLayout()