View中:

public void draw(Canvas canvas) {

/*

1. Draw the background   绘制背景

2. If necessary, save the canvas' layers to prepare for fading  如有必要,颜色渐变淡之前保存画布层(即锁定原有的画布内容)

3. Draw view's content  绘制view的内容

4. Draw children    绘制子view

5. If necessary, draw the fading edges and restore layers   如有必要,绘制颜色渐变淡的边框,并恢复画布(即画布改变的内容附加到原有内容上)

6. Draw decorations (scrollbars for instance)   绘制装饰,比如滚动条

*/

   ...

   if (!dirtyOpaque) {

       drawBackground(canvas); //背景绘制

   }

   // skip step 2 & 5 if possible (common case) 通常情况跳过第2和第5步

   ...

   if (!dirtyOpaque) onDraw(canvas); //调用onDraw

   dispatchDraw(canvas);   //绘制子view

   onDrawScrollBars(canvas); //绘制滚动条

   ...

}

protected void dispatchDraw(Canvas canvas) { //空实现 }

protected void onDraw(Canvas canvas) { //空实现 }


ViewGroup中:

protected void dispatchDraw(Canvas canvas) {

    ...

    drawChild(...); //绘制子view

    ...

}


protected boolean drawChild(Canvas canvas, View child, long drawingTime) {

        return child.draw(canvas, this, drawingTime);

}



说明:

1. 自定义一个view时,重写onDraw。

    调用view.invalidate(),会触发onDraw和computeScroll()。前提是该view被附加在当前窗口上

    view.postInvalidate(); //是在非UI线程上调用的


2.  自定义一个ViewGroup,重写onDraw。

     onDraw可能不会被调用,原因是需要先设置一个背景(颜色或图)。

           表示这个group有东西需要绘制了,才会触发draw,之后是onDraw

    因此,一般直接重写dispatchDraw来绘制viewGroup


3. 自定义一个ViewGroup

    dispatchDraw会调用drawChild。




更多相关文章

  1. Android内容提供器-读取通讯录
  2. Android(安卓)studio gradle 配置阿里镜像
  3. Android(安卓)dialog——点击「屏幕」或者「返回键」不消失
  4. Android的Fragment中onActivityResult不被调用的解决方案
  5. Android(安卓)简单记事本
  6. Android(安卓)解决监听home键的几种方法
  7. android 修改标题样式以及内容
  8. Android(安卓)ListView上下滑动与item左右滑动冲突解决
  9. RecyclerView高度随Item自适应 GridLayoutManager和LinearLayout

随机推荐

  1. Android学习第一章第一节android学习路线
  2. ANDROID 控件常用属性
  3. Android隐藏状态栏和标题栏,相当于全屏效
  4. android:hintText与android:inputType详
  5. Android(安卓)WebView与Js的交互
  6. Android(Lollipop/5.0) Material Design(
  7. .Net 转战 Android(安卓)4.4 日常笔记目
  8. Android系统自带样式(@android:style/)
  9. AndroidUI组件之ListView小技巧
  10. 还在蛋壳里--android学习之吐槽篇