CameraX中createSurfaceProvider()被替换

androidx.camera:camera-view:1.0.0-alpha16 替换了alpha15 中PreviewView类下面的createSurfaceProvider()方法。官方最新的说明androidx.camera:camera-view:1.0.0-alpha15,还没有alpha16。所以只能靠查源码解决。
通过查询发现原alpha15 中的

public Preview.SurfaceProvider createSurfaceProvider() {
    
    
        Threads.checkMainThread();
        return surfaceRequest -> {
    
    
            Logger.d(TAG, "Surface requested by Preview.");
            CameraInternal camera = (CameraInternal) surfaceRequest.getCamera();
            mPreviewTransform.setSensorDimensionFlipNeeded(
                    isSensorDimensionFlipNeeded(camera.getCameraInfo()));
            mImplementation = shouldUseTextureView(camera.getCameraInfo(), mImplementationMode)
                    ? new TextureViewImplementation() : new SurfaceViewImplementation();
            mImplementation.init(this, mPreviewTransform);

            PreviewStreamStateObserver streamStateObserver =
                    new PreviewStreamStateObserver((CameraInfoInternal) camera.getCameraInfo(),
                            mPreviewStreamStateLiveData, mImplementation);
            mActiveStreamStateObserver.set(streamStateObserver);

            camera.getCameraState().addObserver(
                    ContextCompat.getMainExecutor(getContext()), streamStateObserver);

            mPreviewViewMeteringPointFactory.setViewImplementationResolution(
                    surfaceRequest.getResolution());
            mPreviewViewMeteringPointFactory.setCameraInfo(camera.getCameraInfo());

            mImplementation.onSurfaceRequested(surfaceRequest, () -> {
    
    
                // We've no longer needed this observer, if there is no new StreamStateObserver
                // (another SurfaceRequest), reset the streamState to IDLE.
                // This is needed for the case when unbinding preview while other use cases are
                // still bound.
                if (mActiveStreamStateObserver.compareAndSet(streamStateObserver, null)) {
    
    
                    streamStateObserver.updatePreviewStreamState(StreamState.IDLE);
                }
                streamStateObserver.clear();
                camera.getCameraState().removeObserver(streamStateObserver);
            });
        };
    }

已经没删除了,但是在 alpha16 出现一个全局的常量 mSurfaceProvider

private final Preview.SurfaceProvider mSurfaceProvider = new Preview.SurfaceProvider() {
    
    

        @UseExperimental(markerClass = ExperimentalUseCaseGroup.class)
        @Override
        public void onSurfaceRequested(@NonNull SurfaceRequest surfaceRequest) {
    
    
            Logger.d(TAG, "Surface requested by Preview.");
            surfaceRequest.setTransformationInfoListener(
                    ContextCompat.getMainExecutor(getContext()),
                    transformationInfo -> {
    
    
                        Logger.d(TAG, "Preview transformation info updated. " + transformationInfo);
                        // TODO(b/159127402): maybe switch to COMPATIBLE mode if target rotation is
                        //  not display rotation.
                        mPreviewTransform.setTransformationInfo(transformationInfo,
                                surfaceRequest.getResolution());
                        redrawPreview();
                    });

            CameraInternal camera = surfaceRequest.getCamera();
            mImplementation = shouldUseTextureView(surfaceRequest, mImplementationMode)
                    ? new TextureViewImplementation(PreviewView.this, mPreviewTransform)
                    : new SurfaceViewImplementation(PreviewView.this, mPreviewTransform);

            PreviewStreamStateObserver streamStateObserver =
                    new PreviewStreamStateObserver((CameraInfoInternal) camera.getCameraInfo(),
                            mPreviewStreamStateLiveData, mImplementation);
            mActiveStreamStateObserver.set(streamStateObserver);

            camera.getCameraState().addObserver(
                    ContextCompat.getMainExecutor(getContext()), streamStateObserver);

            mPreviewViewMeteringPointFactory.setViewImplementationResolution(
                    surfaceRequest.getResolution());
            mPreviewViewMeteringPointFactory.setCameraInfo(camera.getCameraInfo());

            mImplementation.onSurfaceRequested(surfaceRequest, () -> {
    
    
                // We've no longer needed this observer, if there is no new StreamStateObserver
                // (another SurfaceRequest), reset the streamState to IDLE.
                // This is needed for the case when unbinding preview while other use cases are
                // still bound.
                if (mActiveStreamStateObserver.compareAndSet(streamStateObserver, null)) {
    
    
                    streamStateObserver.updatePreviewStreamState(StreamState.IDLE);
                }
                streamStateObserver.clear();
                camera.getCameraState().removeObserver(streamStateObserver);
            });
        }
    };

所以,直接搜索 mSurfaceProvider 找到一个getSurfaceProvider(),正好是返回这个mSurfaceProvider。

**

所以,createSurfaceProvider()在 alpha16 替换写法是getSurfaceProvider()。kotlin中不用写get。

**

猜你喜欢

转载自blog.csdn.net/weixin_42404974/article/details/108745336