如何解决相机X被另一个开始取消
我正在使用cameraX库实现自定义相机。我正在集中精力,我做了下面的事情
viewFinder.setOnTouchListener { v,event ->
return@setOnTouchListener when (event.action) {
MotionEvent.ACTION_DOWN -> {
true
}
MotionEvent.ACTION_UP -> {
// The below code is for focusing
val factory = SurfaceOrientedMeteringPointFactory(
viewFinder.width.toFloat(),viewFinder.height.toFloat()
)
val point = factory.createPoint(event.x,event.y)
try {
val action = FocusMeteringAction.Builder(point,FocusMeteringAction.FLAG_AF)
.apply {
disableAutoCancel() //focus only when the user tap the preview
}.build()
val future = cameraControl?.startFocusAndMetering(action)
future?.addListener(Runnable {
--->line 66 val result = future?.get()
println("log result ---> $result")
},cameraExecutor)
} catch (e: CameraInfoUnavailableException) {
println("log error ---> $e")
}
true
}
else -> false // Unhandled event.
}
}
现在,这是我关注的重点所在,虽然不太准确,但可以。并且在5到6次对焦后,应用程序崩溃并关闭。
FATAL EXCEPTION: pool-2-thread-1
...
...
java.lang.Error: java.util.concurrent.ExecutionException: androidx.camera.core.CameraControl$OperationCanceledException: Cancelled by another startFocusAndMetering()
...
...
...MainActivity$onCreate$2$1.run(MainActivity.kt:66)
我不知道为什么它崩溃并且它不经常崩溃。有时它将崩溃,有时则不会。
编辑1:-
我知道,当我多次点击对焦时,这种情况正在发生。因此,在开始聚焦之前,如果正在进行,我需要清除之前的聚焦。但是,如何清除以前没有得到的关注。
编辑2:-
我尝试了这个 cameraControl?.cancelFocusAndMetering()
,我只是将其放在try块的第一行。但仍然存在问题。
解决方法
我刚刚删除了此阻止
future?.addListener(Runnable {
val result = future?.get()
println("log result ---> $result")
},cameraExecutor)
,并且工作正常。但是我不知道这是对还是错。
如果有人知道?请回答。目前,我正在将其标记为有效。
,对这里的 java 代码表示歉意。但是根据我的经验,未来?.get() 需要包含在 try,catch 中
future.addListener(() -> {
try
{
FocusMeteringResult result = (FocusMeteringResult) future.get();
if(result.isFocusSuccessful())
{
// Focus has succeeded
}
else
{
// Focus has failed
}
}
catch (ExecutionException e) // Thrown exceptions
{
e.printStackTrace();
}
catch (InterruptedException e) // Thrown exceptions
{
e.printStackTrace();
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。