简单了解一下SurfaceView

0 背景

最近好几次面试被问到SurfaceView的特点了,都没回答出来。

SurfaceView和TextureView也是Compose这样的声明式ui唯二实现不了控件;因为他们就不是View,而是Android提供的和Surface相关的显示系统
特此简单了解一下。

1 应用场景

高速刷新或者处理数据较大的内容,视频播放or相机取景等。如果需要对相机的数据进行二次处理再展示,推荐TextureView。
如果能在主线程中绘制,就不要用SurfaceView。

2 实现绘图板应用

代码链接:
https://github.com/talish7/CutomViewDemo/tree/master/Draw
请添加图片描述

3 Surface & SurfaceView & SurfaceHolder

相当于MVC架构

  • Surface:
    每一个Window都有会一个Surface;
    有多个缓冲区;双缓冲区渲染
    显示在屏幕的称为前端缓冲区,没显示的后端缓冲区;可以在后端缓冲区绘制下一帧的内容;
    每隔一段时间交换两块缓冲区;
    不透明的矩形区域
  • SurfaceView:
    持有一个独立的Surface;
  • SurfaceHolder:
    Surface的持有者;
    使用SurfaceView时并不能直接操作Surface,否则可能会产生一些不可预期的操作,所以Android为我们提供SurfaceHolder来间接操作Surface。
    提供addCallback ( SurfaceHolder.Callback callback)
    来监听Surface的生命周期。

4 注意

1)SurfaceHolder获取到SurfaceView自带的缓冲画布,并对这个画布加锁;
在绘制完成后,将缓冲画布释放,并将画布的内容更新到主线程的画布上。
2)SurfaceView是可以在子线程中执行绘制的,如果不对画布加锁,那么多个子线程同时更新画布就会产生无法预期的情况,所以需要加锁。
3)surfaceHolder.lockCanvas()时要进行必要的非空判断以及加入重试机制,绘制完成后,要及时释放画布。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1542280.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【Godot4.3】点数据简易表示法和Point2D

