Android SurfaceView onDraw()绘图问题

原创 2012年06月29日 11:32:20

 

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

 

 

 

 

 

 

 

 

 

 

相关文章推荐

SurfaceView 实现高性能的绘制

先说说自定义 View 绘图机制的缺陷: 1. View 缺乏双缓冲机制; 2. 当程序需要更新 View 上的图片时,程序必须重绘 View 上显示的整张图片; 3. 新线程无法直接更新 Vi...

Android开发:SurfaceView上新建线程绘制旋转图片 及 刷新特定区域(脏矩形)

何为脏矩形?比如surfaceview上绘制旋转图片的时候,只刷新一个特定的矩形区域就可以了。这个矩形区域就是脏矩形。在surfaceview上  canvas = holder.lockCanvas...

Android双SurfaceView实现底部拍照,顶部绘图

当SurfaceHolder对象的类型设置为SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS时就只能拍照不能绘制了。 为了既能通过SurfaceView拍照又能在上面绘...

在继承SurfaceView的类中如何重写onDraw()方法使其有效

在项目中遇到画一个类似于扫面二维码的界面效果,中间的框为了让客户去对准需要拍摄的点。 一开始觉得很简单,本来这个拍摄照片的就是个自定义的控件继承了SurfaceView,觉得只要在onDraw函数里...

Android中SurfaceView的使用详解

通过之前介绍的如何自定义View, 我们知道使用它可以做一些简单的动画效果。它通过不断循环的执行View.onDraw方法,每次执行都对内部显示的图形做一些调整,我们假设 onDraw方法每秒执行...
  • Qiqihar
  • Qiqihar
  • 2015年09月07日 17:40
  • 308

自定义view的onDraw()方法不被调用

今天继承ImageView写了一个自定义的view,用canvas但是却不能在界面中

SurfaceView onDraw()方法问题

View的onDraw函数是protected的。protected 表明被它修饰的成员变量为保护类型,在同一个包里和 public 类型是一样的,也是能够访问到的。但是如果在不同包里的 protec...

Android 之surfaceView (画动态圆圈)

 通过之前介绍的如何自定义View, 我们知道使用它可以做一些简单的动画效果。它通过不断循环的执行View.onDraw方法,每次执行都对内部显示的图形做一些调整,我们假设 onDraw方法...

Android FinalDb使用

Android之FinalDb使用

解决Android实现照相机程序时不能显示摄像头的问题

try { camera.setPreviewDisplay(surfaceHolder); } catch (IOException e) { // TODO Auto-gen...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android SurfaceView onDraw()绘图问题
举报原因:
原因补充:

(最多只允许输入30个字)