欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

AndroidCameraX學習記錄(一)kotlin-創(chuàng)新互聯

Android CameraX學習記錄(一) kotlin 實現預覽
  • CameraX 結構
  • CameraX 使用的類
    • ProcessCameraProvider
    • 相機選擇器 cameraSelector
  • CameraX 使用流程
    • 權限
    • 添加依賴
    • 布局
    • 生命周期
      • 請求 CameraProvider
      • 檢查 CameraProvider 可用性
    • 預覽

作為一家“創(chuàng)意+整合+營銷”的成都網站建設機構,我們在業(yè)內良好的客戶口碑。創(chuàng)新互聯建站提供從前期的網站品牌分析策劃、網站設計、成都做網站、網站設計、創(chuàng)意表現、網頁制作、系統開發(fā)以及后續(xù)網站營銷運營等一系列服務,幫助企業(yè)打造創(chuàng)新的互聯網品牌經營模式與有效的網絡營銷方法,創(chuàng)造更大的價值。CameraX 結構
  • Preview[ 預覽 ]:接受用于顯示預覽的圖面,例如 .PreviewView
  • ImageAnalysis[ 圖片分析 ]:為分析(例如機器學習)提供 CPU 可訪問的緩沖區(qū)。
  • ImageCapture[ 圖片拍攝 ]:拍攝并保存照片。
  • VideoCapture[ 視頻拍攝 ]:通過 VideoCapture 拍攝視頻和音頻

查看源碼PreviewImageAnalysisImageCaptureVideoCapture這幾個類都繼承UseCase,
他們都屬于用例,如需使用他們需要bindToLifecycle()函數在生命周期里面進行綁定

CameraX 使用的類 ProcessCameraProvider

一個單例,可用于將相機的生命周期綁定到應用程序進程中的任何生命周期所有者。一個進程中只能存在一個進程相機提供程序,并且可以使用getInstance(Context)檢索它。重量級資源,例如打開和正在運行的相機設備,將限定為提供給bindToLifecycle的生命周期(生命周期所有者、相機選擇器、用例…)。其他輕量級資源(如靜態(tài)相機特征)可以在使用getInstance(Contex)首次檢索此提供程序時檢索和緩存,并將在進程的生存期內持續(xù)存在。這是應用程序要使用的標準提供程序。

這是應用程序要使用的標準提供程序。

相機選擇器 cameraSelector

用于選擇相機或返回一組篩選的相機。
DEFAULT_BACK_CAMERA 選擇默認后置攝像頭的靜態(tài)。
DEFAULT_FRONT_CAMERA 選擇默認前置攝像頭的靜態(tài)。
LENS_FACING_BACK = 1 設備上的攝像頭,其方向與設備屏幕相反。
LENS_FACING_FRONT = 0 設備上的攝像頭與設備屏幕朝向同一方向。

CameraX 使用流程 權限

使用相機需要聲明權限

uses-feature參考:Android開發(fā)-API指南-
如需將圖片保存到文件中,除非所用設備搭載 Android 10 或更高版本,否則應用還需要 WRITE_EXTERNAL_STORAGE 權限。

// 請求相機權限
ActivityCompat.requestPermissions(
    this, 
    arrayOf(Manifest.permission.CAMERA), 
    0x1001)
// 監(jiān)聽權限
    override fun onRequestPermissionsResult(
        requestCode: Int,
        permissions: Array,
        grantResults: IntArray
    ) {super.onRequestPermissionsResult(requestCode, permissions, grantResults)
        if (requestCode == 0x1001){if (permissions.contains(
            Manifest.permission.CAMERA) && grantResults.get(0) == 0){startCamera()
            }
        }
    }
添加依賴

將以下內容添加到app目錄下的 build.gradle 文件中:

dependencies {// CameraX core library using the camera2 implementation
    def camerax_version = "1.3.0-alpha02"
    implementation("androidx.camera:camera-camera2:${camerax_version}")
    // If you want to additionally use the CameraX Lifecycle library
    implementation("androidx.camera:camera-lifecycle:${camerax_version}")
    // If you want to additionally use the CameraX VideoCapture library
    implementation("androidx.camera:camera-video:${camerax_version}")
    // If you want to additionally use the CameraX View class
    implementation("androidx.camera:camera-view:${camerax_version}")
}
布局

