是否有可能立即调用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;
}
我认为在那个帖子中我的问题没有答案。我正在做那里提到的一切:
实际上,我的示例代码中有一个错误,而不是previewLayout,但变量drawView是我必须使SurfaceView无效的。但它仍然不起作用,onDraw仅在onPreviewFrame之后调用。
顺便说一下,我正在进行面部检测应用程序,例如可能的重复项之一。问题是我想在检测到面部的情况下捕获裁剪矩形的图像,但有时在drawView中没有Rect的实例,因为尚未调用onDraw方法,所以我的应用程序崩溃了。 我的问题仍然是相同的:是否可以在onPreviewFrames方法中立即调用示例视图的onDraw方法?