我正在做一个应用程序,它在Android中预览相机上绘制矩形。但问题是出现以前的矩形,所以我认为与预览相机相比,Canvas的刷新速度太慢了。
这是我的代码:
在我的活动课程中:
if (face.orientation != TYPE_FACE_ON_TRACK.face_notDetected) {
drawView.setPaint(true);
drawView.setSize(mat.size());
drawView.invalidate();
drawView.paintRect(face.rect);
}
这是我的onDraw和我的paintRect功能:
@Override
public void onDraw(Canvas canvas) {
mCanvas = canvas;
if (checkPaint == false) {
canvas.drawColor(Color.TRANSPARENT);
}
}
public void paintRect(Rect rect) {
int vWidth = getWidth();
int vHeight = getHeight();
int l = (int) ((rect.x * vWidth) / mSize.width);
int t = (int) ((rect.y * vHeight) / mSize.height);
int r = (int) (((rect.width + rect.x) * vWidth) / mSize.width);
int b = (int) (((rect.height + rect.y) * vHeight) / mSize.height);
mCanvas.drawRoundRect(new RectF(l, t, r, b), 20, 20, drawingPaint);
}
所以,当我调用.invalidate()app调用onDraw,然后当我调用.paintRect()绘制Rectangle时。
我正在测试nexus 5,所以我不认为问题是设备。
答案 0 :(得分:0)
你不能只是保存一个画布,然后就这样画画。你的所有绘图都应该在onDraw中完成,如果你需要绘制一个像这样的矩形,你应该保存它的位置,并在下次调用onDraw时绘制它。
答案 1 :(得分:0)
你使用预览吗?你做全尺寸的工作吗? 如果您使用完整尺寸,则需要在后台创建预览。如果可以在后台创建预览,则首次创建它,然后仅为新图像创建预览。