=============================================================
SurfaceView
=============================================================

-------------------------------------------------------------
1 相关类
-------------------------------------------------------------

1.1 surface

1.1.1 意思:表面

1.1.2 可以理解为底层数据缓冲器,和硬件显卡绘制的入口句柄

1.1.3 Surface就是一个用来画图形(graphics)或图像(image)的地方

1.1.4 Surface中有一个Canvas成员,专门用于画图的。

1.2 surfaceView

1.2.1 extends View

1.2.1.1 拥有View的基本属性

1.2.2 surfaceView是在一个新起的单独线程
中可以重新绘制画面而View必须在UI
的主线程中更新画面。

1.2.2.1 意味着不需要等待主线程把所有View的绘制做完,
处理完输入输出,Hnadler.looper等事件,直接下
一帧绘制。

1.2.3 SurfaceView 可以在线程中直接操作

1.2.4 必然SurfaceView拥有Surface也就拥用Canvas

1.2.5 通过Canvas对象来进行各种绘制:图形,图片,颜色,字符窜等

1.2.6 SurfaceView拥的Canvas对象的特点

1.2.6.1 不普通View中的Canvas相同,工作在独立线程。

1.2.6.2 独占性:不能多个实例同时使用

1.2.6.3 有效时间:间于在SurfaceHolder.Callback.surfaceCreated()和 SurfaceHolder.Callback.surfaceDestroyed()这两个方法之间

1.2.6.4 在布局中使用SurfaceView,加载完成后,直接调用Canvas会是null

1.3 SurfaceHolder

1.3.1

@Override
public void surfaceDestroyed(SurfaceHolder holder) {
}

1.3.2 @Override
public void surfaceCreated(SurfaceHolder holder) {
}

1.3.3 @Override
public void surfaceCreated(SurfaceHolder holder) {
}

1.4 Canvas

1.4.1 获取

1.4.1.1 Canvas canvas = mSurfaceHolder.lockCanvas();

1.4.2 提交

1.4.2.1 mSurfaceHolder.unlockCanvasAndPost(canvas);

1.4.3 画布功能

1.4.3.1 drawColor()

1.4.3.2 drawBitmap

-------------------------------------------------------------
2 使用
-------------------------------------------------------------

2.1 自定义View继承SurfaceView

2.2 实现SurfaceHolder.Callback接口

2.2.1 目的:掌握SurfaceView的生命周期

2.2.2 在SurfaceHolder.Callback.surfaceCreated()和 SurfaceHolder.Callback.surfaceDestroyed()这
两个方法之间进行工作

2.3 获取Canvas对象

2.3.1 lockCanvas()

2.3.2 SurfaceHolder.lockCanvas()

2.3.2.1 建议在SurfaceHolder.Callback.surfaceCreated()
之后调用,确保返回有效对象。

2.3.3 SurfaceView.lockCanvas()

2.4 开启线程操作Canvas刷新

-------------------------------------------------------------
3 GLSurfaceView
-------------------------------------------------------------

3.1 SurfaceView的子类,具有SurfaceView的所有特性

3.2 结合GLSurfaceView.Renderer来封装使用

3.3 提供openGL与surfaceView整合方案

-------------------------------------------------------------
4 TextureView
-------------------------------------------------------------

-------------------------------------------------------------
5 SurfaceTexture
-------------------------------------------------------------

