【问题标题】:How to use CameraX with PreviewView?如何将 CameraX 与 PreviewView 一起使用?
【发布时间】:2020-06-03 16:16:57
【问题描述】:

我不知道如何将 camerax 与 previewview 一起使用。

【问题讨论】:

    标签: java camera android-camera android-camerax


    【解决方案1】:

    这是一个如何使用CameraxPreviewView 的示例,代码使用最新版本的CameraX,即camera-camera2 版本为1.1.0-alpha08,camera-view 版本为1.0.0-alpha28。

    @Override
        public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
            super.onViewCreated(view, savedInstanceState);
    
            previewView = view.findViewById(R.id.preview_view);
      
    
            setCameraProviderListener();
    
        }
    
    private void setCameraProviderListener() {
            ListenableFuture<ProcessCameraProvider> cameraProviderFuture =
                    ProcessCameraProvider.getInstance(requireContext());
            cameraProviderFuture.addListener(() -> {
    
                try {
                    ProcessCameraProvider cameraProvider = cameraProviderFuture.get();
                    bindPreview(cameraProvider);
                } catch (ExecutionException | InterruptedException e) {
                    // No errors need to be handled for this Future
                    // This should never be reached
                    e.printStackTrace();
                }
            }, ContextCompat.getMainExecutor(requireContext()));
        }
    
     private void bindPreview(ProcessCameraProvider cameraProvider) {
            
     previewView.setPreferredImplementationMode(PreviewView.ImplementationMode.SURFACE_VIEW);
    
            Preview preview = new Preview.Builder().setTargetAspectRatio(AspectRatio.RATIO_4_3).
                    setTargetRotation(previewView.getDisplay().getRotation())
                    .build();
    
    
            CameraSelector cameraSelector =
                    new CameraSelector.Builder().requireLensFacing(CameraSelector.LENS_FACING_BACK).build();
    
            preview.setSurfaceProvider(previewView.getSurfaceProvider());
    
       UseCaseGroup useCaseGroup = new UseCaseGroup.Builder()
                    .addUseCase(preview)
                    .addUseCase(imageCapture)//use this case if you want take picture or videoCapture for videoRecording
                    .build();
    
    
            cameraProvider.bindToLifecycle(this, cameraSelector,preview);
    
        }
    
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/container"
        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"
            android:background="@color/Yellow"
            android:layout_gravity="center" />
    
    </LinearLayout>
    

    【讨论】:

    • 如何设置TextureView而不是PreviewView,无法设置Preview preview.setSurfaceProvider(textureView.getSurfaceProvider());在最新版本 1.0.0-rc01 中显示错误
    • 你必须在 preview.setSurfaceProvider() 中使用 previewView.getSurfaceProvider() 而不是 textureView.getSurfaceProvider()
    • 谢谢@MohamedBenRomdhane,你的回答很有魅力,我刚刚对 preview.setSurfaceProvider() 进行了调整,在 1.0.0-alpha14 版本上更改了 previewView.createSurfaceProvider() 的 getSurfaceProvider 跨度>
    • @MohamedBenRomdhane 这是我开始项目时使用的版本,现在我必须升级它。
    • Soooo,你到底把那段代码放在哪里了?对于某些人来说,这真的不明显。
    【解决方案2】:

    Here 是一篇解释PreviewView 及其使用方法的文章。它在相机视图的 1.0.0-alpha10 版本之前有效,我会尽量保持最新。

    【讨论】:

      【解决方案3】:

      我在调试不同错误时设置了android:hardwareAccelerated="false",但忘记将其删除(或将其设置为true)。我很快注意到相机功能已停止工作。

      确保您的应用清单中没有 android:hardwareAccelerated="false"。如果有,请将其删除,或将其设置为 true。如果设置为false,则会影响相机预览流。

      TL;DR

      删除清单中的任何android:hardwareAccelerated="false",或将其设置为true

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-10-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多