立即在SurfaceView上调用onDraw

时间:2015-04-17 22:34:47

标签: android camera surfaceview ondraw

是否有可能立即调用SurfaceView.onDraw()方法?文档说,在调用方法invalidate()之后,将在某个时间点调用方法onDraw()。我正在使用Camera API并修改预览帧。这是我的代码:

实施Camera.PreviewCallback的活动:

@Override
public void onPreviewFrame(byte[] data, Camera camera {
  previewLayout.removeView(drawView); //RelativeLayout, which actually represents preview frames
  drawView = new CustomSurfaceView();
  previewLayout.addView(drawView);
  drawView.invalidate(); //onDraw not called
  setRectangle(drawView.getRect()); //this object is created in onDraw method, which was not yet called
}

CustomSurfaceView:

@Override
public void onDraw(Canvas canvas) {
  rect = new Rect(..,..,..,..);
  canvas.drawRect(rect);
}

public Rect getRect() {
    return Rect;
}

我认为在那个帖子中我的问题没有答案。我正在做那里提到的一切:

  • 将自定义SurfaceView放在另一个RelativeLayout中,我在其中显示预览帧
  • onDraw方法在另一个SurfaceView中实现,然后将其添加到预览框架SurfaceView
  • 上方

实际上,我的示例代码中有一个错误,而不是previewLayout,但变量drawView是我必须使SurfaceView无效的。但它仍然不起作用,onDraw仅在onPreviewFrame之后调用。

顺便说一下,我正在进行面部检测应用程序,例如可能的重复项之一。问题是我想在检测到面部的情况下捕获裁剪矩形的图像,但有时在drawView中没有Rect的实例,因为尚未调用onDraw方法,所以我的应用程序崩溃了。 我的问题仍然是相同的:是否可以在onPreviewFrames方法中立即调用示例视图的onDraw方法?

0 个答案:

没有答案