SurfaceView

一、类关系
1.1 继承:

1.2 相关子类

二、简述
    视图表面是在Z轴上是依次排序的,通常位于window下面的surfaceview为了显示需要在界面上进行“打洞”。通常情况下view的各个层级能协调好与surfaceview的关系,使其正确地进行展示。
这个类其中的一个目的是提供了一个可以通过其他线程去渲染到屏幕的surface,如果你要使用,需要注意的是:
1、 SurfaceHolder.Callback 和surfaceview的回调方法将被调用子线程运行在surfaceview的window时,需要注意线程安全,即可加同步锁synchronized,即类似

2、绘图线程的有效期:处于SurfaceHolder.Callback.surfaceCreated() 和
SurfaceHolder.Callback.surfaceDestroyed() 之间,所以在期间需要完成线程的绘图和渲染工作。

三、相关方法与对象
3.1 onDraw( )
   SurfaceView并没有实现onDraw方法,不会自动调用,需结合实现SurfaceHolder.Callback来使用。

3.2 draw( )
    对surfaceview进行手工渲染,调用此方法前,surfaceview的视图应该已经被创建,即传入的canvas为空时会出现异常。当需要实现绘制视图时,可以去实现onDraw方法。

3.3 setZOrderOnTop( )
    可设置surfaceview是否置于window顶部,此时它所在窗口的其他view将不可见(当然可以通过设置它的透明度来让其他view可见)。为了和其他view整合,他通常被放于window后。该方法需要在window被设置到windowmanger前进行设置。该方法与setZOrderMediaOverlay是冲突的,后者是用于设置当前surfaceview对象是否置于另外个surfaceview对象上面。

3.4 SurfaceHolder
    Surface 的持有者,负责的surface在surfaceview中的生命周期的调用和操作方法的调用。SurfaceView没有Surface的引用,所以在绘图时需要lockCanvas来获取canvas进行绘图操作,绘制完后就调用SurfaceHolder的unlockCanvasAndPost方法来进行解锁canvas,并提交改变和显示。

SurfaceView具有硬件加速功能,能在子线程中进行图形绘制,并具有双缓存机制,非常适合复杂界面高效刷新的场景。

SurfaceView小结相关推荐

  1. 用surfaceView实现高性能动画

    "下面会用github上的一个开源drawable动画框架做性能上的对比" 引言 在Android上处理简单的动画,估计大家首先想到的是视图动画,补间动画,属性动画这些.再复杂一些 ...

  2. 屏幕刷新机制小结(九)

    Android刷新机制 SurfaceView理解 一.Android屏幕刷新机制 首先需要了解一些基本概念 在一个显示系统里,一般包括CPU.GPU.Display三部分,CPU负责计算数据,把计算 ...

  3. 反思:Google 为何把 SurfaceView 设计的这么难用?

    启程 如果你有过 SurfaceView 的使用经历,那么你一定和我一样,曾经被它所引发出 层出不穷的异状 折磨的 怀疑人生-- 毕竟,作为一个有理想的开发者,在深入了解 SurfaceView 之前 ...

  4. Android View与SurfaceView的手绘板制作

    最近学习了如何使用View与SurfaceView制作简单的手绘板,在此做个小结. 自定义VIew实现手绘板: 首先是使用View来实现手绘板: package com.app.superxlcr.m ...

  5. Android Camera 使用小结

    Android Camera 使用小结 Android手机关于Camera的使用,一是拍照,二是摄像,由于Android提供了强大的组件功能,为此对于在Android手机系统上进行Camera的开发, ...

  6. 【阶段小结】协同开发——这学期的Git使用小结

    [阶段小结]协同开发--这学期的Git使用小结 一.Git简介 1. Git简单介绍 2. Git工作流程以及各个区域 3. Git文件状态变化 二.Git安装&Git基本配置 三.个人踩坑 ...

  7. 正则表达式(括号)、[中括号]、{大括号}的区别小结

    正则表达式(括号).[中括号].{大括号}的区别小结 </h1><div class="clear"></div><div class=& ...

  8. Android SurfaceView 黑背景的处理方法

    SurfaceView 绘制的时候出现黑背景的如下 或者如下 处理方法就是添加 //画布透明处理this.setZOrderOnTop(true);this.mSurfaceHolder.setFor ...

  9. php中$_REQUEST、$_POST、$_GET的区别和联系小结

    php中$_REQUEST.$_POST.$_GET的区别和联系小结 作者: 字体:[增加 减小] 类型:转载 php中有$_request与$_post.$_get用于接受表单数据,当时他们有何种区 ...

最新文章

  1. 程序员必看 c++笔试题汇总
  2. php 删除子字符串函数,PHP删除字符串中的任何字符函数
  3. 英特尔溢价4倍收购还遭拒!RISC-V芯片公司SiFive说想独立上市
  4. Mybatis执行流程分析_自定义简易Mybatis框架
  5. python 成员函数 泛型函数_【一点资讯】白学这么多年 Python?连泛型函数都不会写? www.yidianzixun.com...
  6. SpringBoot2 整合Ehcache组件,轻量级缓存管理
  7. hdu1066(经典题)
  8. 怀念童年啊!周二下午没有动画片……
  9. tomcat测试程序的安装
  10. GDI+中发生一般性错误 Winform Image.Save(mstream, ImageFormat.Png)引发
  11. Ubuntu下安装JRTPLIB
  12. 2.4.1 ALU-串行加法器和并行加法器
  13. Java实现MySql分页查询
  14. el表达式设置option标签selected
  15. python每日学4:vscode的安装与基础使用
  16. Linux搭建FTP,并使用Windows和IE浏览器访问FTP服务
  17. 批量更改Excel文件中大量工作表的内容(修改公司一千多份excel表格)
  18. 使用httpClient4.4登录豆瓣,并发表说说
  19. 【C++基础】头文件定义问题导致的重定义问题
  20. 同花顺_知识_看盘技法

热门文章

  1. ABAP 内外码的转换
  2. Connection Error:HTTPConnectionPool
  3. Installing RPMforge
  4. git --rebase (develop|AM/REBASE)
  5. Python3.11最新版亲测结果
  6. 60 界面外观(QT风格)
  7. 大数据在发电厂的应用_大数据在智能火力发电厂的应用
  8. ArcGIS Pro 像素编辑器使用
  9. 麻烦的终结者--吴翰清
  10. ABB机器人实用配置之安全逻辑