作者 / Android 開發者關系工程師 Francesco Romano
預覽 (Preview)
https://developer.android.google.cn/training/camerax/preview
CaptureSession
https://developer.android.google.cn/reference/android/hardware/camera2/CameraDevice#createCaptureSession(android.hardware.camera2.params.SessionConfiguration)
不要假定應用將一直在縱向窗口中運行。Android 13 仍然支持應用固定屏幕方向的請求,但現在設備制造商可以選擇覆蓋應用的首選屏幕方向請求。
不要假定應用有任何固定尺寸或寬高比。即使您設置了 resizableActivity = "false",您的應用仍然可以在大屏幕設備 (>=600dp) 上以多窗口模式使用。
不要假定屏幕方向和相機方向之間存在固定關系。《Android 兼容性定義文檔》中明確了相機圖像傳感器 "必須朝向正確方向,以便相機的長度方向與屏幕的長度方向對齊"。從 API 級別 32 開始,查詢可折疊設備方向的相機客戶端可以收到一個根據設備/折疊狀態動態變化的值。
Android 兼容性定義文檔
https://source.android.com/docs/compatibility/13/android-13-cdd#755_camera_orientation
不要假定邊襯區的大小無法更改。新的任務欄會作為邊襯區報告給應用,且當任務欄與手勢導航一起使用時,任務欄可以動態隱藏和顯示。
不要假定您的應用享有專屬的相機訪問權限。當您的應用處于多窗口模式時,其他應用也可以獲得對相機和麥克風等共享資源的訪問權限。
雖然 CameraX 已經能處理上述大多數情況,但使用 Camera2 API 實現適用于不同場景的預覽可能會很復雜。我們在 "在您的相機應用中支持可調整大小的 Surface" Codelab 中介紹了這一點。
在您的相機應用中支持可調整大小的 Surface
https://developer.android.google.cn/codelabs/android-camera2-preview
隆重推出 CameraViewfinder
CameraViewfinder
https://developer.android.google.cn/reference/kotlin/androidx/camera/viewfinder/CameraViewfinder
implementation "androidx.camera:camera-viewfinder:1.3.0-alpha01"
<androidx.camera.viewfinder.CameraViewfinder
android:id="@+id/view_finder"
app:scaleType="fitCenter"
app:implementationMode="performance"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
View
https://developer.android.google.cn/reference/android/view/View
PreviewView
https://developer.android.google.cn/reference/kotlin/androidx/camera/view/PreviewView
實現模式
https://developer.android.google.cn/training/camerax/preview#implementation-mode
縮放類型
https://developer.android.google.cn/training/camerax/preview#scale-type
現在該組件是布局的一部分,您仍然可以創建 CameraCaptureSession,但不提供 TextureView 或 SurfaceView 作為目標界面,而是使用 requestSurfaceAsync() 的結果。
fun startCamera(){
val previewResolution = Size(width, height)
val viewfinderSurfaceRequest =
ViewfinderSurfaceRequest(previewResolution, characteristics)
val surfaceListenableFuture =
cameraViewfinder.requestSurfaceAsync(viewfinderSurfaceRequest)
Futures.addCallback(surfaceListenableFuture, object :FutureCallback {
override fun onSuccess(surface:Surface) {
//像往常一樣使用這個界面創建 CaptureSession
}
override fun onFailure(t:Throwable) { /* 出錯了 */}
}, ContextCompat.getMainExecutor(context))
}
CameraCaptureSession https://developer.android.google.cn/reference/android/hardware/camera2/CameraCaptureSession requestSurfaceAsync()
https://developer.android.google.cn/reference/kotlin/androidx/camera/viewfinder/CameraViewfinder#requestSurfaceAsync(androidx.camera.viewfinder.ViewfinderSurfaceRequest)
附加功能: 可折疊設備的布局優化
Jetpack WindowManager
https://developer.android.google.cn/jetpack/androidx/releases/window
處理姿勢變化的代碼
https://github.com/androidx/androidx/blob/androidx-main/camera/integration-tests/viewfindertestapp/src/main/java/androidx/camera/integration/viewfinder/CameraViewfinderFoldableFragment.kt#L583
原文標題:輕松實現相機預覽 | Camera Viewfinder 全新上線
文章出處:【微信公眾號:谷歌開發者】歡迎添加關注!文章轉載請注明出處。
-
谷歌
+關注
關注
27文章
6161瀏覽量
105304
原文標題:輕松實現相機預覽 | Camera Viewfinder 全新上線
文章出處:【微信號:Google_Developers,微信公眾號:谷歌開發者】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論