关于getMeasureHeight和自定义view

来源:互联网 发布:最强淘宝系统txt下载 编辑:程序博客网 时间:2024/05/10 07:30

构造函数: 一个参数用在Activity里 两个参数用在xml里用

自定义view的填充

加载图片,作为背景或者资源

Anzhoid中View的绘制流程: measure—>layout—->draw 方法由父view调用
测量 布局 绘制

mesure: 测量宽高

如果ViewGroup ,onMesure会调用子View的mesure方法

layout:定义自己的位置,传左上右下坐标 ,onLayout用于计算view的子View的位置

1.draw方法 画自己背景, 2.onDraw画内容 3.调用子节点的view方法画子节点view

总之: 重写onDraw方法: 设定控件样式
onMesure方法:设定样式 大小
如果控件有子View,再重写onLayout方法,设定子view的布局

参数是大小约束

invaidate() 刷新当前界面,触发onDraw()

我们一定会通过setContentView方法将我们要展示的界面传入该方法,该方法会讲我们界面通过addView追加到id为content的一个FrameLayout(ViewGroup)中,然后addView方法中通过调运invalidate(true)去通知触发ViewRootImpl类的performTraversals()方法,至此递归绘制我们自定义的所有布局。

getMesureHeight 是里面返回的是成员变量,而该成员变量赋值是在setMeasuredDimensionRaw(int measuredWidth, int measuredHeight)方法中
方法调用是在setMeasuredDimension(int measuredWidth, int measuredHeight)中,而此方法是protected的,所以继承View的子类可重写此方法来定义getMesureHeight的值;
否则,就需要调用onMesure方法,因为View中就是在onMesure方法中调用的setMeasuredDimension;

而getHeight是返回的 mBottom - mTop;这两个成员变量赋值是在layout方法调用时赋值的,所以在设定布局后 getHeight就有值了。

调用layout方法改变view的布局,可以使getHeight的值发生变化,但是不会改变getMeasureHeight的值

0 0