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