美文网首页
onLayout, onMeasure, onDraw方法

onLayout, onMeasure, onDraw方法

作者: 我有一口小白牙 | 来源:发表于2017-03-06 13:56 被阅读331次

    重载onMeasure(),onLayout(),onDraw()三个函数构建了自定义View的外观形象。再加上onTouchEvent()等重载视图的行为,可以构建任何我们需要的可感知到的自定义View。

    onMeasure() 决定了view本身大小多少
    onLayout()决定了View在ViewGroup中的位置如何
    onDraw()决定了如何绘制这个View。

    执行顺序: 先测量--> 在排版 --> 在画(自己理解的, 如果不对, 欢迎评论指出-_-)

    onMeasure()
    EXACTLY:一般是设置了明确的值或者是MATCH_PARENT
    AT_MOST:表示子布局限制在一个最大值内,一般为WARP_CONTENT
    UNSPECIFIED:表示子布局想要多大就多大,很少使用

    Paste_Image.png

    这里借用鸿阳大哥的一张图片 更能理解onMeasure方法拿到的宽高

    onLayout(;)
    该方法在ViewGroup中定义是抽象函数,继承该类必须实现onLayout方法,而ViewGroup的onMeasure并非必须重写的。View的放置都是根据一个矩形空间放置的,onLayout传下来的l,t,r,b分别是放置父控件的矩形可用空间(除去margin和padding的空间)的左上角的left、top以及右下角right、bottom值。

    Paste_Image.png Paste_Image.png

    该方法是View的放置方法,在View类实现。调用该方法需要传入放置View的矩形空间左上角left、top值和右下角right、bottom值。这四个值是相对于父控件而言的。例如传入的是(10, 10, 100, 100),则该View在距离父控件的左上角位置(10, 10)处显示,显示的大小是宽高是90(参数r,b是相对左上角的),这有点像绝对布局。

    onDraw(), 这个方法就是拿canvas画布和Paint画笔来drawview的, 这个里面画笔画布有好些方法,之后用到了就一条一条的更新......-_-

    相关文章

      网友评论

          本文标题:onLayout, onMeasure, onDraw方法

          本文链接:https://www.haomeiwen.com/subject/paaygttx.html