news 2026/7/1 14:22:10

在使用 Android Jetpack Compose的 App里创建 SurfaceView和Surface

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
在使用 Android Jetpack Compose的 App里创建 SurfaceView和Surface

基本方法是使用AndroidView创建surfaceview,在surfaceHolder的callback里取得surface

@Composable fun SurfaceViewScreen() { val context = LocalContext.current // 用于保存 Surface 引用 var surfaceHolder: SurfaceHolder? by remember { mutableStateOf(null) } AndroidView( factory = { ctx -> SurfaceView(ctx).apply { // 设置全屏布局参数 layoutParams = ViewGroup.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT ) // 添加 SurfaceHolder 回调 holder.addCallback(object : SurfaceHolder.Callback { override fun surfaceCreated(holder: SurfaceHolder) { // Surface 创建时获取 Surface surfaceHolder = holder val surface = holder.surface if(surface?.isValid == true){ println("surface is valid") } // 在这里可以开始使用 Surface startDrawingOnSurface(surface) println("Surface created: $surface") } override fun surfaceChanged( holder: SurfaceHolder, format: Int, width: Int, height: Int ) { println("Surface changed: $width x $height") } override fun surfaceDestroyed(holder: SurfaceHolder) { // 清理资源 surfaceHolder = null println("Surface destroyed") } }) } }, modifier = Modifier.fillMaxSize() ) } // 在 Surface 上绘制的示例函数 private fun startDrawingOnSurface(surface: android.view.Surface) { // 在后台线程进行绘制 Thread { try { val canvas = surface.lockCanvas(null) try { // 绘制红色背景 canvas.drawColor(Color.RED) // 可以在这里进行更多绘制操作 // ... } finally { surface.unlockCanvasAndPost(canvas) } } catch (e: Exception) { e.printStackTrace() } }.start() }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/1 20:40:54

hal_uartex_receivetoidle_dma工业级串口接收的完整指南

工业级串口接收的终极方案:用HAL_UARTEx_ReceiveToIdle_DMA彻底告别丢包与高CPU占用你有没有遇到过这样的场景?你的STM32正在跑Modbus RTU协议,突然某个读取指令没响应;传感器以115200波特率连续发数据,主控偶尔“吃掉…

作者头像 李华
网站建设 2026/6/25 7:19:32

windows11下载zotero-pdf2zh

前言 安装Python和Zotero;安装uv或者conda二选一,我安装的是conda 建议下载3.12.0版本Python 插件目前支持Zotero 7以及Zotero 8 第一步:安装uv/conda 1.安装uv: # 方法一: 下载脚本安装(推荐) # macOS/Linux wget -qO- htt…

作者头像 李华
网站建设 2026/6/18 19:48:26

python小程序 公安基层民警心理数字画像与救助平台 _03zips22

目录已开发项目效果实现截图开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!已开发项目效果实现截图 同行可拿货,招校园代理 python小程序 公安基层民警心理数字画像与救助平台 _03zips22…

作者头像 李华
网站建设 2026/6/26 12:01:21

51单片机最小系统中LED指示灯的设计要点

51单片机最小系统中LED指示灯的设计要点从“点亮第一盏灯”说起:为什么我们要认真对待这个最简单的外设?在嵌入式开发的世界里,“点亮一个LED”常被戏称为程序员的“Hello World”。但别小看这盏小小的灯——它不只是教学演示中的点缀&#x…

作者头像 李华
网站建设 2026/7/1 21:19:00

could not find driver错误解析:驱动开发入门必看

“could not find driver”深度解析:从数据库到内核模块的全链路排错指南你有没有在深夜调试一个看似简单的服务时,突然被一条错误拦住去路——“could not find driver”?它不痛不痒,只一句话,却足以让整个应用启动失…

作者头像 李华