美文网首页
自定义view流程

自定义view流程

作者: couriravant | 来源:发表于2020-01-06 16:26 被阅读0次

    自定义view的基本流程

    1、 明确需求,确定你想实现的效果
    2、确定是使用组合控件的形式还是全新自定义的形式,组合控件即使用多个系统控件来合成一个新控件,你比如titilebar,这种形式相对简单,参考
    3、如果是完全自定义一个view的话,你首先需要考虑继承哪个类,是View呢,还是ImageView等子类。
    4、根据需要去复写View#onDraw、View#onMeasure、View#onLayout方法
    5.根据需要去复写dispatchTouchEvent、onTouchEvent方法
    6、根据需要为你的自定义view提供自定义属性,即编写attr.xml,然后在代码中通过TypedArray等类获取到自定义属性值
    7、需要处理滑动冲突、像素转换等问题
    谈谈View的绘制流程

    谈谈View的绘制流程 《Android初级、中级面试题收录(2)》

    measure()方法,layout(),draw()三个方法主要存放了一些标识符,来判断每个View是否需要再重新测量,布局或者绘制,主要的绘制过程还是在onMeasure,onLayout,onDraw这个三个方法中

    • 1.onMesarue() 为整个View树计算实际的大小,即设置实际的高(对应属性:mMeasuredHeight)和宽(对应属性: mMeasureWidth),每个View的控件的实际宽高都是由父视图和本身视图决定的。
    • 2.onLayout() 为将整个根据子视图的大小以及布局参数将View树放到合适的位置上。
    • 3.onDraw() 开始绘制图像,绘制的流程如下
      • 首先绘制该View的背景
      • 调用onDraw()方法绘制视图本身 (每个View都需要重载该方法,ViewGroup不需要实现该方法)
      • 如果该View是ViewGroup,调用dispatchDraw ()方法绘制子视图
        绘制滚动条

    自定义View执行invalidate()方法,为什么有时候不会回调onDraw()

    自定义一个view时,重写onDraw。调用view.invalidate(),会触发onDraw和computeScroll()。前提是该view被附加在当前窗口.
    view.postInvalidate(); //是在非UI线程上调用的
    自定义一个ViewGroup,重写onDraw。onDraw可能不会被调用,原因是需要先设置一个背景(颜色或图)。表示这个group有东西需要绘制了,才会触发draw,之后是onDraw。因此,一般直接重写dispatchDraw来绘制viewGroup.自定义一个ViewGroup,dispatchDraw会调用drawChild.

    相关文章

      网友评论

          本文标题:自定义view流程

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