Android-View-绘制

来源:互联网 发布:js调用麦克风录音 编辑:程序博客网 时间:2024/05/16 17:31
参考文章:http://blog.csdn.net/guolin_blog/article/details/16330267

View绘制流程

  1. measure:确定大小
  2. layout:确定位置
  3. draw:执行绘制

measure

  • 关键方法

方法 1:public final void measure(int widthMeasureSpec, int heightMeasureSpec);

功能:计算一个view应该显示的大小尺寸。但是,测量工作没有实际生效!!!

方法 2:protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec);

功能:设定view的尺寸,view子类通过重写此方法确定其内容的大小尺寸。包含子视图的viewGroup应在此遍历测量所有子视图的尺寸!

方法 3:protected final void setMeasuredDimension(int measuredWidth, int measuredHeight);

功能:此方法必须被onMeasrue()方法调用,来存储已测量view的width和height。

  • 相关类

1,MeasureSpec:组合size, mode到一个int数据中。

mode三个值:

  • EXACTLY 子视图的大小为父视图指定的size值
  • AT_MOST 子视图的大小不超过size值
  • UNSPECIFIED 子视图可设置成任意的大小,没有任何限制。

layout

  • 关键方法

方法 1:public void layout(int l, int t, int r, int b);

功能:指定内部子view的显示位置和尺寸。但是,没有实际生效!!!

方法 2:protected void onLayout(boolean changed, int left, int top, int right, int bottom);

功能:指定内部childView的尺寸和位置。自定义的ViewGroup应重写此方法,并遍历调用其包含的所有childView的layout()方法!

方法 3:public final int getWidth();

功能:获取view的宽度。计算方法:mRight - mLeft

方法 4:public final int getMeasuredWidth();

功能:获取view测量后的宽度。计算方法:setMeasuredDimension(int measuredWidth, int measuredHeight)设定的值。

draw

  • 关键方法

方法 1:public void draw(Canvas canvas);

功能:绘制view(以及其包含的childView)。

方法 2:protected void onDraw(Canvas canvas);

功能:执行自定义的绘制工作。

0 0