SurfaceView介绍

SurfaceView是视图(View)的继承类,这个视图里面内嵌了一个专门用于绘制的Surface。你可以控制这个Surface的格式和尺寸,而SurfaceView控制这个Surface的绘制位置,Surface是纵深排序的,这表明它总在自己所在的窗口的后面,SurfaceView提供了一个可见区域,只有这个可见区域内的surface部分内容才能可见,可见区域外的是看不到的。当然surface的排版显示会受到视图层级关系的影响,它的兄弟视图结点会在顶端显示,这意味着surface的内容将会被它的兄弟视图遮挡,这一特性可以用来放置遮盖物。

注意:如果surface上面有透明控件,那么它的每次变化都会引起框架重新计算它和顶层控件的透明效果,这会影响性能。

安卓提供了surfaceHolder接口去访问这个Surface,利用上下文的getHolder()方法可以得到这个接口。

SurfaceView变得可见时,surface被创建,SurfaceView隐藏前,Surface被销毁,这样就可以节省资源,如果你要查看Surface创建和销毁的时机,你可以重载surfaceCreate(SurfaceHolder)和surfaceDestroyed(Surfaceholder)这两个方法。

SurfaceView的核心在于提供了两个线程:UI线程和渲染线程。

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

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

SurfaceView和View的本质区别在于:surfaceView是在一个新起的单独线程中绘画更新视图画面,而View视图必须在UI的主线程中去更新绘制视图画面。

Android SurfaceView与View的更多相关文章

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

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

  2. Android SurfaceView使用详解

    1. SurfaceView的定义前面已经介绍过View了,下面来简单介绍一下SurfaceView,参考SDK文档和网络资料:SurfaceView是View的子类,它内嵌了一个专门用于绘制的Sur ...

  3. Android SurfaceView 绘图覆盖刷新及脏矩形刷新方法

    http://www.cnblogs.com/SkyD/archive/2010/11/08/1871423.html Android SurfaceView 绘图覆盖刷新及脏矩形刷新方法 Surfa ...

  4. SurfaceView 和 View 区别

    android.view.View 和 android.view.SurfaceView SurfaceView 是从 View 基类中派生出来的显示类,直接子类有 GLSurfaceView和Vid ...

  5. Android SurfaceView实战 带你玩转flabby bird (下)

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/43063331,本文出自:[张鸿洋的博客] 1.概述 在Android Surfa ...

  6. Android SurfaceView实战 带你玩转flabby bird (上)

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/42965779 ,本文出自:[张鸿洋的博客] 1.概述 哈,记得以前写过Andro ...

  7. android SurfaceView绘制实现原理解析

    在Android系统中,有一种特殊的视图,称为SurfaceView,它拥有独立的绘图表面,即它不与其宿主窗口共享同一个绘图表面.由于拥有独立的绘图表面,因此SurfaceView的UI就可以在一个独 ...

  8. Android SurfaceView入门学习

    学习资料: Android 开发群英传 搜索学习资料时,搜到了罗升阳老师的Android视图SurfaceView的实现原理分析,老罗老师写的一系列博客,一年前开始学习Android时看不懂,现在依然 ...

  9. SurfaceView 与view区别详解

    SurfaceView 与view区别详解 https://blog.csdn.net/u011339364/article/details/83347109 2018年10月24日 17:20:08 ...

随机推荐

  1. MVC使用方法

    1.mvc打开html代码 后台处理:   ///<summary>         ///恢复html中的特殊字符         ///</summary>         ...

  2. 转义字符 & sizeof & strlen

    在定义了数组大小时: sizeof是运算符,表示编译时分配的空间大小,即数组定义的大小,char t[20] = "sfa".sizeof: 20; strlen: 3.在未定义数 ...

  3. javaEE(14)_文件上传下载

    一.文件上传概述 1.实现web开发中的文件上传功能,需完成如下二步操作: •在web页面中添加上传输入项•在servlet中读取上传文件的数据,并保存到本地硬盘中. 2.如何在web页面中添加上传输 ...

  4. ios之UIToolBar

    toolbar除了可以和navigationController一起用之外,也可以独立用到view里.工具栏UIToolbar – 一般显示在底部,用于提供一组选项,让用户执行一些功能,而并非用于在完 ...

  5. jQuery实现滚动条下拉时无限加载

    var lastId=0;//记录每一次加载时的最后一条记录id,跟您的排序方式有关. var isloading = false; $(window).bind("scroll" ...

  6. (54)zabbix链接及解除模板链接

    上一节就已经涉及到了链接与解除模板链接(link与unlink),这篇文章除了说明怎么链接模板以外,还会特别讲到一些需要特别注意的细节. HOST链接模板之后,便继承了模板里定义的item,trigg ...

  7. (17)zabbix自定义用户key与参数User parameters

    为什么要自定义KEY 有时候我们想让被监控端执行一个zabbix没有预定义的检测,zabbix的用户自定义参数功能提供了这个方法. 我们可以在客户端配置文件zabbix_angentd.conf里面配 ...

  8. Zookeeper 集群 BindException: Cannot assign requested address 解决方案

    前言 经历: 最近在搭建zookeeper集群,基础是3台机器(尝试过ubuntu 17 和 Centos 7). 一开始选择的是3台腾讯云服务器,每台机器在java环境配置正确的情况下,单机的情况都 ...

  9. Linux基础学习-使用PXE+Kickstart无人值守安装服务

    无人值守安装系统 PXE(Preboot eXecute Environment,预启动执行环境)是由Intel公司开发的技术,可以让计算机通过网络来启动操作系统(前提是计算机上安装的网卡支持PXE技 ...

  10. Python的第3堂课

    20181119笔记 一.内存管理相关 ①Cpython解释器的垃圾回收机制 什么是垃圾:当一个值没有被绑定任何变量名(即该值的引用计数为零时),该值就是垃圾. 垃圾回收是收回值占用的内存空间. 引用 ...