news 2026/5/31 4:14:45

在使用 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/5/28 18:11:28

消费者行为预测:购买意向模型在TensorRT上实时更新

消费者行为预测:购买意向模型在TensorRT上实时更新 在电商大促的深夜,一个用户刚浏览完某款智能手表,页面还没刷新,推荐栏就已经出现了匹配其预算和偏好的表带与配件——这种“读心式”推荐的背后,往往依赖着毫秒级响应…

作者头像 李华
网站建设 2026/5/29 0:12:45

彩虹[特殊字符]字体脚本

vi /usr/bin/lolcat #!/bin/sh awk ‘{ srand(); for (i 1; i < length($0); i) { c substr($0, i, 1); color int(rand() * 256); printf “\033[38;5;%dm%c\033[0m”, color, c; } print “”; }’ chmod 777 fortune | cowsay | lolcat # 直接输出彩虹效果

作者头像 李华
网站建设 2026/5/29 18:29:50

【钓鱼攻防】浅谈制作免杀word文档钓鱼

当你跌入深渊退无可退的时候&#xff0c;眼前就只剩下向上这一条路了 前言 网络安全技术学习&#xff0c;承认⾃⼰的弱点不是丑事&#xff0c;只有对原理了然于⼼&#xff0c;才能突破更多的限制。 拥有快速学习能力的安全研究员&#xff0c;是不能有短板的&#xff0c;有的只能…

作者头像 李华
网站建设 2026/5/28 12:48:54

嘉立创PCB布线工业EMC设计:系统学习与实践

嘉立创PCB布线工业EMC设计&#xff1a;从“能用”到“可靠”的实战跃迁在一次轨道交通信号采集项目的调试现场&#xff0c;工程师小李的设备总是在变频电机启动时死机。示波器抓取的数据显示&#xff0c;MCU的复位引脚上出现了高达2.3V的瞬态干扰脉冲——而这一切&#xff0c;竟…

作者头像 李华
网站建设 2026/5/30 14:09:51

Keil5新建工程图解说明:每一步清晰呈现

Keil5新建工程实战指南&#xff1a;从零开始搭建一个STM32项目你是不是刚接触嵌入式开发&#xff0c;打开Keil uVision5时一脸茫然&#xff1f;“怎么新建工程&#xff1f;选什么芯片&#xff1f;启动文件要不要加&#xff1f;RTE是啥&#xff1f;宏定义怎么填&#xff1f;”—…

作者头像 李华
网站建设 2026/5/30 5:04:04

机器人路径规划AI:决策网络通过TensorRT实现动态响应

机器人路径规划AI&#xff1a;决策网络通过TensorRT实现动态响应 在智能仓储的无人叉车系统中&#xff0c;一个毫秒级的延迟就可能导致碰撞或任务中断。这类设备每秒需处理来自激光雷达、摄像头和IMU的多源数据&#xff0c;并在20ms内完成环境建模与路径重规划——这正是传统控…

作者头像 李华