SurfaceView 及相关概念的更多相关文章

  1. Android多媒体之view,SurfaceView,GLSurfaceView

    1.相关概念 不用画布,直接在窗口上进行绘图叫做无缓冲绘图. 用了一个画布,将所有内容都先画到画布上,在整体绘制到窗口上,就该叫做单缓冲绘图, 那个画布就是一个缓冲区.用了两个画布,一个进行临时的绘图 ...

  2. SurfaceView 绘制分形图

    之前一直做的是应用类,这次抽时间,参考网上资料实践了下SurfaceView.目标是在页面上画一个科赫曲线的分形图. 代码如下: package com.example.fredric.demo02; ...

  3. IDDD 实现领域驱动设计-上下文映射图及其相关概念

    上一篇:<IDDD 实现领域驱动设计-理解限界上下文> 距离上一篇有几天时间了,<实现领域驱动设计>第三章的内容都是围绕一个词-上下文映射图,我大概断断续续看了几天,总共看了两 ...

  4. Android中surface,surfaceview,sufaceholder以及surface客户端的关系

    这里以照相机camera功能的实现来解释surface,surfaceview,sufaceholder以及surface客户端(本例子中指的是camera)的关系,surface及其client(客 ...

  5. android surfaceView 黑屏

    最近在做一个viewpager + fragment 切换的页面, 其中一个fragment 打开摄像头,需要surfaceView,但是当切换到这个fragment的前一个个时,这个fragment ...

  6. [原创]java WEB学习笔记105:Spring学习---AOP介绍,相关概念,使用AOP,利用 方法签名 编写 AspectJ 切入点表达式

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  7. android下面使用SurfaceView+ mediaPlayer播放视频

    final SurfaceView surfaceView = new SurfaceView(StartupActivity.this); StartupActivity.this.mediaPla ...

  8. Android 之surfaceView (画动态圆圈)

      通过之前介绍的如何自定义View, 我们知道使用它可以做一些简单的动画效果.它通过不断循环的执行View.onDraw方法,每次执行都对内部显示的图形做一些调整,我们假设 onDraw方法每秒执行 ...

  9. Surface与SurfaceView、SurfaceHolder

    什么是Surface? android API的解释是:Handle onto a raw buffer that is being managed by the screen compositor ...

随机推荐

  1. win10 uwp 通知列表

    经常看到小伙伴问,问已经绑定列表,在进行修改时,不会通知界面添加或删除.这时问题就在,一般使用的列表不会在添加时通知界面,因为他们没有通知. 本文:知道什么是通知的列表,如何去写一个通知列表 在 C# ...

  2. Windows 10「设置」应用完整MS-Settings快捷方式汇总

    分类 设置名称 快捷方式 系统 显示 ms-settings:display 通知和操作 ms-settings:notifications 平板电脑模式 ms-settings:tabletmode ...

  3. JUnit5 安装与使用

    虽然JUnit5 的测试版本早就出来了,但正式版直到几年9月份推出,目前最新版5.0.1.几乎所有的Java 开发人员都会使用JUnit 来做测试,但其实很多自动化测试人员也会使用Junit .目前, ...

  4. Linux系统LVM基本使用

    一.关于LVM的几个概念 1. LVM:逻辑卷管理器,是建立在物理存储设备上的一个抽象层,允许你生成逻辑存储卷, 与硬件相关的存储设置被其隐藏,你不用停止应用或卸载文件系统来调整卷大小 或迁移数据,可 ...

  5. 前端-如何用gulp快速搭建项目(sass预编译,代码压缩,css前缀,浏览器自动刷新,雪碧图合成)

    一:gulp优点: 易于使用 通过代码优于配置的策略,Gulp 让简单的任务简单,复杂的任务可管理: 插件高质 Gulp 严格的插件指南确保插件如你期望的那样简洁高质得工作. 构建快速 利用 Node ...

  6. JPA 映射单向多对一的关联关系

    1.首先在多的一端加入一的一端的实体类 //映射单向n-1的关联关 //使用@ManyToOne 来映射多对一的关系 //使用@JoinColumn 来映射外键/可以使用@ManyToOne的fetc ...

  7. Java基础笔记12

    1.自定义异常. 定义一个类,让该类继承Exception.并写出该类的所有的构造函数.2.IO流. java.io 文件类.File 字节输入和输出流 InputStream OutputStrea ...

  8. FTP&samba 服务简单部署

    第1章 FTP服务部署 在Linux下,我们应用最广泛的FTP服务程序是 vsftpd ( TCP端口:而NMB服务是负责解析用的,类似与DNS实现的功能,NMB可以把Linux系统共享的工作组名称与 ...

  9. ssh: connect to host master port 22: Connection refused

    hadoop集群启动的时候namenode显示Connection refused 到windows下ping  master 显示传输中过期 ip是静态的 ssh master 也是连接拒绝 重启s ...

  10. HTML5 input事件检测输入框变化[转载]

    原文:http://www.linuxidc.com/Linux/2015-07/119984.htm 之前一直用change事件来监听输入框内容是否发生变化,只有当输入框失去焦点时才会触发,没想到h ...