自定义View中的方法onMeasure,onLayout,onDraw作用
来源:互联网 发布:网络推广员是做什么的 编辑:程序博客网 时间:2024/06/05 16:55
android中自定义View时经常会需要重写View的onMeasure(),onLayout()和onDraw()方法,下面分别介绍下这三个方法。
一、onMeasure()方法
onMeasure(int widthMeasureSpec,int heightMeasureSpec)
1、调用时间:当控件的父元素放置该控件时,用于告诉父元素该控件需要的大小。
2、传入参数:widthMeasureSpec,heightMeasureSpec。这两个传入参数由高32位和低16位组成,高32位保存的值叫specMode,可以通过MeasureSpec.getMode()获取;低16位为specSize可以由MeasureSpec.getSize()获取。这两个值是由ViewGroup中的layout_width,layout_height和padding以及View自身的layout_margin共同决定。权值weight也是尤其需要考虑的因素,有它的存在情况可能会稍微复杂点。
specMode可以取三个值:MeasureSpec.EXACTLY ,MeasureSpec.AT_MOST,MeasureSpec.UNSPECIFIED;
specMode与layout_的对应关系如下:
match_parent - MeasureSpec.EXACTLY:当layout_为match_parent或者为某一具体值的时候specMode为EXACTLY代表精确的值;
wrap_content - MeasureSpec.AT_MOST:表示能获得的最大尺寸;
当无法确定尺寸的时候则是 MeasureSpec.UNSPECIFIED,这时候specSize会为最小值(即0);
3、可以在onMeasure()中来计算控件的尺寸,然后根据setMeasuredDimension(mWidth,mHeight);方法来告诉父控件此控件需要的尺寸,onMeasure()方法中必须调用此方法。
4、值得注意的是:
1)specSize和传入setMeasuredDimension()方法中的值的单位都是px(dp*density就是px)。
2)match_parent并不是填充整个父容器,而是在不覆盖已经加入父容器的控件的情况下填充父容器。
二、onLayout()方法
onLayout(boolean changed, int left, int top,int right,int bottom);
父容器的onLayout()调用子类的onLayout()来确定子view在viewGroup中的位置;
如:onLayout(10,10,100,100)表示子容器在父容器中(10,10)位置显示,长、宽都是90。结合onMeasure()方法使用可以确定子view的布局。
三、onDraw()方法
onDraw(Canvas canvas)
自定义view的关键方法,用于绘制界面,可以重写此方法以绘制自定义View。
- 自定义View中的方法onMeasure,onLayout,onDraw作用
- 自定义View中的onMeasure,onLayout,onDraw
- 自定义View中的onMeasure,onLayout,onDraw
- 自定义View(三) 之 onMeasure() onLayout() onDraw()
- 自定义View之onMeasure(),onLayout(),onDraw()
- 自定义view之onMeasure,onLayout,onDraw
- view的onlayout,onmeasure,ondraw
- 自定义view中onMeasure、onLayout、onDraw、onFinishInflate、onSizeChanged方法调用时机
- View总结(1)---onMeasure(),onLayout(),onDraw()方法
- view的onMeasure,onLayout,onDraw源码分析
- onMeasure(),onLayout(),onDraw(),invalidate()方法详解
- 自定义View的onMeasure、onLayout
- 安卓开发中自定义View之onMeasure(),onLayout(),onDraw()讲解(一)
- 安卓开发中自定义View之onMeasure(),onLayout(),onDraw()讲解(二)
- 安卓开发中自定义View之onMeasure(),onLayout(),onDraw()讲解(三)
- onMeasure(),onLayout(),onDraw
- onMeasure,onLayout,onDraw
- onMeasure onLayout onDraw
- 参数表单下拉数据集多选联动问题及解决办法
- Android 项目开发必备-BaseActivity与Fragment的建立
- 【Scikit-Learn 中文文档】把它们放在一起
- 第三周java作业
- java-client新增查找元素方式iOSNsPredicate
- 自定义View中的方法onMeasure,onLayout,onDraw作用
- 一个链表中包含环,请找出该链表的环的入口结点。
- 12月12日培训日记
- Python checkio "Ghosts age"解决方案
- 【Scikit-Learn 中文文档】寻求帮助
- linux上传文件
- 一次树莓派wifi 调试的过程
- capstone训练营2017-12-12
- UIButton 的使用