概述 在构造多点路径时我们会用到PackedVector2Array,并使用Vector2()来构造点。在手动创建多点数据时,这种写法其实很难看,有大量重复的Vector2(),比如下面这样: var points [Vector2(100,100),Vector2(200,200),V…

[Python]二、Python基础数据科学库(1)

F:\BaiduNetdiskDownload\2023人工智能开发学习路线图\2、机器学习核心技术\1、零基础快速入门机器学习 1.机器学习概述 1.1 人工智能概述 1.1.1 人工智能与机器学习、深度学习 1956年-达特茅斯会议-人工智能的起点 人工智能和机器学习、深度学习的关系: 1. 机器学习…

软考(9.22)

1 在浏览器的地址栏中输入xxxyftp.abc.can.cn,在该URL中( )是要访问的主机名。 A.xxxyftp B.abc C.can D.cn 协议://主机名.域名.域名后缀或IP地址(:端口号)/目录/文件名。 本题xxxyftp是主机名,选择A选项。 2 假设磁盘块与缓冲区大小相同,…

Django基础-创建新项目,各文件作用

学习Django的前置知识: python基本语法:需要掌握Python中的变量、循环、条件判断、函数等基本概念。面向对象编程(OOP):Django的核心架构基于面向对象编程,许多功能(如模型和视图)依…

【无人机设计与控制】 基于matlab的蚁群算法优化无人机uav巡检

摘要 本文使用蚁群算法(ACO)优化无人机(UAV)巡检路径。无人机巡检任务要求高效覆盖特定区域,以最小化能源消耗和时间。本研究提出的算法通过仿生蚁群算法优化巡检路径,在全局搜索和局部搜索中平衡探索与开…

文档布局内容检测系统源码分享

文档布局内容检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer…

银河麒麟高级服务器操作系统V10外接硬盘挂载指南

银河麒麟高级服务器操作系统V10外接硬盘挂载指南 1、临时挂载外接硬盘2、永久挂载外接硬盘3、总结 💖The Begin💖点点关注,收藏不迷路💖 在使用银河麒麟高级服务器操作系统V10时,您可能希望将外接硬盘(如sd…

django应用JWT(JSON Web Token)实战

文章目录 一、什么是JWT二、为什么使用JWT三、在django项目中如何应用JWT1、安装djangorestframework-simplejwt库:2、在settings.py中配置JWT认证:3、在urls.py中配置JWT的获取和刷新路由: 四、JWT如何使用1、调用生成JWT的接口获取JWT2、客…

C/C++内存管理 ——

目录 五、C/C内存管理 1、C/C内存分布 2、C语言中动态内存管理方式:malloc/calloc/realloc/free 3、C内存管理方式 1.new/delete操作内置类型 2.new和delete操作自定义类型 4、operator new与operator delete函数 5、new和delete的实现原理 1.内置类…

十六 未来信息综合技术(考点篇)试题

SaaS:软件即服务,PaaS:平台即服务,LaaS:基础设施即服务。 SaaS:偏向于提供各种软件接口来提供相关的服务;PaaS:偏向于吧一些基础的功能整合成一个平台,把整个平台或部分…

【人工智能】Linux系统Mamba安装流程

在编译安装 mamba 之前,你需要确保已安装正常的PyTorch环境。 # 安装必要的系统依赖 sudo apt update sudo apt install build-essential # 安装mamba依赖 pip install packaging wheel # 克隆仓库 git clone https://github.com/Dao-AILab/causal-conv1d.git git …

【python】修改字典的内容

person {"name": "John", "age": 30, "city": "New York"} print("最开始的信息:",person)def process_person_info(person):# 检查对象中是否包含所有必要的键if name in person and age in person …

计算机人工智能前沿进展-大语言模型方向-2024-09-22

计算机人工智能前沿进展-大语言模型方向-2024-09-21 引言: 全球最热销的国产游戏-《黑神话: 悟空》不仅给世界各地玩家们带来愉悦,而且对计算机人工智能研究也带来新的思考。在本期的论文速读中,我们带来一篇关于视觉语言模型(VLMs&#xf…

Java只有国人在搞了?

从Java诞生到现在,在全球一直属于最大的开发平台,拥有着世界上最多的开发者和最活跃的社区。你说Java只有国人在搞就有点过分了,Java中常用的主流框架全是外国人写的,虽说阿里也为Java做了很多贡献,但你还真没有资格说…

英伟达RTX 4090即将在10月份停产,RTX 50震撼来袭,你准备好了吗?

据多家媒体报道,英伟达(NVIDIA)及其合作伙伴计划于2024年10月停止生产其旗舰级显卡GeForce RTX 4090及其衍生型号RTX 4090D。尽管该计划尚未得到官方正式确认,但多家媒体和供应链消息均指出,这一决定旨在为即将到来的新…

vscode 配置rust格式化的正确方法

vscode 配置rust格式化的正确方法: 在settings.json里输入: "[rust]": {"editor.defaultFormatter": "rust-lang.rust-analyzer","editor.formatOnSave": true}

golang学习笔记6-更方便的转换、自定义包及网络部署【推荐收藏】

在上一个笔记中,我讲了基本数据类型的转换。不难发现,string和基本类型的互转比较麻烦,所以我自定义了一个包strtrans,封装了四个函数:ToString(),ToInt(),ToFloat(),ToBool()。其中ToString()适用于整数型&#xff0c…

关于字节 c++

字节的介绍 字节是计算机中最小的存储单位,通常由8个二进制位组成,用来存储一个字符。在C中,字节也是基本数据类型之一,用关键字"byte"来表示。字节主要用于存储一些较小的数据,如整数、字符等。字节的大小…

UE5入门

1.快捷键 工欲善其事,必先利其器,所以学习UE关卡编辑器快捷键必不可少 1.1Actor 选中actor , Q:选择模式 W:平移 E:旋转 R:缩放 CtrlB:打开Actor文件位置 F:聚焦 Ctr…

RP2040 C SDK GPIO和IRQ 唤醒功能使用

RP2040 C SDK GPIO和中断功能使用 📑RP2040 中断功能简介 Each core is equipped with a standard ARM Nested Vectored Interrupt Controller (NVIC) which has 32 interrupt inputs. Each NVIC has the same interrupts routed to it, with the exception of the…