我正在尝试以纯净的方式在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”和选项按钮。
我认为“ x”是fullscreenBackButton
的{{1}}的{{1}},是VrWidgetView
的父级。哪些方法无法控制其可见性。
是否可以删除这两个按钮?
也许继承并重写了部分小部件代码?
也许只是一个小技巧,在这些角落上方放置了黑色覆盖物?
我也按照建议尝试了
VrVideoView
甚至
findViewById(R.id.ui_back_button).setVisibility(GONE);
没有成功,他们给出:
NullPointerException :尝试在空对象引用上调用虚拟方法'void android.view.View.setVisibility(int)'
答案 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体验。