SurfaceView相关概念整理

本文主要介绍了SurfaceView的概念和使用方法,SurfaceView作为Android中的一种特殊View,用于在表层进行高效绘图,常用于游戏和自定义相机等场景。SurfaceView在窗口上创建了一个洞,允许在单独的线程中进行绘制,避免阻塞主线程,支持OpenGL ES,提供双缓冲机制以减少画面闪烁。使用SurfaceView需要实现SurfaceHolder.Callback接口来监听SurfaceView的状态变化,并在子线程中进行绘制操作。
摘要由CSDN通过智能技术生成

前言:因为最近在学习自定义相机并用opengles在预览画面上加入3D模型实现简单的虚实融合。所以遇到了很多这方面的问题,有些概念十分繁琐。现在把这些问题一一整理,理解完一些,整理一些,不断更新

以下我查阅资料的参考网站:

https://blog.csdn.net/conowen/article/details/7821409
https://blog.csdn.net/lifei3309/article/details/21384225

一下是我的hui
1.什么是SurfaceView?
先说说什么是Surface?
简单地说Surface对应了一块屏幕缓冲区,每个window对应一个Surface,任何View都是画在Surface上的,
传统的view共享一块屏幕缓冲区,所有的绘制必须在UI线程中进行
    Surface意为表层、表面,顾名思义SurfaceView就是指一个在表层的View对象。
    为什么说是在表层呢,这是因为它有点特殊跟其他View不一样,其他View是绘制在“表层”的上面,而它就是充当“表层”本身。
    SDK的文档 说到:SurfaceView就是在窗口上挖一个洞,它就是显示在这个洞里,其他的View是显示在窗口上,
    所以View可以显式在 SurfaceView之上,你也可以添加一些层在SurfaceView之上。 
    从API中可以看出SurfaceView属于View的子类 它是专门为制作游戏而产生的,它的功能非常强大,
    最重要的是它支持OpenGL ES库,2D和3D的效果都可以实现。
    创建SurfaceView的时候需要实现SurfaceHolder.Callback接口,它可以用来监听SurfaceView的状态,
    比如:SurfaceView的改变 、SurfaceView的创建 、SurfaceView 销毁等,我们可以在相应的方法中做一些比如初始化的操作或者清空的操作等等。
    Android系统提供了View进行绘图处理,我们通过自定义的View可以满足大部分的绘图需求,
    但是这有个问题就是我们通常自定义的View是用于主动更新情况的,
    用户无法控制其绘制的速度,由于View是通过invalidate方法通知系统去调用view.onDraw方法进行重绘,
    而Android系统是通过发出VSYNC信号来进行屏幕的重绘,刷新的时间是16ms,如果在16ms内View完成不了执行的操作,
    用户就会看着卡顿,比如当draw方法里执行的逻辑过多,需要频繁刷新的界面上,
    例如游戏界面,那么就会不断的阻塞主线程,从而导致画面卡顿。
    而SurfaceView相当于是另一个绘图线程,它是不会阻碍主线程,并且它在底层实现机制中实现了双缓冲机制。


2.如何使用SurfaceView?
        首先SurfaceView也是一个View,它也有自己的生命周期。
因为它需要另外一个线程来执行绘制操作,所以我们可以在它生命周期的初始化阶 段开辟一个新线程,然后开始执行绘制,
当生命周期的结束阶段我们插入结束绘制线程的操作。这些是由其内部一个SurfaceHolder对象完成的。  
        SurfaceView它的绘制原理是绘制前先锁定画布(获取画布),然后等都绘制结束以后在对画布进行解锁 ,最后在把画布内容显示到屏幕上。       
SurfaceView使用的方式与任何View所派生的类都是完全相同的。可以像其他View那样应用动画,并把它们放到布局中。
 
3.SurfaceView的基本使用
         SurfaceView在使用的过程中,有一套模板代码,对于大部分的SurfaceView绘图操作而言都可以套用,因此SurfaceView在使用过

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值