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" 是 VrWidgetView
的 fullscreenBackButton
,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)'
请检查此 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)
也会隐藏中心线,留下完整干净的虚拟现实体验。
我正在尝试以干净的方式在 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" 是 VrWidgetView
的 fullscreenBackButton
,VrVideoView
的父级。它没有控制其可见性的方法。
有没有办法删除这两个按钮?
也许子类化并重写部分小部件代码?
也许只是在这些角上放置一个黑色覆盖层的小技巧?
我也按照建议试过了
findViewById(R.id.ui_back_button).setVisibility(GONE);
甚至
findViewById(com.google.vr.widgets.common.R.id.ui_back_button).setVisibility(GONE);
没有成功,他们给出:
NullPointerException: 尝试在空对象引用
请检查此 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)
也会隐藏中心线,留下完整干净的虚拟现实体验。