自定义View基础(一)View的绘制流程

      自从十月份来到这家公司,大概有三个多月没更新博客了,主要是太忙,996的工作节奏着实让人没有太多的空闲时间去整理学习,其实也不想抱怨太多,既来之则安之吧。

       公司是做股票财经类软件的,对自定义View这一块要求比较多吧。所以这一系列文章想对自定义View做一个学习总结,从绘制流程,事件分发机制,绘图,自定义ViewGroup,自定义分时K线图做一个整体的整理和学习。本篇从View的绘制流程开始整理,这些知识点是自定义View的基础。


View的绘制流程

  1. View的生命周期

    onAttachedToWindow:View onDraw方法之前调用,但只会调用一次onDetachedFromWindow:view被remove或者view的activity退回时调用

  2. ViewRoot和DecorView

    ①ViewRoot对应ViewRootImpl类,是连接WindowManager和DecorView(顶级View)的纽带。View的三大流程均是通过ViewRoot来完成的

    ②在ActivityThread中,当Activity创建时,就会将DecorView添加到Window中,同时会创建ViewRootImpl对象,并将DecorView与ViewRootImpl进行关联。

    ③View的绘制过程是从ViewRoot的performTraversals方法开始的,performTraversals方法会依次调用performMeasure,performLayout,performDraw三个方法,这三个方法分别完层DecorView的measure(决定下一层View的宽高),layout(决定下一层View的位置),draw这三大流程。接着子元素会重复父容器的三大流程


   View的绘制主要由Measure,layout,draw三大流程完成

  1. Measure过程

    (1)MeasureSpec(测量模式)三种模式:

    • EXACTLY:表示设置了精度的值,一般但childView的的宽、高为精确值或者match_parent时,ViewGroup会将childView的测量模式设置为EXACTLY

    • AT_MOST:表示子布局被限制在一个最大值内,一般当childView设置其宽、高为wrap_content时,ViewGroup会将其设置为AT_MOST;

    • UNSPECIFIED:表示子布局想要多大就多大,一般出现在AadapterView的item的heightMode中、ScrollView的childView的heightMode中,比较少见。

    (2)childView的MeasureSpec如何确定?

     ViewGroup会根据子View的宽高跟ViewGroup本身的测量模式确定子View的测量模式:
       ①当子View采用固定宽高的时候,不管父ViewGroup本身的MeasureSpec是什么,View的MeasureSpec都是EXACTLY,并且其大小遵循LayoutParams中的大小 
        
       ②当子View的宽高是match_parent时
          -如果父ViewGroup是EXACTLY精准模式,View也是EXACTLY精准模式,并且其大小是父容器的剩余空间
          -如果父ViewGroup是AT_MOST,View也是AT_MOST最大模式,并且其大小是不能超过父容器的剩余空间
           
       ③当View的宽高是wrap_content时,不管父容器的模式是精准还是最大化,子View的模式总是AT_MOST
       (即view的宽高等于当前父容器剩余的大小,并且大小不能超过父容器的剩余空间)

    (3)重写onMeasure()

    • <
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值