fix(fragment): 修复 CollectFragment 首次打开相机预览不显示的问题
This commit is contained in:
@@ -92,9 +92,9 @@ class SingleFragmentActivity : BaseActivity() {
|
|||||||
* 根据页面类型返回对应标题文本
|
* 根据页面类型返回对应标题文本
|
||||||
*/
|
*/
|
||||||
private fun getTitleForPage(pageType: PageType): String = when (pageType) {
|
private fun getTitleForPage(pageType: PageType): String = when (pageType) {
|
||||||
PageType.FOOD_COLLECT -> "菜品采集"
|
PageType.FOOD_COLLECT -> "食材采样"
|
||||||
PageType.COOK_MODE -> "设备配置"
|
PageType.COOK_MODE -> "餐品模式"
|
||||||
PageType.SEASONING_CONFIG -> "调料配置"
|
PageType.SEASONING_CONFIG -> "调料区设置"
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ import android.view.ViewGroup
|
|||||||
import android.view.inputmethod.EditorInfo
|
import android.view.inputmethod.EditorInfo
|
||||||
import android.view.inputmethod.InputMethodManager
|
import android.view.inputmethod.InputMethodManager
|
||||||
import androidx.camera.view.PreviewView
|
import androidx.camera.view.PreviewView
|
||||||
|
import androidx.core.view.doOnLayout
|
||||||
import androidx.core.view.updateLayoutParams
|
import androidx.core.view.updateLayoutParams
|
||||||
import androidx.recyclerview.widget.GridLayoutManager
|
import androidx.recyclerview.widget.GridLayoutManager
|
||||||
import com.shuwei.dish.match.R
|
import com.shuwei.dish.match.R
|
||||||
@@ -36,7 +37,7 @@ class CollectFragment : BaseFragment<FragmentCollectBinding>(){
|
|||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
private const val TAG = "CollectFragment"
|
private const val TAG = "CollectFragment"
|
||||||
const val MAX_COUNT = 9
|
const val MAX_COUNT = 18
|
||||||
}
|
}
|
||||||
|
|
||||||
private var selectedFoodId: String? = ""
|
private var selectedFoodId: String? = ""
|
||||||
@@ -194,7 +195,11 @@ class CollectFragment : BaseFragment<FragmentCollectBinding>(){
|
|||||||
initCamera(binding.flCameraPreview)
|
initCamera(binding.flCameraPreview)
|
||||||
currentActivity.setLifecycleCallback(object : SingleFragmentActivity.LifecycleCallback {
|
currentActivity.setLifecycleCallback(object : SingleFragmentActivity.LifecycleCallback {
|
||||||
override fun onActivityResume() {
|
override fun onActivityResume() {
|
||||||
cameraUtils.bind()
|
// 首次进入时 previewView 尚未 attach,由 doOnLayout 负责首次 bind
|
||||||
|
// 从后台切回时 previewView 已 attach,直接 bind 恢复预览
|
||||||
|
if (::previewView.isInitialized && previewView.isAttachedToWindow) {
|
||||||
|
cameraUtils.bind()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onActivityPause() {
|
override fun onActivityPause() {
|
||||||
@@ -355,7 +360,7 @@ class CollectFragment : BaseFragment<FragmentCollectBinding>(){
|
|||||||
|
|
||||||
override fun onResume() {
|
override fun onResume() {
|
||||||
super.onResume()
|
super.onResume()
|
||||||
if (isVisible.not()) return
|
// 不使用 isVisible 判断,首次打开时 View 尚未 attach 到 Window,isVisible 会返回 false 导致遮罩永不隐藏
|
||||||
binding.llCameraFlag.run {
|
binding.llCameraFlag.run {
|
||||||
visibility = View.VISIBLE
|
visibility = View.VISIBLE
|
||||||
postDelayed({
|
postDelayed({
|
||||||
@@ -408,6 +413,10 @@ class CollectFragment : BaseFragment<FragmentCollectBinding>(){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
cameraUtils.setPreviewController(previewView)
|
cameraUtils.setPreviewController(previewView)
|
||||||
|
// doOnLayout 确保 previewView 测量完成(有有效尺寸和 Surface)后再 bind,解决首次打开无预览问题
|
||||||
|
previewView.doOnLayout {
|
||||||
|
cameraUtils.bind()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -64,7 +64,7 @@ class CameraUtils(private var activity: ComponentActivity) {
|
|||||||
)
|
)
|
||||||
cameraSelector = CameraSelector.DEFAULT_BACK_CAMERA
|
cameraSelector = CameraSelector.DEFAULT_BACK_CAMERA
|
||||||
}
|
}
|
||||||
bind()
|
// bind() 由外部在 previewView attach 到窗口后调用,避免首次无预览
|
||||||
}
|
}
|
||||||
|
|
||||||
// if (isCameraReady.not()) {
|
// if (isCameraReady.not()) {
|
||||||
|
|||||||
Reference in New Issue
Block a user