美文网首页
Android view架构

Android view架构

作者: xbase | 来源:发表于2016-05-18 16:22 被阅读63次
    view system.png

    view测量与绘制

    view的测量
    MeasureSpec
    定义:由SpecMode(int)于SpecSize(int)打包成一个int值(避免过多的对象内存分配)。它是一个32位(4字节)的int值,高2位是specMode(测量模式),低30位是 specSize(测量的大小)。
    功能:很大程度决定一个view的尺寸规格。

    SpecMode
    定义:测量模式(分三种)
    1.EXACTLY:layout_width或者layout_height为具体数值或者match_parent时,使用这种模式,此时的view为SpecSize所指定的大小。
    2.AT_MOST:layout_width或者layout_height为wrap_content时,父容器给出了测量大小SpecSize,但是具体大小还是要根据子控件内容来调控(只要不超过父控件测量的最大尺寸即可)。
    3.UNSPECIFIED:
    父容器不指定大小,一般用于系统内部的测量。

    onMeasure
    重写onMeasure( )方法需要调用setMeasureDimension最终将测量后的值设置上。

    ViewGroup的测量
    通常需要重写onLayout方法确认位置,一般不需要绘制(onDraw),但是会调用dispatchDraw()来绘制其子view。
    注:无论是测量还是布局位置,还是绘制,viewGroup都是遍历子view,获取每一个子view的数据(onMeasure和onLayout)或调用子view的方法(onDraw)。

    View的绘制
    onDraw:
    1.canvas:
    装载画布:Canvas canvas = new Canvas(bitmap);
    canvas与bitmap有关联绘制操作都是作用在这个bitmap上的。

     2.自定义控件:
          View中重要的回调方法:
               onFinishInflate():从XML加载组件后调用。
               onSizeChanged():组件大小变化时回调。
               onMeasure():需要测量view大小时回调。
               onLayout():确定显示位置时回调。
               onTouchEvent():监听触摸时间回调。
          三种自定义控件的方法
               1.对现有控件进行拓展
               2.通过组合的方式实现新的控件
               3.重写view来实现全新的控件
    

    事件拦截机制:
    ViewGroup:dispatchtouchEvent —> onInterceptTouchEvent —>onTouchEvent
    view: dispatchtouchEvent —>onTouchEvent
    注:这三个方法的返回值: true-不传递 false-传递

    相关文章

      网友评论

          本文标题:Android view架构

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