这个项目是什么

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 依然是更直接的选择。

仓库地址:tpnet/Libgdx-Backend-TextureView-Android