VrVideoView 移除 UI

VrVideoView remove UI

我正在尝试以干净的方式在 googlevr 应用程序中显示 3D 立体视频,而不显示 UI。我知道可用性准则,但设备 运行 应用程序将始终以某种演示形式保留在查看器中,因此预计不会有触摸交互。

我正在使用 VrVideoView。 所以我已经摆脱了全屏按钮、信息按钮、立体模式按钮、名为 "transition view" 的 google 纸板教程屏幕和用于移动视图的触摸跟踪。

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

我还默认启用了全屏立体声。

videoWidgetView.setDisplayMode(VrWidgetView.DisplayMode.FULLSCREEN_STEREO);

但是我无法删除关闭按钮 "x" 和选项按钮。

我认为 "x" 是 VrWidgetViewfullscreenBackButtonVrVideoView 的父级。它没有控制其可见性的方法。

有没有办法删除这两个按钮?
也许子类化并重写部分小部件代码?
也许只是在这些角上放置一个黑色覆盖层的小技巧?


我也按照建议试过了

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)'

请检查此 post:Google VR Unity Divider, Settings and Back button hiding in v0.9

VrVideoView 扩展 VrWidgetView。在那里您会找到有关如何在 updateButtonVisibility() 方法中禁用设置按钮的线索:vrUiLayer.setSettingsButtonEnabled(displayMode == 3).

或者尝试跟踪按钮的资源 ID 并执行:

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 */
}

对我来说,这个解决方案很有效。 它使用字段功能来获取 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();
}

别忘了导入 class

import com.google.vr.cardboard.UiLayer

请注意,使用 vrLayer.setEnabled(false) 也会隐藏中心线,留下完整干净的虚拟现实体验。