android surfaceview 技术,Android中SurfaceView的理解和使用

关于SurfaceView的官方文档地址。

理论概述

SurfaceView是View的子类,它已知的直接子类有GLSurfaceView和VideoView。我们知道每个View都有一个用于绘画的画布,这个画布可以进行任意的扩展。当需要绘制复杂的图像或者对程序的执行效率要求比较高的时候,View并不能满足需求,而SurfaceView可以在主线程之外的线程中向屏幕上绘图,这样可以避免画图任务繁重的时候造成主线程阻塞,从而提高了程序的反应速度。

SurfaceView提供了一个专门用于绘制的surface,我们可以控制这个surface的格式和尺寸,SurfaceView控制这个surface在屏幕上的绘制位置,而且SurfaceView使用了双缓冲机制,它在新的线程中更新界面所以界面的速度比View快。

surface是纵深排序(Z-ordered)的,这表明它总在自己所在窗口的后面。SurfaceView提供了一个可见区域,只有在这个可见区域内的surface部分内容才可见,可见区域外的部分不可见。surface的排版显示受到视图层级关系的影响,它的兄弟视图结点会在顶端显示,这意味者surface的内容会被它的兄弟视图遮挡,这一特性可以用来放置遮盖物(overlays)(例如,文本和按钮等控件)。注意,如果surface上面有透明控件,那么它的每次变化都会引起框架重新计算它和顶层控件的透明效果,这会影响性能。

我们可以通过SurfaceHolder接口访问这个surface,getHolder()方法可以得到这个接口。SurfaceView变得可见时,surface被创建;surfaceview隐藏前,surface被销毁。这样能节省资源。如果你要查看surface被创建和销毁的时机,可以重载surfaceCreated(SurfaceHolder)和 surfaceDestroyed(SurfaceHolder)。

这里用到了一个类SurfaceHolder,可以把它当成surface的控制器,用来操纵surface。处理它的Canvas上绘制的效果和动画,控制表面,大小,像素等。它几个常用的方法:

abstract void addCallback(SurfaceHolder.Callbask callback);//给SurfaceView当前的持有者一个回调函数。

abstract Canvas lockCanvas();//锁定画布,一般在锁定后就可以通过其返回的画布对象Canvas,在其上面等操纵了。

abstract Canvas lockCanvas(Rect dirty);//锁定画布的某个区域进行画图等..因为画完图后,会调用下面的unlockCanvasAndPost()来改变显示的内容。相对部分内存要求比较高的游戏来说, 可以不用重画dirty外的其他区域的像素,可以提高速度。

abstract void unlockCanvasAndPost(Canvas canvas);//结束锁定画图,并提交改变。

SurfaceView的核心在于提供了两个线程:UI线程和渲染线程。这里应注意:

所有SurfaceView和SurfaceHolder.Callback的方法都应该在UI线程里调用,一般来说就是应用程序主线程。渲染线程所要访问的各种变量应该作同步处理。

由于surface可能被销毁,它只在SurfaceHolder.Callback.surfaceCreated()和SurfaceHolder.Callback.surfaceDestroyed()之间有效,所以要确保渲染线程访问的是合法有效的surface。

实现过程

继承SurfaceView并实现SurfaceHolder.Callback接口

SurfaceView.getHolder()获得SurfaceHolder对象

SurfaceHolder.addCallback(callback)添加回调函数

surfaceHolder.lockCanvas()获得Canvas对象并锁定画布

Canvas绘画

surfaceHolder.unlockCanvasAndPost(Canvas canvas)结束锁定画图,并提交改变,将图形显示。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用多态来实现数据库之间的切换

