我需要有关我正在处理的应用程序的帮助。该应用程序必须有一个自定义的相机接口来录制带音频的视频,并且必须在 TextureView 画布上实时添加一些对象。旧的 Camera API 已弃用,因此我必须使用 Camera2 API 在 TextureView 上呈现实时预览。我的目标是在 TextureView 画布上绘制一些对象,可以是一些文本/jpg/gif,而相机流在后台呈现,并且能够使用我的覆盖画布内容和相机馈送来录制视频。
问题是我可以在透明覆盖视图中绘制自定义内容,但这只是为了用户的查看目的。我已经尝试研究了几天,但我无法找到正确的方法来解决我的目的。
我在调用 openCamera() 方法后尝试了以下代码,但随后我只看到了一个绘制的矩形,但没有看到相机预览:
Canvas canvas = mTextureView.lockCanvas();
Paint myPaint = new Paint();
myPaint.setColor(Color.WHITE);
myPaint.setStrokeWidth(10);
canvas.drawRect(100, 100, 300, 300, myPaint);
mTextureView.unlockCanvasAndPost(canvas);
我还尝试了一个自定义 TextureView 类并覆盖了 vonDrawForeground(Canvas canvas) 方法,但它不起作用。
TextureView 类中的 onDraw() 方法是最终的,因此,除了流式传输相机源之外,我此时无法做任何事情。
/**
* Subclasses of TextureView cannot do their own rendering
* with the {@link Canvas} object.
*
* @param canvas The Canvas to which the View is rendered.
*/
@Override
protected final void onDraw(Canvas canvas) {
}
简而言之,我希望用户能够通过我的相机应用程序录制视频,并在这里和那里使用一些道具。