Android最近几个月发布了一款新的应用编程接口相机。我正在努力理解如何让相机自动对焦。
https://groups.google.com/a/android.com/forum/#!searchin/camerax developers/auto$20focus | sort:date/camerax developers/IQ3KZd8iOIY/LIbrRIqEBgAJ
这里是关于这个话题的讨论,但几乎没有具体的留档。
https://github.com/android/camera-samples/tree/master/CameraXBasic/app/src/main/java/com/android/example/cameraxbasic
这里也是基本的相机应用程序,但我找不到任何文件处理自动对焦。
任何有关文档的提示或要点都很有帮助。另外,我对android还比较陌生,所以很可能我遗漏了一些使上述链接更有用的东西。
只需指出,要使用PreviewView获得“点击聚焦”,您需要使用DisplayOrientedMeteringPointFactory。否则你会搞砸坐标。
val factory = DisplayOrientedMeteringPointFactory(activity.display, camera.cameraInfo, previewView.width.toFloat(), previewView.height.toFloat())
其余的用MatPag的答案。
一些Android设备存在问题,相机不能用相机自动对焦。相机团队意识到了这一点,并正在用内部票据跟踪它,希望很快能得到修复。
使用当前的Cameron aX1.0.0
,您可以通过以下两种方式进行操作:
>
每X秒自动对焦:
previewView.afterMeasured {
val autoFocusPoint = SurfaceOrientedMeteringPointFactory(1f, 1f)
.createPoint(.5f, .5f)
try {
val autoFocusAction = FocusMeteringAction.Builder(
autoFocusPoint,
FocusMeteringAction.FLAG_AF
).apply {
//start auto-focusing after 2 seconds
setAutoCancelDuration(2, TimeUnit.SECONDS)
}.build()
camera.cameraControl.startFocusAndMetering(autoFocusAction)
} catch (e: CameraInfoUnavailableException) {
Log.d("ERROR", "cannot access camera", e)
}
}
关注tap:
previewView.afterMeasured {
previewView.setOnTouchListener { _, event ->
return@setOnTouchListener when (event.action) {
MotionEvent.ACTION_DOWN -> {
true
}
MotionEvent.ACTION_UP -> {
val factory: MeteringPointFactory = SurfaceOrientedMeteringPointFactory(
previewView.width.toFloat(), previewView.height.toFloat()
)
val autoFocusPoint = factory.createPoint(event.x, event.y)
try {
camera.cameraControl.startFocusAndMetering(
FocusMeteringAction.Builder(
autoFocusPoint,
FocusMeteringAction.FLAG_AF
).apply {
//focus only when the user tap the preview
disableAutoCancel()
}.build()
)
} catch (e: CameraInfoUnavailableException) {
Log.d("ERROR", "cannot access camera", e)
}
true
}
else -> false // Unhandled event.
}
}
}
afterMeasured扩展函数是一个简单实用程序:(感谢ch271828n对其进行改进)
inline fun View.afterMeasured(crossinline block: () -> Unit) {
if (measuredWidth > 0 && measuredHeight > 0) {
block()
} else {
viewTreeObserver.addOnGlobalLayoutListener(object : ViewTreeObserver.GlobalLayoutListener {
override fun onGlobalLayout() {
if (measuredWidth > 0 && measuredHeight > 0) {
viewTreeObserver.removeOnGlobalLayoutListener(this)
block()
}
}
})
}
}
摄像机
对象可以通过
val camera = cameraProvider.bindToLifecycle(
this@Activity, cameraSelector, previewView //this is a PreviewView
)
问题内容: 假设,我需要在特定的网站上执行一组过程,例如,填写一些表格,单击“提交”按钮,将数据发送回服务器,接收响应,再次基于响应执行一些操作,然后将数据发送回服务器网站的。我知道python中有一个webbrowser模块,但是我想这样做而不调用任何Web浏览器。它不必是一个纯脚本。 在python中有可用的模块可以帮助我做到这一点吗? 谢谢 问题答案: 您也可以看看机械化。它的意思是处理 “
我有一个bean,我必须自己创建它(使用),它有和注释。 如何让Spring处理我的bean中的这些注释? 相关问题: 在Spring,我可以从自动编织的豆子里自动编织新的豆子吗?
嘿,我尝试使用此代码自动创建docker容器 但我也得到了这个错误内部服务器错误(“OCI运行时创建失败:container\u linux。go:370:启动容器进程导致:exec:“git clone”:stat git clone:没有这样的文件或目录:未知”) 有什么方法可以解决这个问题吗?或者有其他方法吗?
启动Apache Spark集群通常是通过代码库提供的spark-submit shell脚本完成的。但问题是,每次集群关闭并重新启动时,您都需要执行那些shell脚本来启动spark集群。 我也对其他解决方案持开放态度。
问题内容: 将内容添加到ListView时,我希望它自动向下滚动。 我正在使用SwiftUI 和a 作为控制器。新数据将追加到列表中。 当我将新数据追加到消息列表时,我希望列表向下滚动。但是,我必须手动向下滚动。 问题答案: 更新:在iOS 14中,现在有一种本机方式可以执行此操作。我正在这样做 对于iOS 13及以下版本,您可以尝试: 我发现翻转视图对我来说似乎很好。这将在底部启动ScrollV
问题内容: 我有兴趣在JFrame中提供自动补全框。触发机制将基于助记符(我认为),但是我不太确定“自动补全框”应使用什么(我希望在用户按下键时对结果进行过滤)。 您将如何实施?某种JFrame还是JPopupMenu? 我想知道这是如何实现的,所以请不要发布指向可用的[J] Components的链接。 问题答案: Sun的教程“使用Swing组件”中提供了 一个自动完成文本区域 的示例 。 它