CamerX
// CameraX core library using the camera2 implementation
def camerax_version = "1.0.0-alpha10"
implementation "androidx.camera:camera-camera2:${camerax_version}"
// If you want to use the CameraX Lifecycle library
implementation "androidx.camera:camera-lifecycle:${camerax_version}"
implementation "androidx.camera:camera-view:1.0.0-alpha08"
首先引入最新版本的camerax
2020 年 1 月 22 日 Camera-Camera2 和 Camera-Core 版本 1.0.0 合起来了。
由于cameraX更新很快,所以贴上最近用法
Camera-Core 版本 1.0.0-alpha07,版本之后的用法
class MainActivity : AppCompatActivity() {
private val mImageCapture by lazy {
ImageCapture.Builder().build()
}
private val mListenableFuture by lazy {
ProcessCameraProvider.getInstance(this)
}
private val mExecutor by lazy {
ContextCompat.getMainExecutor(this)
}
private val mPreview by lazy {
Preview.Builder()
.setTargetResolution(Size(720, 1280))
.build().apply {
setSurfaceProvider(previewView.previewSurfaceProvider)
}
}
private val mCameraSelector by lazy {
CameraSelector.Builder().requireLensFacing(CameraSelector.LENS_FACING_BACK).build()
}
private val mImageAnalysis by lazy {
ImageAnalysis.Builder()
.build().apply {
setAnalyzer(ContextCompat.getMainExecutor(this@MainActivity),
ImageAnalysis.Analyzer {
})
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
setCamera()
setListener()
}
private fun setListener() {
button.setOnClickListener {
mImageCapture
.takePicture(
outputFileOptions(),
mExecutor,
mOnImageSavedCallback
)
}
}
private fun outputFileOptions(): ImageCapture.OutputFileOptions {
val name = System.currentTimeMillis()
val path =
Environment.getExternalStorageDirectory().path + "/yingying"
File(path).mkdirs()
val pathName = "$path/$name.jpg"
Toast.makeText(this, pathName, Toast.LENGTH_LONG).show()
val file = File(pathName)
return ImageCapture.OutputFileOptions.Builder(file).build()
}
private val mOnImageSavedCallback = object : ImageCapture.OnImageSavedCallback {
override fun onImageSaved(outputFileResults: ImageCapture.OutputFileResults) {
Toast.makeText(this@MainActivity, "成功", Toast.LENGTH_LONG).show()
}
override fun onError(exception: ImageCaptureException) {
Toast.makeText(
this@MainActivity,
exception.message.toString(),
Toast.LENGTH_LONG
).show()
}
}
private fun setCamera() {
mListenableFuture.addListener(Runnable {
mListenableFuture.get().bindToLifecycle(
this as LifecycleOwner,
mCameraSelector,
mPreview,
mImageAnalysis,
mImageCapture
)
}, mExecutor)
}
}