cameraX 对焦不准确

cameraX focus is not accurate

我正在创建自定义相机应用并尝试添加如下对焦功能

val factory = SurfaceOrientedMeteringPointFactory(
                 viewFinder.width.toFloat(),
                 viewFinder.height.toFloat()
              )
val point = factory.createPoint(event.x, event.y)

try {
    cameraControl?.cancelFocusAndMetering()
    val action = FocusMeteringAction.Builder(point, FocusMeteringAction.FLAG_AF)
                 .setAutoCancelDuration(5, TimeUnit.SECONDS)
                 .build()
}

聚焦不准确,正如您在白色圆圈下方看到的那样,我点击以聚焦笔并查看它聚焦的位置。

点击和焦点之间的距离相当大。我的默认相机应用不是这种情况。

如何调整对焦到我点击PreviewView

的点

相机无法准确获取点击区域的焦点,因为从 UI 坐标到标准化传感器直角坐标的转换 SurfaceOrientedMeteringPointFactory 可能不正确。转换还应考虑 PreviewView 的布局方向、比例类型、设备的旋转以及相机是否面向 front/back 等因素。 SurfaceOrientedMeteringPointFactory 不会那样做。如果您对转换结果感到好奇,请查看 PreviewViewMeteringPointFactory

PreviewView已经提供了一个内部处理转换的测光点工厂,你可以调用PreviewView.getMeteringPointFactory()并将tap坐标传递给它。