这个项目是什么
libGDX 在 Android 上默认用 SurfaceView 渲染游戏画面。SurfaceView 性能好,但它在窗口里的层级比较特殊,不容易像普通 View 那样做透明度、旋转和动画,也很难和原生控件叠在一起。LibgdxTextureView 做的事就是把 libGDX 的渲染 View 从 SurfaceView 换成 TextureView,让游戏画面能正常参与 View 树的布局和层叠。README 注明当前支持到 libGDX 1.14.0。
为什么用 TextureView
README 对比了两种 View 的差别,TextureView 可以像普通 Android View 一样被操作:
- 透明度控制:可以直接和原生 UI 组件层叠显示
- 动态属性修改:
setAlpha()、setRotation()等 - 动画处理:支持 Android 标准的 View 属性动画
SurfaceView 做这几件事要么做不到,要么得绕不少路。比如想在游戏画面上盖一层半透明的原生按钮,或者让游戏画面本身淡入淡出,换成 TextureView 之后就顺手多了。项目 README 里贴了三张对比图:SurfaceView 置底、SurfaceView 透明置顶,以及改后的 TextureView 与原生 View 透明层叠。
使用方法
第一步是把 libs 目录里对应版本的 jar 加进项目依赖。
第二步是在 AndroidApplication(或作为 View 嵌入的 Activity)里配置:
// 1. 创建配置
val cfg = AndroidApplicationConfiguration()
// 2. 核心:启用 TextureView
cfg.useTextureView = true
// 3. 可选:设置透明通道,和原生 View 透明层叠
cfg.r = 8
cfg.g = 8
cfg.b = 8
cfg.a = 8
// 4. 初始化并在布局中使用
val mGdxAdapter = MyGdxAdapter()
val mGdxView = initializeForView(mGdxAdapter, cfg)
// 把生成的 View 加进布局容器(例如 FrameLayout)
binding.container.addView(mGdxView)
关键就是 useTextureView = true,其余初始化和原来的 libGDX 流程一致,生成的 View 直接 addView 到布局容器里。需要透明层叠时,再把 r、g、b、a 四个通道都设成 8 位。
踩坑与思考
README 没有单独写限制,但有一处需要留意:jar 是按 libGDX 版本提供的,README 明确说的是 1.14.0。换其他版本的 libGDX 时,要确认用的是对应版本的 jar,否则替换渲染 View 的那部分可能对不上。
另外,这个项目改的是渲染后端,适合确实需要层叠、透明度或属性动画的场景;如果只是全屏跑游戏,原生的 SurfaceView 依然是更直接的选择。