VrVideoView удалить пользовательский интерфейс - PullRequest
0 голосов
/ 23 сентября 2018

Я пытаюсь отобразить трехмерное стерео-видео в приложении googlevr в чистом виде, не показывая пользовательский интерфейс.Я знаю о рекомендациях по юзабилити, но устройство, на котором запущено приложение, всегда будет храниться внутри программы просмотра в виде демонстрации, поэтому взаимодействие с сенсором не ожидается.

Я использую VrVideoView.Так что я уже избавился от полноэкранной кнопки, информационной кнопки, кнопки стереорежима, учебного экрана Google картона с названием «Переходный вид» и сенсорного отслеживания для перемещения вида.

videoWidgetView.setFullscreenButtonEnabled(false);
videoWidgetView.setInfoButtonEnabled(false);
videoWidgetView.setStereoModeButtonEnabled(false);
videoWidgetView.setTransitionViewEnabled(false);
videoWidgetView.setTouchTrackingEnabled(false);

Я также включил полноэкранный режим стерео по умолчанию.

videoWidgetView.setDisplayMode(VrWidgetView.DisplayMode.FULLSCREEN_STEREO);

Но я не могу удалить кнопку закрытия "x" и кнопку выбора.

VrVideoView annoying UI

Я думаю, что«x» - это fullscreenBackButton из VrWidgetView, родительский элемент VrVideoView.У которого нет методов для управления его видимостью.

Есть ли способ удалить эти две кнопки?
Может быть, создание подклассов и переписывание части кода виджета?
Может быть, немного взломатьставить черное наложение над этими углами?


Я также пытался, как предлагалось

findViewById(R.id.ui_back_button).setVisibility(GONE);

или даже

findViewById(com.google.vr.widgets.common.R.id.ui_back_button).setVisibility(GONE);

без успеха,они дают:
NullPointerException : попытка вызвать виртуальный метод 'void android.view.View.setVisibility (int)' для ссылки на нулевой объект

Ответы [ 2 ]

0 голосов
/ 16 октября 2018

Для меня это решение работает.Он использует функциональность поля для получения vrUiLayer, который является частным членом VrWidgetView , который является родителем VrVideoView .

Field f;
try {
    f = this.videoWidgetView.getClass().getSuperclass().getDeclaredField("vrUiLayer");
    f.setAccessible(true);
    UiLayer vrLayer = (UiLayer) f.get(this.videoWidgetView);

    // - here you can directly access to the UiLayer class - //


    // to hide the up-right settings button
    vrLayer.setSettingsButtonEnabled(false);

    //setting listener to null hides the x button
    vrLayer.setBackButtonListener(null);

    // these visibility options are frequently updated when you play videos,
    // so you have to call them often


    // OR


    vrLayer.setEnabled(false); // <- just hide the UI layer


} catch (NoSuchFieldException e) {
    e.printStackTrace();
} catch (IllegalAccessException e) {
    e.printStackTrace();
}

Не забудьте импортироватькласс

import com.google.vr.cardboard.UiLayer

Остерегайтесь того, что использование vrLayer.setEnabled(false) скрывает и центральную линию, оставляя полный чистый опыт.

0 голосов
/ 23 сентября 2018

Пожалуйста, проверьте этот пост: Google VR Unity Divider, Настройки и кнопка Назад, скрывающаяся в v0.9 .

Расширение VrVideoView VrWidgetView .Там вы найдете подсказку о том, как отключить кнопку настроек в методе updateButtonVisibility(): vrUiLayer.setSettingsButtonEnabled(displayMode == 3).

В качестве альтернативы попробуйте отследить идентификатор ресурса кнопок и выполните:

findViewById(R.id.ui_back_button).setVisibility(GONE);
findViewById(R.id.ui_settings_button).setVisibility(GONE);

Вы также можете перебирать все ресурсы и пытаться отключить их один за другим:

final R.drawable drawableResources = new R.drawable();
final Class<R.drawable> c = R.drawable.class;
final Field[] fields = c.getDeclaredFields();

for (int i = 0, max = fields.length; i < max; i++) {
    final int resourceId;
    try {
        resourceId = fields[i].getInt(drawableResources);
    } catch (Exception e) {
        continue;
    }
    /* make use of resourceId for accessing Drawables here */
}
...