码迷,mamicode.com
首页 > 其他好文 > 详细

android 之 surfaceView的使用

时间:2015-05-03 14:33:26      阅读:176      评论:0      收藏:0      [点我收藏+]

标签:

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

 

android 之 surfaceView的使用

标签:

原文地址:http://www.cnblogs.com/lzh-Linux/p/4473926.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!