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的主线程中去更新绘制视图画面。

最新文章

  1. BZOJ 3236: [Ahoi2013]作业
  2. centos apache svn配置
  3. CSS元素定位6-10课
  4. HTML 学习笔记(URL)
  5. [Tips] JavaScript 使用hash 对象传参
  6. MC的一些具体的应用的例子的总结
  7. oracle窗口函数中range interval的使用
  8. bzoj2005: [Noi2010]能量采集
  9. UVA 315 315 - Network(求割点个数)
  10. ural 1998 The old Padawan
  11. Java C# MD5 加密串一致性
  12. [笔记] 走进 Pocket,看看只有 20 位员工的 Pocket 是如何搞定 2000 万用户的
  13. ndk编译时的通用Android.mk文件
  14. C# 文件上传
  15. I/O多路复用之select
  16. 图解Javascript之字符串
  17. Centos7 通配符HTTPS证书申请 实测 笔记
  18. C#版(打败99.28%的提交) - Leetcode 347. Top K Frequent Elements - 题解
  19. C#3.0智能的编译器
  20. [Windows] [VS] [C] [取得指针所指内存的二进制形式字符]

热门文章

  1. Heacher互助平台 α版本冲刺
  2. beta版本发布-团队
  3. feature map计算大小公式
  4. 【转】IntelliJ 创建main函数快捷
  5. PAT (Basic Level) Practise (中文)- 1022. D进制的A+B (20)
  6. HTML5拖放(drag和drog)作品
  7. Nginx代理tcp端口实现负载均衡
  8. ASP.NET 开发人员不必担心 Node 的五大理由
  9. Spring框架中的aop操作之一 及aspectjweaver.jar与aopalliance-1.0.jar下载地址 包含beans 注解context 和aop的约束
  10. ios lazying load