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。
**