xinzheng_wang的博客

记录工作与学习中的点点滴滴。

Android SurfaceView onDraw()绘图问题

 

在继承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 constructor null
个人分类: Android基础
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

Android SurfaceView onDraw()绘图问题

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