如何在 PreviewView 上绘制?
How to draw on PreviewView?
我有一个 PreviewView 实例,我想使用 Firebase 和图像分析器用例根据对象标识在其上绘制一个矩形。
但是,与 Text/SurfaceView 不同,PreviewView 不允许在其上绘制任何 Canvas。
还有什么选择?
进一步编辑:
之前尝试过以下方法:
Canvas objectFrameCanvas = new Canvas();
Paint pen = new Paint();
pen.setColor(Color.RED);
pen.setStrokeWidth(8F);
pen.setStyle(Paint.Style.STROKE);
objectFrameCanvas.drawRect(100,150,200, 250, pen);
TextureView textureView = new TextureView(this);
textureView.draw(objectFrameCanvas);
mPreviewView.addView(textureView);
为视图组创建一个子视图:textureView。
新建canvas objectFrameCanvas,在其上绘制矩形,然后在textureView 上绘制canvas。然后将其添加到视图组 (PreviewView)
仍然没有给我应有的必要结果。
顺便说一句,我在我的 ImageAnanysis 用例中使用它
imageAnalysis.setAnalyzer(executor, new ImageAnalysis.Analyzer() {....}
要在预览的顶部绘制,您可以创建一个自定义视图,用您提供的 RectF
列表绘制一个矩形。这是它的要点:
class RectOverlay constructor(context: Context?, attributeSet: AttributeSet?) :
View(context, attributeSet) {
override fun onDraw(canvas: Canvas) {
super.onDraw(canvas)
// Pass it a list of RectF (rectBounds)
rectBounds.forEach { canvas.drawRect(it, paint) }
}
}
并在您的布局中使用此自定义视图:
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.camera.view.PreviewView
android:id="@+id/preview_view"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<com.example.RectOverlay
android:id="@+id/rect_overlay"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
这是一个很好的回购协议,可以检查哪个使用 CameraX 并在检测到的面部上绘制矩形边界:https://github.com/husaynhakeem/android-playground/tree/master/FaceDetectorSample
我有一个 PreviewView 实例,我想使用 Firebase 和图像分析器用例根据对象标识在其上绘制一个矩形。
但是,与 Text/SurfaceView 不同,PreviewView 不允许在其上绘制任何 Canvas。
还有什么选择?
进一步编辑:
之前尝试过以下方法:
Canvas objectFrameCanvas = new Canvas();
Paint pen = new Paint();
pen.setColor(Color.RED);
pen.setStrokeWidth(8F);
pen.setStyle(Paint.Style.STROKE);
objectFrameCanvas.drawRect(100,150,200, 250, pen);
TextureView textureView = new TextureView(this);
textureView.draw(objectFrameCanvas);
mPreviewView.addView(textureView);
为视图组创建一个子视图:textureView。 新建canvas objectFrameCanvas,在其上绘制矩形,然后在textureView 上绘制canvas。然后将其添加到视图组 (PreviewView)
仍然没有给我应有的必要结果。
顺便说一句,我在我的 ImageAnanysis 用例中使用它
imageAnalysis.setAnalyzer(executor, new ImageAnalysis.Analyzer() {....}
要在预览的顶部绘制,您可以创建一个自定义视图,用您提供的 RectF
列表绘制一个矩形。这是它的要点:
class RectOverlay constructor(context: Context?, attributeSet: AttributeSet?) :
View(context, attributeSet) {
override fun onDraw(canvas: Canvas) {
super.onDraw(canvas)
// Pass it a list of RectF (rectBounds)
rectBounds.forEach { canvas.drawRect(it, paint) }
}
}
并在您的布局中使用此自定义视图:
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.camera.view.PreviewView
android:id="@+id/preview_view"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<com.example.RectOverlay
android:id="@+id/rect_overlay"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
这是一个很好的回购协议,可以检查哪个使用 CameraX 并在检测到的面部上绘制矩形边界:https://github.com/husaynhakeem/android-playground/tree/master/FaceDetectorSample