1、一般数据库之间的转换时这样实现的 static void Main(string[] args){//必须引入System.Data程序集string connectionString ConfigurationManager.ConnectionStrings["SqlConfigurationManager"].ConnectionString;string providerName ConfigurationManager.…

清华计算机网络所教授张,2019计算机考研清华大学计算机网络技术研究所简介...

2019考研复习正在紧张的进行中,为了更好的帮助同学们学习。新东方在线为大家整理了“2019计算机考研清华大学计算机网络技术研究所简介”的相关信息,提醒各位考生要合理安排复习时间,做好复习规划。希望对大家的复习有所帮助!计算机网络技术正…

[工具]iperf测试带宽

之前被要求测试网卡带宽能力,发现了iperf这个工具,记录下来防止遗忘。 iperf是个开源跨平台测试带宽工具,windows、linux、macOS……都支持,安装也挺方便。 1.安装 地址:https://iperf.fr/ 2.测试 参看:htt…

资料员计算机知识大全,最新资料员专业基础知识

资料员专业基础知识(一)建筑识图一、单选1、常用的A2工程图纸的规格是(420594)。2、1号图纸图符是(0)号图纸图幅的对裁。3、我国横式图纸会签栏通常处于(图框外左上角)。4、工程图中,若粗实线的线宽为3.0mm,则细实线的线宽一般为0.75 mm.5、比例是指(图形…

Android学习笔记----Java中的字符串比较

用习惯了C#、C,在做字符串比较时想当然地使用如下语句: 1 string str1 "abcd", str2 "abcd"; 2 if(str1str2) 3 { 4 return true; 5 } 6 else 7 { 8 return false; 9 } 殊不知在Java中,两个String类型的变量&a…

计算机能做什么英语对话,计算机英语会话∣实用电脑英语

原标题:计算机英语会话∣实用电脑英语Practical English for Computer实用电脑英语Key sentence必备表达All players must be ready for the game to start.所有玩家准备开始游戏。Are you sure you want to cancel your changes?你确认要取消改变吗?Ar…

配置Redis主从复制

[构建高性能数据库缓存之redis主从复制][http://database.51cto.com/art/201407/444555.htm] 一、什么是redis主从复制? 主从复制,当用户往Master端写入数据时,通过Redis Sync机制将数据文件发送至Slave,Slave也会执行相同的操作确…

html div bgcolor,HTML body bgcolor transparent

问题I have this HTMLstyle"margin:0px;padding:0px;"Here i have set bgcolor"#FFFFFF" but i want it to be transparent how to do it ?回答1:HTML provides no means to specify a transparent background (and the means it has to specify backgrou…

php内置函数

array_count_values() 函数用于统计数组中所有值出现的次数。转载于:https://www.cnblogs.com/tris/p/4616252.html

计算机主机外部的连接端口有何作用,微机原理 课后题 标准答案

4.11 ROM、PROM、EPROM分别用在什么场合?答:① ROM用在一个计算机系统完成开发以后,容纳不再修改的程序和数据。且批量产量要大的场合。② PROM用于非批量的场合。③ EPROM用于软件或系统的开发阶段及批量很小的场合。第五章 微型计算机和外设…

计算机对口升学试题英语,对口招生考试对口升学英语模拟试卷试题.docx

对口升学考试英语模拟试题第一卷英语知识运用一、语音知识:从 A,B,C,D 四个选项中找出一个与其他三个单词划线部分发音不同的选项。1.A. punishB. rushC. guestD. hundred2.A. graspedB. guidedC. handedD. planted3.A. schoolB. chemistryC. championD. stomach4.A…

计算机应用头部案例提交,基于头部位置的应用程序放置的制作方法

技术特征:1.一种电子设备,包括:一个或多个处理器;和存储器,所述存储器存储被配置为由所述一个或多个处理器执行的一个或多个程序,所述一个或多个程序包括用于执行以下操作的指令:在计算机生成的…

Maven学习总结(七)——eclipse中使用Maven创建Web项目

Maven学习总结(七)——eclipse中使用Maven创建Web项目 一、创建Web项目 1.1 选择建立Maven Project 选择File -> New ->Project,如下图所示: 在New窗口中选择 Maven -> Maven Project。点击【next】如下图所示: 1.2 选择项目路径 根…

notice

*****测量***** 转载于:https://www.cnblogs.com/mengfanrong/p/4622864.html

html文件用safari打开方式,在html中打开(在Safari中)

嗯,你说的是UIDocumentInteractionController那么。实施UIDocumentInteractionControllerDelegate在UIViewController- (UIViewController *)documentInteractionControllerViewControllerForPreview:(UIDocumentInteractionController *)controller { return self;…

简单的Flash GUI工具(Simple Flash GUI Tool)

原文引用:http://blog.soulwire.co.uk/code/actionscript-3/simple-flash-prototype-gui-tool#more-1242 简单的Flash GUI工具 40 代码: 用最小的比较快AS3原型 更新:基思自己一直致力于类似的想法,并释放 MinimalConfigurator 。 基思彼得的 最小的组件 任何Flash…

计算机网络模拟校园,计算机网络课程设计-模拟校园网组网实验

计算机网络课程设计-模拟校园网组网实验 福建农林大学金山学院 信息工程类 课程实习报告 课程名称: 计算机网络 实习题目: 校园网组网方案 姓 名: 严夫 系: 信息与机电工程系 专 业: 计算机科学与技术 年 级&#xff1…

西南科技大学计算机综合大纲,2019年西南科技大学信息工程学院考研复试大纲...

2019年西南科技大学信息工程学院考研复试大纲一、《控制系统综合》考试说明1、《控制系统综合》,考核学生对控制类核心课程基本概念、基本原理、基本方法的理解,以及应用基础知识,分析或解决较为复杂的问题的水平;2、《控制系统综合》&#x…

设计模式综述

《java23种设计模式总结》http://blog.csdn.net/lc2470348636/article/details/8935758 《设计模式大集锦 程序员面试全攻略》http://www.csdn.net/article/2012-06-04/2806324-software-design-interview-questions 设计模式:构建OO系统的隐含经验。 特性&#xff…

计算机网络纳新水粉画,小学教育专业“书法诗画创作社团”顺利举办纳新活动...

原标题:小学教育专业“书法诗画创作社团”顺利举办纳新活动小学教育专业“书法诗画创作社团”顺利举办纳新活动为了丰富同学们的课余生活,向全校师生展现小学教育专业的风采,2018年10月21日上午9:30,隶属于小学教育专业的“书法诗…