我无法在我的应用中显示模型。我正在使用ARcore sceneform计划被检测到,并且模型是从firebase下载的,但是当我点击屏幕时它没有显示。而且,当我分别运行代码时,它可以正常工作,但是当我在一个片段中使用它时,它不起作用
class ArDisplay : Fragment() {
var renderable : ModelRenderable? = null
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// Inflate the layout for requiredContext() fragment
val binding = DataBindingUtil.inflate<FragmentArDisplayBinding>(inflater,R.layout.fragment_ar_display, container, false)
FirebaseApp.initializeApp(requireContext())
val storage = FirebaseStorage.getInstance()
val modelRef = storage.getReferenceFromUrl(ArDisplayArgs.fromBundle(requireArguments()).modelLink)
val arFragment = childFragmentManager
.findFragmentById(R.id.arFragment) as ArFragment
try {
val file = File.createTempFile("out", "glb")
Toast.makeText(requireContext()," Loading " , Toast.LENGTH_LONG).show()
val model = modelRef.getFile(file)
Toast.makeText(requireContext(),"Model Downloaded", Toast.LENGTH_LONG ).show()
//works fine till here
model.addOnSuccessListener { buildModel(file) }
} catch (e: IOException) {
Log.e("an error occured while doing shit", e.printStackTrace().toString())
}
arFragment.setOnTapArPlaneListener { hitResult: HitResult, plane: Plane?, motionEvent: MotionEvent? ->
val anchorNode =
AnchorNode(hitResult.createAnchor())
anchorNode.renderable = renderable
arFragment.arSceneView.scene.addChild(anchorNode)
}
return binding.root
}
private fun buildModel(file: File) {
Toast.makeText(requireContext(), "building Model" , Toast.LENGTH_LONG).show()
val renderableSource = RenderableSource
.builder()
.setSource(
requireContext(),
Uri.parse(file.path),
RenderableSource.SourceType.GLB
)
.setRecenterMode(RenderableSource.RecenterMode.ROOT)
.build()
ModelRenderable
.builder()
.setSource(requireContext(), renderableSource)
.setRegistryId(file.path)
.build()
.thenAccept { modelRenderable: ModelRenderable? ->
Toast.makeText(requireContext(), "Model built", Toast.LENGTH_SHORT).show()
if (modelRenderable != null) {
renderable = modelRenderable
}
}
}
}
直到我将函数构建模型称为函数,该代码才能正常运行,构建模型中的Toast不会显示出来。