自定义View中的onMeasure,onLayout,onDraw
来源:互联网 发布:网络中的延时多少正常 编辑:程序博客网 时间:2024/05/16 11:22
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源码分析
- 自定义View的onMeasure、onLayout
- 安卓开发中自定义View之onMeasure(),onLayout(),onDraw()讲解(一)
- 安卓开发中自定义View之onMeasure(),onLayout(),onDraw()讲解(二)
- 安卓开发中自定义View之onMeasure(),onLayout(),onDraw()讲解(三)
- 自定义view中onMeasure、onLayout、onDraw、onFinishInflate、onSizeChanged方法调用时机
- onMeasure(),onLayout(),onDraw
- onMeasure,onLayout,onDraw
- onMeasure onLayout onDraw
- 关于View的onMeasure()、onSizeChanged()、onLayout()、onDraw()调用顺序
- 关于View的onMeasure()、onSizeChanged()、onLayout()、onDraw()调用顺序
- 高楼扔鸡蛋问题
- Android自定义软键盘的实现
- 翼支付门户架构之搭建SpringMvc环境
- 如何判断两个IP地址是不是在同一个网段
- linux下查看网卡速率
- 自定义View中的onMeasure,onLayout,onDraw
- EL表达式的一些基础知识
- 日语学习之新版初级标准日本语-4 部屋に机といすがあります
- 南京工商注册:“五项服务”使注册更便利
- 自动白平衡(AWB)算法---2,色温计算
- Google common.h
- ios反射
- 重签名android apk,利用robotium进行自动化测试
- Command /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clan