如何解决ArFragment SceneView 在使用 ViewBinding 时返回 Null
当我使用视图绑定时arFragment.arSceneView
返回 null。使用 kotlin 合成插件时,相同的代码也能工作。
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val binding= ActivitySceneFormBinding.inflate(layoutInflater)
setContentView(binding.root)
ModelRenderable.builder()
.setSource(this,R.raw.sunglasses2)
.build()
.thenAccept { modelRenderable ->
glasses.add(modelRenderable)
modelRenderable.isShadowCaster = false
modelRenderable.isShadowReceiver = false
}
val sceneView = arFragment.arSceneView
sceneView.cameraStreamRenderPriority = Renderable.RENDER_PRIORITY_FIRST //scene view must not be null error
val scene = sceneView.scene
scene.addOnUpdateListener {
if (faceRegionsRenderable != null) {
sceneView.session
?.getAllTrackables(AugmentedFace::class.java)?.let {
for (f in it) {
if (!faceNodeMap.containsKey(f)) {
val faceNode = AugmentedFaceNode(f)
faceNode.setParent(scene)
faceNode.faceRegionsRenderable = faceRegionsRenderable
faceNodeMap[f] = faceNode
} else if (changeModel) {
faceNodeMap.getValue(f).faceRegionsRenderable = faceRegionsRenderable
}
}
changeModel = false
// Remove any AugmentedFaceNodes associated with an AugmentedFace that stopped tracking.
val iter = faceNodeMap.entries.iterator()
while (iter.hasNext()) {
val entry = iter.next()
val face = entry.key
if (face.trackingState == TrackingState.STOPPED) {
val faceNode = entry.value
faceNode.setParent(null)
iter.remove()
}
}
}
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。