600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > android实时预览 实现预览  |  Android 开发者  |  Android Developers

android实时预览 实现预览  |  Android 开发者  |  Android Developers

时间:2020-04-26 07:47:48

相关推荐

android实时预览 实现预览  |  Android 开发者  |  Android Developers

在向应用添加预览时,请使用 PreviewView,这是一种可以剪裁、缩放和旋转以确保正确显示的 View。

当相机处于活动状态时,图片预览会流式传输到 PreviewView 中的 Surface。

使用 PreviewView

如需使用 PreviewView 实现 CameraX 预览,请按以下步骤操作(稍后将对这些步骤进行说明):

将 PreviewView 添加到布局。

在创建 View 时,请检查 ProcessCameraProvider。

选择相机并绑定生命周期和用例。

使用 PreviewView 存在一些限制。使用 PreviewView 时,您无法执行以下任何操作:

创建 SurfaceTexture,以在 TextureView 和 Preview.SurfaceProvider 上进行设置。

从 TextureView 检索 SurfaceTexture,并在 Preview.SurfaceProvider 上对其进行设置。

从 SurfaceView 获取 Surface,并在 Preview.SurfaceProvider 上对其进行设置。

如果出现上述任何一种情况,Preview 就会停止将帧流式传输到 PreviewView。

[可选] 配置 CameraXConfig.Provider

如果您希望对初始化 CameraX 的时间进行精细控制,您可以在 Application 类中实现 CameraXConfig.Provider 接口。请注意,大多数应用并不需要这种级别的控制。

Kotlin

import androidx.camera.camera2.Camera2Config

import androidx.camera.core.CameraXConfig

public class MyCameraXApplication : Application(), CameraXConfig.Provider {

override fun getCameraXConfig(): CameraXConfig {

return Camera2Config.defaultConfig()

}

}Java

import androidx.camera.camera2.Camera2Config;

import androidx.camera.core.CameraXConfig;

public class MyCameraXApplication extends Application implements CameraXConfig.Provider {

@NonNull

@Override

public CameraXConfig getCameraXConfig() {

return Camera2Config.defaultConfig();

}

}

将 PreviewView 添加到布局

以下示例显示了布局中的 PreviewView:

android:id="@+id/container">

android:id="@+id/previewView" />

请求 CameraProvider

以下代码展示了如何请求 CameraProvider:

Kotlin

import androidx.camera.lifecycle.ProcessCameraProvider

import mon.util.concurrent.ListenableFuture

class MainActivity : AppCompatActivity() {

private lateinit var cameraProviderFuture : ListenableFuture

override fun onCreate(savedInstanceState: Bundle?) {

cameraProviderFuture = ProcessCameraProvider.getInstance(this)

}

}Java

import androidx.camera.lifecycle.ProcessCameraProvider

import mon.util.concurrent.ListenableFuture

public class MainActivity extends AppCompatActivity {

private ListenableFuture cameraProviderFuture;

@Override

protected void onCreate(@Nullable Bundle savedInstanceState) {

cameraProviderFuture = ProcessCameraProvider.getInstance(this);

}

}

检查 CameraProvider 可用性

请求 CameraProvider 后,请验证它能否在视图创建后成功初始化。以下代码展示了如何执行此操作:

Kotlin

cameraProviderFuture.addListener(Runnable {

val cameraProvider = cameraProviderFuture.get()

bindPreview(cameraProvider)

}, ContextCompat.getMainExecutor(this))Java

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.

}

}, ContextCompat.getMainExecutor(this));

如需查看此示例中使用的 bindPreview 函数的示例,请参阅下一部分中提供的代码。

选择相机并绑定生命周期和用例

创建并确认 CameraProvider 后,请执行以下操作:

创建 Preview。

指定所需的相机 LensFacing 选项。

将所选相机和任意用例绑定到生命周期。

将 Preview 连接到 PreviewView。

以下代码展示了一个示例:

Kotlin

fun bindPreview(cameraProvider : ProcessCameraProvider) {

var preview : Preview = Preview.Builder()

.build()

var cameraSelector : CameraSelector = CameraSelector.Builder()

.requireLensFacing(CameraSelector.LENS_FACING_BACK)

.build()

preview.setSurfaceProvider(previewView.getSurfaceProvider())

var camera = cameraProvider.bindToLifecycle(this as LifecycleOwner, cameraSelector, preview)

}Java

void bindPreview(@NonNull ProcessCameraProvider cameraProvider) {

Preview preview = new Preview.Builder()

.build();

CameraSelector cameraSelector = new CameraSelector.Builder()

.requireLensFacing(CameraSelector.LENS_FACING_BACK)

.build();

preview.setSurfaceProvider(previewView.getSurfaceProvider());

Camera camera = cameraProvider.bindToLifecycle((LifecycleOwner)this, cameraSelector, preview);

}

现在,您已完成实现相机预览的操作。请构建您的应用,然后确认预览是否出现在您的应用中并能按预期工作。

其他资源

如需详细了解 CameraX,请参阅下面列出的其他资源。

Codelab

代码示例

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。