如何在 PreviewView 准备好时获取 CameraX 事件

rul*_*ule 2 android android-camera android-camerax

我正在尝试通过动画实现效果,但只有在预览视图处于活动状态后才能实现。原因之一也是为了避免相机绑定后出现闪烁。

我已经设法使用反射 (androidx.camera.core.UseCase) 来做到这一点,但在某些设备上 onUseCaseActive 以奇怪的顺序被多次调用。它首先处于 ACTIVE 状态,然后切换到 INACTIVE,并被多次调用,最后进入 ACTIVE 状态。

所以我的实际问题是:有什么方法可以获取 CameraX 回调,以便我可以根据相机的状态以不同的方式管理我的状态?

Hus*_*eem 5

如果您需要知道相机预览何时首次显示在 上PreviewView,您可以使用PreviewView.getPreviewStreamState(),它是一个在预览显示或不显示时分别发出LiveData或 的实例。STREAMINGIDLE

正如文档所述,根据 的PreviewView实现模式,预览开始时的信号精度有所不同。对于COMPATIBLEmode来说,准确接收流状态STREAMING就意味着预览已经开始,PERFORMANCEmode不太准确。

在问题结束时,您将其概括为还包括其他 CameraX 用例。因此ImageAnalysis,一旦您通过其附加的 收到第一个相机帧,您就知道它处于活动状态Analyzer。至于ImageCapture,您在通过其捕获回调之一拍照后会收到成功/失败回调OnImageCapturedCallbackOnImageSavedCallback