您的位置:首页 > 移动开发 > Android开发

Android SurfaceView onDraw()绘图问题

2012-06-29 11:32 113 查看
在继承SurfaceView的类中即使重写了onDraw()方法也是没有用的,因为SurfaceView虽然继承自View,但并没

重写onDraw(),其子类可以重写onDraw()但并不能自动调用。

解决办法:

首先SurfaceView的子类XXX要 implements SurfaceHolder.Callback,然后定义private SurfaceHolder sh = null;

在其构造函数中:

public XXX(Context context, AttributeSet attrs) {

super(context, attrs);

// TODO Auto-generated constructor stub

sh = getHolder();

sh.addCallback(this);

}

//自定义绘制函数

public void doDraw(){

Paint p = new Paint(); // 笔触

p.setAntiAlias(true); // 反锯齿

p.setColor(Color.RED);

p.setStyle(Style.STROKE);

Canvas canvas = sh.lockCanvas();

canvas.drawColor(Color.WHITE);//背景

canvas.drawRect(10, 10, 100, 100, p);

sh.unlockCanvasAndPost(canvas); //提交绘制内容

}

在需要绘制的地方调用doDraw()即可。

//继承自view的onDraw方法

@Override

protected void onDraw(Canvas canvas) {

// TODO Auto-generated method stub

super.onDraw(canvas);

Paint p = new Paint(); // 笔触

p.setAntiAlias(true); // 反锯齿

p.setColor(Color.RED);

p.setStyle(Style.STROKE);

canvas = sh.lockCanvas();

canvas.drawColor(Color.WHITE);//背景色

canvas.drawRect(10, 10, 200, 200, p);

sh.unlockCanvasAndPost(canvas); //提交绘制内容

}

在需要绘制的地方调用onDraw(null)即可。

注:重写SurfaceView的draw(),最终还是调用的onDraw(),但是调用draw(null)时会有异常。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: