我是ArCore的新手并使用ArFragment。我想展示我的菜单"查看平面时查看并隐藏此加载图像。
我使用" arFragment.getArSceneView.getScene()。setOnUpdateListener "。 每当我实现自己的" setOnUpdateListener"时,我都可以显示我的菜单,但这个加载图像不会隐藏。当我不实现updateListener时,此图像仅自动隐藏。 以下是来自activity_main.xml的片段和来自MainActivity.java的侦听器
<fragment android:name="com.google.ar.sceneform.ux.ArFragment"
android:id="@+id/ux_fragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
ArSceneView arSceneView =arFragment.getArSceneView();
arSceneView.getScene().setOnUpdateListener(
frameTime -> {
Frame frame = arSceneView.getArFrame();
if (frame == null) {
return;
}
if (frame.getCamera().getTrackingState() != TrackingState.TRACKING) {
return;
}
for (Plane plane : frame.getUpdatedTrackables(Plane.class)) {
if (plane.getTrackingState() == TrackingState.TRACKING) {
Log.e("********************","");
hsv.setVisibility(View.VISIBLE);
}
}
});
答案 0 :(得分:2)
您可以通过隐藏视图,然后将其设置为null以使其不会重新出现,从而解决在启动时始终显示平面发现视图的问题。在onCreate()
添加:
arFragment = (ArFragment)
getSupportFragmentManager().findFragmentById(R.id.ux_fragment);
arFragment.getPlaneDiscoveryController().hide();
arFragment.getPlaneDiscoveryController().setInstructionView(null);
答案 1 :(得分:0)
如果您设置了自己的OnUpdateListener
,则必须在arFragment.onUpdate(frameTime);
的实施中致电OnUpdateListener
。在你的情况下:
ArSceneView arSceneView = arFragment.getArSceneView();
arSceneView.getScene().setOnUpdateListener(
frameTime -> {
Frame frame = arSceneView.getArFrame();
if (frame == null) {
return;
}
if (frame.getCamera().getTrackingState() != TrackingState.TRACKING) {
return;
}
for (Plane plane : frame.getUpdatedTrackables(Plane.class)) {
if (plane.getTrackingState() == TrackingState.TRACKING) {
Log.e("********************","");
hsv.setVisibility(View.VISIBLE);
}
}
arFragment.onUpdate(frameTime);
});
这样一旦发现了飞机,你仍然可以在没有停留的情况下显示InstructionView。
答案 2 :(得分:0)
我有以下代码,可能更易于使用。通过扩展ArFragment类,您可以操纵视图和行为。
OnResume调用onStart(),它将显示planeDiscoveryController(手移动)直到找到一个Plane。这就是为什么我在自己的onResume方法中调用hide()的原因。
BaseArFragment的OnWindowFocusChanged将强制屏幕扩展为全屏。通过覆盖该方法,我删除了正在改变屏幕的标志,而只保留了用于保持屏幕打开和明亮的标志。
@RequestParam