Android SurfaceView与View
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的主线程中去更新绘制视图画面。
最新文章
- BZOJ 3236: [Ahoi2013]作业
- centos apache svn配置
- CSS元素定位6-10课
- HTML 学习笔记(URL)
- [Tips] JavaScript 使用hash 对象传参
- MC的一些具体的应用的例子的总结
- oracle窗口函数中range interval的使用
- bzoj2005: [Noi2010]能量采集
- UVA 315 315 - Network(求割点个数)
- ural 1998 The old Padawan
- Java C# MD5 加密串一致性
- [笔记] 走进 Pocket,看看只有 20 位员工的 Pocket 是如何搞定 2000 万用户的
- ndk编译时的通用Android.mk文件
- C# 文件上传
- I/O多路复用之select
- 图解Javascript之字符串
- Centos7 通配符HTTPS证书申请 实测 笔记
- C#版(打败99.28%的提交) - Leetcode 347. Top K Frequent Elements - 题解
- C#3.0智能的编译器
- [Windows] [VS] [C] [取得指针所指内存的二进制形式字符]
热门文章
- Heacher互助平台 α版本冲刺
- beta版本发布-团队
- feature map计算大小公式
- 【转】IntelliJ 创建main函数快捷
- PAT (Basic Level) Practise (中文)- 1022. D进制的A+B (20)
- HTML5拖放(drag和drog)作品
- Nginx代理tcp端口实现负载均衡
- ASP.NET 开发人员不必担心 Node 的五大理由
- Spring框架中的aop操作之一 及aspectjweaver.jar与aopalliance-1.0.jar下载地址 包含beans 注解context 和aop的约束
- ios lazying load