Android 如何将快门效果应用于TextureView Camera2预览

Android 如何将快门效果应用于TextureView Camera2预览,android,android-camera2,Android,Android Camera2,我使用TextureView在android应用程序中预览图像捕获。这可以正常工作,但我正试图向用户提供已捕获图像的反馈。我想暂时隐藏图像预览,然后恢复正常预览以提供反馈 我无法将空白图像推送到TextureView,也无法使用setVisibility()属性(不可见和消失)暂时隐藏TextureView本身-此属性没有可见效果。我还可以如何实现此反馈?我使用了一个简单的视图,该视图与相机预览一样大,默认情况下是不可见的,并在拍摄照片时显示100毫秒 camera?.takePicture(s

我使用TextureView在android应用程序中预览图像捕获。这可以正常工作,但我正试图向用户提供已捕获图像的反馈。我想暂时隐藏图像预览,然后恢复正常预览以提供反馈


我无法将空白图像推送到TextureView,也无法使用setVisibility()属性(不可见和消失)暂时隐藏TextureView本身-此属性没有可见效果。我还可以如何实现此反馈?

我使用了一个简单的视图,该视图与相机预览一样大,默认情况下是不可见的,并在拍摄照片时显示100毫秒

camera?.takePicture(shutterCallback, null, takePictureCallback)

private val shutterCallback = Camera.ShutterCallback {
    shutterEffectView.setVisible()
    val handler = Handler()
    val runnable = Runnable { shutterEffectView.setGone() }
    handler.postDelayed(runnable, 100)
}

这段代码是kotlin,我使用快门回调,因为我使用的是旧的CameraAPI。有了camera2 API,我想你必须使用它。我使用了一个简单的视图,它与你的相机预览一样大,默认情况下是不可见的,并且在拍照时显示100毫秒

camera?.takePicture(shutterCallback, null, takePictureCallback)

private val shutterCallback = Camera.ShutterCallback {
    shutterEffectView.setVisible()
    val handler = Handler()
    val runnable = Runnable { shutterEffectView.setGone() }
    handler.postDelayed(runnable, 100)
}

这段代码是kotlin,我使用快门回调,因为我使用的是旧的CameraAPI。对于Camera2API,我认为您必须使用类似于Lukas回答的

,我在纹理视图的顶部还有一个全黑色视图。当用户按下快门按钮时,该黑色视图将淡入然后淡出。我发现这个动画更接近于手机本机摄像头的真实快门效果


view.captureButton.setOnClickListener{
val fadeOutAnimation=AlphaAnimation(1.0f,0.0f)。应用{
持续时间=250
setAnimationListener(对象:Animation.AnimationListener{
覆盖动画重复(动画:动画?){
}
覆盖AnimationEnd(动画:动画?){
view.captureOverlay.alpha=0.0f
view.captureOverlay.isVisible=false
}
覆盖动画开始(动画:动画?){
}
})
}
val fadeInAnimation=字母动画(0.0f,1.0f)。应用{
持续时间=20
setAnimationListener(对象:Animation.AnimationListener{
覆盖动画重复(动画:动画?){
}
覆盖AnimationEnd(动画:动画?){
view.captureOverlay.alpha=1.0f
处理程序(Looper.getMainLooper()).postDelayed({
view.captureOverlay.startAnimation(淡出动画)
}, 20)
}
覆盖动画开始(动画:动画?){
view.captureOverlay.isVisible=true
}
})
}
view.captureOverlay.startAnimation(fadeInAnimation)
/**
*在此捕获图像
*/
}

与卢卡斯的回答类似,我在纹理视图顶部还有一个全黑色视图。当用户按下快门按钮时,该黑色视图将淡入然后淡出。我发现这个动画更接近于手机本机摄像头的真实快门效果


view.captureButton.setOnClickListener{
val fadeOutAnimation=AlphaAnimation(1.0f,0.0f)。应用{
持续时间=250
setAnimationListener(对象:Animation.AnimationListener{
覆盖动画重复(动画:动画?){
}
覆盖AnimationEnd(动画:动画?){
view.captureOverlay.alpha=0.0f
view.captureOverlay.isVisible=false
}
覆盖动画开始(动画:动画?){
}
})
}
val fadeInAnimation=字母动画(0.0f,1.0f)。应用{
持续时间=20
setAnimationListener(对象:Animation.AnimationListener{
覆盖动画重复(动画:动画?){
}
覆盖AnimationEnd(动画:动画?){
view.captureOverlay.alpha=1.0f
处理程序(Looper.getMainLooper()).postDelayed({
view.captureOverlay.startAnimation(淡出动画)
}, 20)
}
覆盖动画开始(动画:动画?){
view.captureOverlay.isVisible=true
}
})
}
view.captureOverlay.startAnimation(fadeInAnimation)
/**
*在此捕获图像
*/
}