美文网首页Android自定义View
自定义View--View的Layout/ondraw 过程

自定义View--View的Layout/ondraw 过程

作者: heiheiwanne | 来源:发表于2016-08-30 12:38 被阅读54次

    layout主要是设置view的4个坐标

    setChildFrame(left,top,right,bottom);

    getMeasuredHeight() 和getWidth() 区别:
     public final int getWidth(){
      return mRight - mLeft;
    }
      public final int getHeight(){
      return mBottom - mTop;
    }
    

    在View的默认实现中,View的测量宽/高和最终的宽哥是相等的,只不过测量宽高形成于View的Mearsure过程,而最终宽高是形成于View的layout过程,即两者的赋值时机不同,测量宽高的赋值时机稍微早一些,因此,在日常开发中,我可以认为View的测量宽高跟最终宽高相同,但是也有例外,例如如下:

    public void layout(int l, int t , int r , int b ){
      super.layput(l,t+100,r+100,b ); 
    }
    

    view宽高

    getSuggestedMinimumWidth 中: 如果View没有设置北京,那么View的宽高几位mMinWidth,即android:minWidth属性。这个属性不如不指定默认为0 ,如果View指定了北京,view的宽高为max(mMinWidth,mBackground.getMinimumWidth())

    draw过程:

    • 绘制背景background.draw(canvas)
    • 绘制自己(onDraw)
    • 绘制children (dispatchDraw)
    • 绘制装饰(onDrawScrollBars)

    View有一个特殊的方法setWillNotDraw,
    如果一个View不需要绘制任何内容,那么设置这个标记为true之后,系统会进行相应的优化。默认情况下,View没有启用这个优化标记位,但是ViewGroup会默认启用这个优化标记为。这个标记为,对实际开发的意义是:当我们的自定义控件继承于ViewGroup并且本身不具备绘制功能是,就可以开启这个标记为,从而便于系统后续的优化。当然,明确指导一个ViewGroup 需要通过onDraw来绘制内容时,我们需要显示的关闭WILL_NOT_DRAW这个标记位

    相关文章

      网友评论

        本文标题:自定义View--View的Layout/ondraw 过程

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