我正在尝试通过动画实现效果,但只有在预览 View 处于 Activity 状态后才能实现。原因之一也是为了避免相机绑定(bind)后出现闪烁。
我已经设法使用反射 (androidx.camera.core.UseCase) 来做到这一点,但在某些设备上 onUseCaseActive 会以奇怪的顺序被多次调用。首先处于ACTIVE状态,然后切换到INACTIVE状态,并被多次调用,最后进入ACTIVE状态。
所以我的实际问题是:有什么方法可以获取 CameraX 回调,以便我可以根据相机的状态以不同的方式管理我的状态?
最佳答案
如果您需要知道相机预览何时首次显示在 PreviewView
上,您可以使用 PreviewView.getPreviewStreamState()
,它是一个 LiveData
实例,发出 STREAMING
或IDLE
分别何时显示预览。
正如文档所述,根据 PreviewView
的实现模式,预览开始时信号的准确性有所不同。对于 COMPATIBLE
模式下,接收流状态 STREAMING
准确地表明预览已开始,PERFORMANCE
模式不太准确。
在问题结束时,您将其概括为还包括其他 CameraX 用例。因此,对于 ImageAnalysis
,一旦您通过其附加的 Analyzer
收到第一个相机帧,您就知道它处于 Activity 状态。 。对于 ImageCapture
,您在通过其捕获回调之一拍照后会收到成功/失败回调 OnImageCapturedCallback
和 OnImageSavedCallback
.
关于android - 如何在 PreviewView 准备好时获取 CameraX 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65113431/