VrVideoView删除UI

时间:2018-09-23 12:43:56

标签: android google-vr

我正在尝试以纯净的方式在googlevr应用中显示3D立体视频,而不显示UI。我知道可用性指南,但是运行该应用程序的设备将始终以演示形式保存在查看器中,因此不会发生触摸交互。

我正在使用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的{​​{1}}的{​​{1}},是VrWidgetView的父级。哪些方法无法控制其可见性。

是否可以删除这两个按钮?
也许继承并重写了部分小部件代码?
也许只是一个小技巧,在这些角落上方放置了黑色覆盖物?


我也按照建议尝试了

VrVideoView

甚至

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

没有成功,他们给出:
NullPointerException :尝试在空对象引用上调用虚拟方法'void android.view.View.setVisibility(int)'

2 个答案:

答案 0 :(得分:1)

请检查此帖子: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 */
}

答案 1 :(得分:0)

对我来说,此解决方案有效。 它使用字段功能获取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)还会隐藏中心线,从而留下完整的干净vr体验。