13_SurfaceView和SurfaceHolder类的学习
#1 大约理解一下他们俩:
SurfaceView继承自View,从单词意思也可以看得出来它是显示用的,它相当于一个布局配置文件,
所以可以这样:定义一个MySurfaceView extends SurfaceView,然后在Activity的onCreate()方法中,
不是有这句吗:setContentView(R.layout.某个布局xml文件); 那么,现在就可以改成是:setContentView(new MySurfaceView());
而且,SurfaceView一般多用于表示2d图形多些!
SurfaceHolder可以理解成是某个SurfaceView的“管理类”,即:每个SurfaceView通过它的getHolder()方法都可以获得一个
SurfaceHolder对象,比如: SurfaceHolder hoder = mySurView.getHolder();
那么,Holder类怎么管理Surface类呢,或者说可以管理什么呢?比如:holder可以从Surface上取一张画布过来,然后在画布上
画画,然后这个Surface的图案就变成了刚刚画的内容!即Holder可以改变Surface的图案;
holder还可以“监视”Surface的图案变化情况,只要让holder.addCallback(这里new一个SurfaceHolder.Callback的实现类对象);
并且在SurfaceHolder.Callback类的实现类对象中实现这3个方法:
surfaceCreated、surfaceDestroyed、surfaceChanged,
那么,这个hoder就可以实时监听这个Surface的状态,当Surface第一次加载时就会执行surfaceCreated方法,显然,由于是
从无到有,所以,Surface肯定也变化了,所以也会执行surfaceChanged方法,而且,以后Surface只要变化了那么就会自动
触发一次surfaceChanged方法,当Surface消亡时触发surfaceDestroyed方法!
#2 一般会这样使用他们俩(不这样也可以,但你会发现各种传参数不方便!):
一般在定义某个MySurfaceView时,他不是继承自SurfaceView吗,
而且到时候不是会让他的holder对象addCallback(这里new一个SurfaceHolder.Callback的实现类对象)吗,
就意味着要重新定义一个新的类实现SurfaceHolder.Callback,那么,我这里就让我的MySurfaceView亲自
继承自他,到时候我的holder对象.addCallback时,就很显然可以看到:在MySurfaceView类中:holder.addCallback(this);
所以,以后的套路一般是在定义某个SurfaceView的子类时:class MySurfaceView extends SurfaceView implements SurfaceHolder.Callback {}
如果你想要给Surface绘一个图,可能这个绘图操作很长时间,那么,一般做法是在一个子线程中去画图,什么时候启动这个子线程呢?在
surfaceCreated()方法中启动这个子线程,因为这个方法必然会执行的!那么,怎么在这个SurfaceView中画图呢,前面说过holder可以拿到它的画布,
所以,,,,可以实现让SurfaceView的图案改变!如果让当前Activity的setContentView() = 当前MySurfaceView对象,那么,就可以,,,,,
而且,如果holder在画图时每隔一段时间画一次则图案会定期改变吧!
如果你想在图案改变时做一些事情也可以实现:事先写好surfaceChanged方法即可!当然你也可以什么都不做,随你!
上面注意几点:
第一,在交给子线程绘图时,一定要把holder对象带过去,否则给谁绘图呢?
第二,在以后使用holder的过程中,尤其是摄像头方面的时候,可能经常会看到这句代码:
holder.setType(SURFACE_TYPE_PUSH_BUFFERS); 这句话的意思是什么呢?
SURFACE_TYPE_PUSH_BUFFERS表明该Surface不包含原生数据,Surface用到的数据由其他对象提供,
在Camera图像预览中就使用该类型的Surface,由Camera负责提供给预览Surface数据,这样图像预览会比较流畅
#3 看一个简单的例子,关于SurfaceView和SurfaceHolder用法的:http://blog.csdn.net/andyhuabing/article/details/7657069
13_SurfaceView和SurfaceHolder类的学习相关推荐
- String类的学习
String类的学习: String a="a"+"b"+"1"; String b="ab1"; a==b是对的,为什 ...
- TS基础2(类)-学习笔记
文章目录 TS基础2(类)-学习笔记 class类 类的继承 修饰符 类的类型.实现接口 TS基础2(类)-学习笔记 class类 //类 class//首字母大写//类(Class):定义了一件事物 ...
- 类进阶学习目标 java 1614957028
类进阶学习目标 java 1614957028
- 【C++】C++类的学习(五)——纯虚函数与抽象类
[fishing-pan:https://blog.csdn.net/u013921430转载请注明出处] 前言 在前面的博客中讲到了虚函数,今天讲述一种特别的虚函数--纯虚函数,以及与之相关的抽象类 ...
- 【C++】C++类的学习(三)——运算符重载与友元函数
[fishing-pan:https://blog.csdn.net/u013921430转载请注明出处] 前言 前面的两篇博文中介绍了类的一些基本特性,今天讲一讲运算符重载和友元. 运算符重载 运算 ...
- 【C++】C++类的学习(二)——构造函数、析构函数、拷贝构造函数以及this指针
[fishing-pan:https://blog.csdn.net/u013921430转载请注明出处] 1. 前言 在之前的博文< C++类的学习(一)--初识类>中,简单地讲述了类的 ...
- 【C++】C++类的学习(一)——初识类
[fishing-pan:https://blog.csdn.net/u013921430转载请注明出处] 前言 C++在C语言的基础上做了一些改进,使得C++具有了面向对象编程(Object Ori ...
- 风变Python编程13类的学习2
Python 类的学习2 上一关,我们知道了面向对象编程的重要性,也学习了类的基础知识(1.面向对象编程,2.类的创建和调用,3.创建类的两个关键点) 这一关,我们会拓展类的知识疆界,探索两个类的拓展 ...
- IDEA的安装和破解;Maven介绍;Object类的学习
1) IDEA: 简介:全称IntelliJ,是java语言开发的集成环境,IntelliJ在业界被公认为最好的java开发工具之一,尤其在智能代码助手.代码自动提示.重构.J2EE支持.Ant.JU ...
最新文章
- lay弹窗库的一个坑
- 晶科能源与森源电气签订300MW光伏组件供货协议
- 6年20多篇重磅论文,27岁浙大女博导太飒了~
- 近期计算机视觉竞赛汇总—总奖池高达344万人民币
- Python入门学习笔记(6)
- 【风马一族_C】进制转化
- 【现代版】为人处世三十六计详解,真的很受益!
- mysql联合查询的几种方式
- Web前端——JavaScript 的基础总结
- 二人成团,阿里云服务器拼团活动开启
- 超详细:R语言缺失值及异常值处理
- com.android.backupconfirm,使用ADB停用一些自己讨厌的东西记录备忘
- Pentest BOX安装和使用
- FFmpeg编译ios平台
- 六度分离 (folyd算法)
- wps在使用过程中突然崩溃了,怎么找回原来的文档
- burp suite使用
- java金字塔显示_Java输出正反金字塔循环
- UltraSnap PRO(抓图工具) V2.3 绿色汉化版
- 文旅部谈加强假日旅游市场监管 查处强迫消费等乱象
热门文章
- 加仓减仓口诀_一位老股民坚持十年的炒股口诀 简单实用,收藏了!
- 解析旅游网驴妈妈的大数据用户推荐系统(3月11日实时分享)
- 关于轮播图的简单介绍
- 2020 ICPC Asia East Continent Final_K.Allin
- tensorflow_Realtime_Multi-Person_Pose_Estimation训练
- 各个版本 Windows 10 的名称、完整版本号、开发代号和系统自带的 .NET Framework 版本
- 【大咖有约】MongoDB 大中华区首席技术顾问唐建法:如何在MongoDB中实现强事务...
- 在校大学生如何做一个自己的网站实践。
- 银行 计算机科技大赛,分行成功举办2019年数字化转型创意大赛
- 基于openCV和PythonSMTP的天眼系统