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

标签 android android-camera android-camerax

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

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

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

最佳答案

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

正如文档所述,根据 PreviewView 的实现模式,预览开始时信号的准确性有所不同。对于 COMPATIBLE模式下,接收流状态 STREAMING 准确地表明预览已开始,PERFORMANCE模式不太准确。

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

关于android - 如何在 PreviewView 准备好时获取 CameraX 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65113431/

相关文章:

Android 自定义相机照片未显示在图库中

android - CameraX 使 ImageAnalysis 的大小与 Preview 相同

android - 如何在 Android 中使用 CameraX 显示否定模式预览?

android - 如何防止我的 apk 出现 "teardown"

java - Android Slider 中的 NoClassDefFoundError 错误

android - 每5秒在android中拍照

android - 摩托罗拉 Droid 3 相机应用程序杀死后台应用程序

android - 使用 CameraX 启动和停止相机的正确方法是什么?

android - 我可以通过 React Native 访问 Android/iPhone 通知吗?

android - SQLite Android 中的表名限制