#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类的学习相关推荐

  1. String类的学习

    String类的学习: String a="a"+"b"+"1"; String b="ab1"; a==b是对的,为什 ...

  2. TS基础2(类)-学习笔记

    文章目录 TS基础2(类)-学习笔记 class类 类的继承 修饰符 类的类型.实现接口 TS基础2(类)-学习笔记 class类 //类 class//首字母大写//类(Class):定义了一件事物 ...

  3. 类进阶学习目标 java 1614957028

    类进阶学习目标 java 1614957028

  4. 【C++】C++类的学习(五)——纯虚函数与抽象类

    [fishing-pan:https://blog.csdn.net/u013921430转载请注明出处] 前言 在前面的博客中讲到了虚函数,今天讲述一种特别的虚函数--纯虚函数,以及与之相关的抽象类 ...

  5. 【C++】C++类的学习(三)——运算符重载与友元函数

    [fishing-pan:https://blog.csdn.net/u013921430转载请注明出处] 前言 前面的两篇博文中介绍了类的一些基本特性,今天讲一讲运算符重载和友元. 运算符重载 运算 ...

  6. 【C++】C++类的学习(二)——构造函数、析构函数、拷贝构造函数以及this指针

    [fishing-pan:https://blog.csdn.net/u013921430转载请注明出处] 1. 前言 在之前的博文< C++类的学习(一)--初识类>中,简单地讲述了类的 ...

  7. 【C++】C++类的学习(一)——初识类

    [fishing-pan:https://blog.csdn.net/u013921430转载请注明出处] 前言 C++在C语言的基础上做了一些改进,使得C++具有了面向对象编程(Object Ori ...

  8. 风变Python编程13类的学习2

    Python 类的学习2 上一关,我们知道了面向对象编程的重要性,也学习了类的基础知识(1.面向对象编程,2.类的创建和调用,3.创建类的两个关键点) 这一关,我们会拓展类的知识疆界,探索两个类的拓展 ...

  9. IDEA的安装和破解;Maven介绍;Object类的学习

    1) IDEA: 简介:全称IntelliJ,是java语言开发的集成环境,IntelliJ在业界被公认为最好的java开发工具之一,尤其在智能代码助手.代码自动提示.重构.J2EE支持.Ant.JU ...

最新文章

  1. lay弹窗库的一个坑
  2. 晶科能源与森源电气签订300MW光伏组件供货协议
  3. 6年20多篇重磅论文,27岁浙大女博导太飒了~
  4. 近期计算机视觉竞赛汇总—总奖池高达344万人民币
  5. Python入门学习笔记(6)
  6. 【风马一族_C】进制转化
  7. 【现代版】为人处世三十六计详解,真的很受益!
  8. mysql联合查询的几种方式
  9. Web前端——JavaScript 的基础总结
  10. 二人成团,阿里云服务器拼团活动开启
  11. 超详细:R语言缺失值及异常值处理
  12. com.android.backupconfirm,使用ADB停用一些自己讨厌的东西记录备忘
  13. Pentest BOX安装和使用
  14. FFmpeg编译ios平台
  15. 六度分离 (folyd算法)
  16. wps在使用过程中突然崩溃了,怎么找回原来的文档
  17. burp suite使用
  18. java金字塔显示_Java输出正反金字塔循环
  19. UltraSnap PRO(抓图工具) V2.3 绿色汉化版
  20. 文旅部谈加强假日旅游市场监管 查处强迫消费等乱象

热门文章

  1. 加仓减仓口诀_一位老股民坚持十年的炒股口诀 简单实用,收藏了!
  2. 解析旅游网驴妈妈的大数据用户推荐系统(3月11日实时分享)
  3. 关于轮播图的简单介绍
  4. 2020 ICPC Asia East Continent Final_K.Allin
  5. tensorflow_Realtime_Multi-Person_Pose_Estimation训练
  6. 各个版本 Windows 10 的名称、完整版本号、开发代号和系统自带的 .NET Framework 版本
  7. 【大咖有约】MongoDB 大中华区首席技术顾问唐建法:如何在MongoDB中实现强事务...
  8. 在校大学生如何做一个自己的网站实践。
  9. 银行 计算机科技大赛,分行成功举办2019年数字化转型创意大赛
  10. 基于openCV和PythonSMTP的天眼系统