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

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这个标记位

    原文作者:heiheiwanne
    原文地址: https://www.jianshu.com/p/bfd5a560a8c5
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