在继承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)时会有异常。

更多相关文章

  1. android关于View的截图
  2. Android中webview和js之间的交互及注意事项
  3. Android编程心得-在任意类中获取当前屏幕宽高
  4. Bitmap的回收
  5. Android中view绘制常用知识
  6. Android下的binder机制和IPC原理
  7. Android(安卓)Camera 通过V4L2与kernel driver的完整交互过程
  8. HwServiceManager篇-Android10.0 HwBinder通信原理(五)
  9. Android(安卓)开发艺术探索笔记(18)

随机推荐

  1. OpenDaylight实现轮询策略的负载均衡服务
  2. 摸鱼就是通透?还有多少你没意识到的毒金句
  3. Ryu:模块间通信机制分析
  4. 字节跳动不讲武德,居然笔试的时候出这种题
  5. OpenDaylight控制器MD-SAL解析
  6. 路由器的命令和rip路由协议,静态和动态路
  7. 小白前端入门笔记(10),怎么设置网站内部的超
  8. Small Structures: 超陡亚阈值摆幅的范德
  9. 帮你光速脱单!程序员找对象指南
  10. 透过 OKR 进行项目过程管理