创建一个新的视觉界面

  

基本的View类代表一个全空的100×100像素的正方形。为了改变控件的大小和显示更炫的视觉效果,最具代表的,你需要重写onMeasureonDraw方法。

 

onMeasure方法里,新的View会依据给的边界条件来计算它要占据的高度和宽度。在onDraw方法里,通过在画布上画画来创建视觉界面。

 

接下来的代码片段给出了一个新的View类的框架代码,我们将在接下来的章节更加深入的讨论:

 

public class MyView extends View {

// Constructor required for in-code creation

public MyView(Context context) {

super(context);

}

 

// Constructor required for inflation from resource file

public MyView (Context context, AttributeSet ats, int defaultStyle) {

super(context, ats, defaultStyle );

}

 

//Constructor required for inflation from resource file

public MyView (Context context, AttributeSet attrs) {

super(context, attrs);

}

 

@Override

protected void onMeasure(int wMeasureSpec, int hMeasureSpec) {

int measuredHeight = measureHeight(hMeasureSpec);

int measuredWidth = measureWidth(wMeasureSpec);

 

// 必须调用setMeasuredDimension方法

// 否则当控件放置时会引发一个运行时异常。

setMeasuredDimension(measuredHeight, measuredWidth);

}

 

private int measureHeight(int measureSpec) {

int specMode = MeasureSpec.getMode(measureSpec);

int specSize = MeasureSpec.getSize(measureSpec);

[ ... 计算View的高度 ... ]

return specSize;

}

 

private int measureWidth(int measureSpec) {

int specMode = MeasureSpec.getMode(measureSpec);

int specSize = MeasureSpec.getSize(measureSpec);

[ ... 计算View的宽度 ... ]

return specSize;

}

 

@Override

protected void onDraw(Canvas canvas) {

[ ... Draw your visual interface ... ]

}

}

 

注意:onMeasure方法中调用setMeasuredDimension方法;你必须总是在你重写onMeasure方法时调用这个方法,否则,当父容器尝试放置控件时你的控件会引发一个异常。

posted on 2009-07-23 09:32  xirihanlin  阅读(1291)  评论(0编辑  收藏  举报