getGameView
获取游戏视图控件
getGameView 用于获取小游戏在原生层渲染的 View 控件。
小游戏的画面是通过一个自定义的 Surface(如 TextureView 或 SurfaceView)呈现的。通过此方法,你可以将游戏画面像普通的 Android View 一样添加到你的 Activity 布局、Fragment 或任何 View 容器中。
方法声明
java
/**
* 获取小游戏 View 实例
* * @return 返回游戏渲染的 View 对象;若环境尚未初始化,可能返回 null。
*/
View getGameView();核心运行行为
1. 调用时机
通常在 create() 执行成功并监听到进入 GAME_STATE_WAITING 状态后调用。此时,底层的渲染表面已经准备就绪。
2. 视图属性
- 类型:返回的是标准的
android.view.View,你可以对其设置LayoutParams、透明度、动画等。 - 唯一性:一个
GameHandle实例对应一个唯一的GameView。
3. 生命周期绑定
当调用 destroy() 时,该 View 会被销毁并从其父容器中自动(或需手动)处理。销毁后不可复用。
代码示例:将游戏添加到布局
java
// 1. 在布局中预留一个容器(如 FrameLayout)
FrameLayout container = findViewById(R.id.game_container);
// 2. 监听到状态变为 WAITING 或 RUNNING 时获取 View
gameHandle.setGameStateListener(new SUDRTGameHandle.GameStateChangeListener() {
@Override
public void onStateChanged(int fromState, int toState) {
if (toState == SUDRTGameHandle.GAME_STATE_WAITING) {
// 切换到主线程操作 UI
runOnUiThread(() -> {
View gameView = gameHandle.getGameView();
if (gameView != null && gameView.getParent() == null) {
// 3. 将游戏视图添加到容器中
FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT
);
container.addView(gameView, lp);
}
});
}
}
});注意事项
- 线程限制:由于涉及 UI 操作,添加或移除
getGameView()返回的对象必须在 Android 主线程(UI Thread) 执行。 - 重复添加检查:在添加 View 之前,建议检查
gameView.getParent() == null,防止因状态多次回调导致IllegalStateException: The specified child already has a parent.。 - 尺寸调整:游戏画面通常会自动适配 View 的宽高。如果你需要强制改变游戏的分辨率或比例,通常应通过
setGameStartOptions中的配置项进行,而非仅仅缩放 View。