作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 PreviewView 实例,我想根据使用 Firebase 和 Image Analyzer 用例的对象标识在该实例上绘制一个矩形。
但是,与 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);
创建一个 subview 组:textureView。
imageAnalysis.setAnalyzer(executor, new ImageAnalysis.Analyzer() {....}
最佳答案
要在预览之上绘制,您可以创建一个自定义 View ,该 View 绘制一个带有 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) }
}
}
并在您的布局中使用此自定义 View :
<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>
这是一个很好的 repo 来检查哪个使用 CameraX 并在检测到的面部上绘制矩形边界:
https://github.com/husaynhakeem/android-playground/tree/master/FaceDetectorSample
关于androidx - 如何在 PreviewView 上绘图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63090795/
我是一名优秀的程序员,十分优秀!