26
2017
09

Android自定义View-onLayout、onSizeChange、onDraw介绍

onLayout介绍

onLayout(boolean changed, int left, int top, int right, int bottom):分配一个大小和位置给每个子节点。
参数:

  • changed:这是View的一个新的大小或位置
  • left:左位置,相对于父布局
  • top:上位置,相对于父布局
  • right:右位置,相对于父布局
  • bottom:下位置,相对于父布局

自定义ViewGroup才需要且必须重写该方法,遍历每一个子节点并调用View#layout(int l, int t, int r, int b)把大小和位置分配到子节点,大小:测量得到,位置:通过处理LayoutParams得到。调用requestLayout()请求重新布局。

onSizeChanged介绍

onSizeChanged(int w, int h, int oldw, int oldh):当View的大小发生变化时,这将被调用。如果该View刚刚添加到View层次结构中,则旧值为0。
参数:

  • w:View的当前宽度
  • h:View的当前高度
  • oldw:View的旧宽度
  • oldh:View的旧高度

要监听View的大小是否发生改变时重写该方法。

onDraw介绍

onDraw (Canvas canvas):绘制View的内容。
参数:

  • canvas:绘制了背景的画布

canvas只是画布,想要绘制内容还需要Paint(用来描述绘图的颜色和样式)、图元(例如:Rect, Path, text, Bitmap)
调用invalidate()强制视图绘制,在非UI线程调用postInvalidate()。

上一篇:从ViewRootImpl类分析View绘制的流程 下一篇:SVN安装配置与使用