Скрыть загрузочный экран в ArFragment - PullRequest
0 голосов
/ 15 мая 2018

Я новичок в ArCore и использую ArFragment.Я хочу показать мой вид «меню» при обнаружении самолетов и скрыть это изображение загрузки.enter image description here

Я использовал " 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);
                    }
                }
            });

Ответы [ 2 ]

0 голосов
/ 04 июня 2018

Если вы установите свой собственный 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 без его сохранения после обнаружения самолетов.

0 голосов
/ 16 мая 2018

Вы можете обойтись так, чтобы вид при обнаружении самолета всегда отображался при запуске, скрыв вид, а затем установив его в ноль, чтобы он не появлялся снова.В onCreate() добавить:

arFragment = (ArFragment) 
        getSupportFragmentManager().findFragmentById(R.id.ux_fragment);
arFragment.getPlaneDiscoveryController().hide();
arFragment.getPlaneDiscoveryController().setInstructionView(null);
...