編寫activity_main

生命周期

CameraX 沒有在onResume()onPause()中放置具體的啟動和停止方法調用,而是使用cameraProvider.bindToLifecycle()指定要與相機關聯的生命周期。之后,該生命周期會告知 CameraX 何時配置相機拍攝會話并確保相機狀態(tài)隨生命周期的轉換相應地變化。

請求 CameraProvider
private lateinit var cameraProviderFuture : ListenableFuturecameraProviderFuture = ProcessCameraProvider.getInstance(this)
檢查 CameraProvider 可用性

請求CameraProvider后,請驗證它能否在視圖創(chuàng)建后成功初始化。以下代碼展示了如何執(zhí)行此操作:

cameraProviderFuture.addListener(Runnable {val cameraProvider = cameraProviderFuture.get()
    bindPreview(cameraProvider)
}, ContextCompat.getMainExecutor(this))
預覽
// 預覽
val preview = Preview.Builder().build()
// 使用以下代碼將用例綁定到Android生命周期 
val camera = cameraProvider.bindToLifecycle(this as LifecycleOwner, cameraSelector, preview)
// PreviewView創(chuàng)建一個表面提供程序,并且是推薦的提供程序
camera = preview.setSurfaceProvider(previewView.getSurfaceProvider())

bindToLifecycle()會返回一個Camera對象。

bindToLifecycle()函數

查看bindToLifecycle()函數源碼可以得知

public Camera bindToLifecycle(LifecycleOwner lifecycleOwner,
            CameraSelector cameraSelector,
            UseCase... useCases)

lifecycleOwner:生命周期所有者,用于控制用例的生命周期轉換。
cameraSelector:相機選擇器,用于確定用于一組用例的相機。
useCases:要綁定到生命周期的用例。
Preview[ 預覽 ],Image analysis[ 圖片分析 ],Image capture[ 圖片拍攝 ],Video capture[ 視頻拍攝 ]

查看源碼可知他們父類都是UseCase,因此要使用哪個用例需要綁定到生命周期

預覽完整代碼

private fun startCamera(){// 將相機的生命周期綁定到應用程序進程中  "getInstance"一個進程中只能存在一個進程相機提供程序,可以使用 進行檢索。
        val cameraProviderFuture = ProcessCameraProvider.getInstance(this)
        bindPreview(cameraProviderFuture)
    }

// 用于將相機的生命周期綁定到生命周期所有者
private fun bindPreview(cameraProviderFuture: ListenableFuture){cameraProviderFuture.addListener(Runnable {val cameraProvider: ProcessCameraProvider = cameraProviderFuture.get()
	    // 創(chuàng)建預覽 Preview
	    val preview = Preview.Builder()
	        .build()
	        .also {it.setSurfaceProvider(previewView.surfaceProvider)
	        }
	    // 選擇后置攝像頭作為默認值
	    val cameraSelector = CameraSelector.DEFAULT_BACK_CAMERA
	    try {// 在重新綁定之前取消綁定用例Unbind use cases before rebinding
	        cameraProvider.unbindAll()
	        // 將用例綁定到相機 Bind use cases to camera
	        camera = cameraProvider.bindToLifecycle(
	            this, cameraSelector, preview)
	    } catch(exc: Exception) {Log.e(TAG, "Use case binding failed", exc)
	    }
	},
	    // 返回一個將在與此上下文關聯的主線程上運行排隊任務
	    ContextCompat.getMainExecutor(this)
	)
}

參考資料:
CameraX 入門指南
CameraX 概覽

你是否還在尋找穩(wěn)定的海外服務器提供商?創(chuàng)新互聯www.cdcxhl.cn海外機房具備T級流量清洗系統配攻擊溯源,準確流量調度確保服務器高可用性,企業(yè)級服務器適合批量采購,新人活動首月15元起,快前往官網查看詳情吧

文章標題:AndroidCameraX學習記錄(一)kotlin-創(chuàng)新互聯
網站URL:http://www.chinadenli.net/article26/djdhjg.html

成都網站建設公司_創(chuàng)新互聯,為您提供Google標簽優(yōu)化網站制作網站排名微信公眾號網站內鏈

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯

h5響應式網站建設