Hel*_*oCW 9 android zooming kotlin android-camerax
我正在学习 CameraX,CameraXBasic是示例代码。
我写了一个基于zoomX函数的CameraFragment.kt。你可以看到代码A。我认为该功能可以随时放大图片。
我发现一个画面可以当我是变焦调用它与SA小的值,例如zoomX(2f)
,zoomX(3f)
,但画面不会放大当我再次用大值,比如zoomX(6.0f)
,zoomX(7.0f)
为什么?
代码 A
private lateinit var viewFinder: TextureView
private var preview: Preview? = null
fun zoomX(orign: Float ){
val x=orign+1
val singleWidth=viewFinder.width/x
val singleHeight=viewFinder.height/x
val left=viewFinder.width/2f-singleWidth/2f
val right=left+singleWidth
val top=viewFinder.height/2f-singleHeight/2f
val bottom=top+singleHeight
val my= Rect(left.toInt(), top.toInt(), right.toInt(), bottom.toInt())
preview?.zoom(my)
}
Run Code Online (Sandbox Code Playgroud)
这不是传统的问题,而是传统的问题Futures
。将CameraXBasic示例从更新为1.0.0-alpha06
会1.0.0-alpha08
破坏很多内容,但 CameraX CameraControl 具有以下两种方法:
通过范围从
0f
到 的线性缩放值设置当前缩放1.0f
。
linearZoom 0f
代表最小变焦,linearZoom 1.0f
代表最大变焦。其优点linearZoom
是,它确保视野 (FOV) 随值线性变化linearZoom
,适用于滑块 UI 元素(同时setZoomRatio(float)
适用于捏缩放手势)。
按比例设置当前缩放比例。
它会修改 current
zoomRatio
,linearZoom
因此如果应用程序正在观察zoomRatio
或linearZoom
,它们也会获得更新。如果比例小于CameraInfo.getMinZoomRatio()
或大于CameraInfo.getMaxZoomRatio()
,返回ListenableFuture
将失败,IllegalArgumentException
并且不会修改当前缩放比例。应用程序有责任限制该比率。
另请参阅Executor,还有CameraXExecutors
.
另请参阅发行说明或提交...了解所有 API 更改,这些更改破坏了 CameraXBasic 示例。我不会再解释这些 API 差异(因为这不是问题),但已经分叉了;请参阅问题#131(到目前为止,至少预览版可以运行)。
它实际上是这样工作的:
val camera: Camera = cameraProvider.bindToLifecycle(this as LifecycleOwner, cameraSelector, preview)
val control: CameraControl = camera.cameraControl
control.setZoomRatio(5.0f)
Run Code Online (Sandbox Code Playgroud)
在我的 Motorola XT1900 上使用1.0f
之前的变焦比:8.0f
val info: CameraInfo = camera.cameraInfo
val cameraId = (info as Camera2CameraInfoImpl).cameraId
val zoomRatio = info.getZoomRatio().value
val maxZoomRatio = info.getMaxZoomRatio().value
val minZoomRatio = info.getMinZoomRatio().value
val linearZoom = info.getLinearZoom().value
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1335 次 |
最近记录: |