安卓画画真心好玩也有点难!不论是简单的静态图片还是炫酷的动态效果,选对招数很关键。今天咱们谈谈SurfaceView这枚在Android绘画界大放异彩的小可爱~
SurfaceView的基本概念
啥是SurfaceView?它就是一种能让你在自己的线程里画图搞动画的视图。跟其他View不一样的地方在于,SurfaceView能让你在后头儿那个绘图的线程画图,这样就不会影响到主界面的反应速度!
想象一下,你在玩一款对帧速要求很高的游戏。这时候,如果所有画面都是由主程序来画的话,一旦计算太多,游戏就会变得很卡,玩起来特别难受。但是有了SurfaceView,这个问题就能迎刃而解!它能让你的游戏在后台悄悄地画图,不会影响到你在前面的流畅操作~
SurfaceView与普通View的区别
那么SurfaceView跟普通View有啥不一样?最大的差别就体现在绘制方式上~普通View都是在UI线程里画出来的,所以如果你要画的东西多了,那界面就容易卡住。但是SurfaceView就厉害了,它自己开了个新线程来画图,这样就能让UI线程轻松不少!
比如,你在开发一款要即时反应的游戏的话,就不能用像View那样普通的东西了。这样可能会让画图任务太繁忙,导致游戏变得有点慢。但是用SurfaceView就不一样,它能帮你在后台处理那些复杂的画图逻辑,保证游戏运行得飞快,让玩家玩得更爽快!
SurfaceView的适用场景
问:SurfaceView这么牛吗?那能用到哪儿?
答:确实如此,SurfaceView挺好用,尤其是玩游戏、看视频啥的,需要频繁刷新的,性能要求高。这样的话,SurfaceView就可以如鱼得水地快速画图了。
onDraw()
比如说,做个打斗游戏,每隔一秒就要动起来画图。用SurfaceView就能搞定这项工作,把画画的事交给后台线程,保证你玩得顺溜,绝不卡壳。这种快感可不只是普通View能给你的!
SurfaceView的使用步骤
首先要知道什么是SurfaceView以及在哪能用得到。搞定这个之后,咱们来聊聊如何实际操作。用SurfaceView其实挺简单的,只要掌握这几点就行啦:第一步,先创建个SurfaceView;然后,实现下SurfaceHolder.Callback接口;最后,就在自己的独立线程里大胆地开始画图。
draw...()
首先,你得建个继承自SurfaceView的新类,再搞定SurfaceHolder.Callback这个接口。这玩意儿只有3个方法,就是在SurfaceView建好、变了和没了的时候被调用。
唔,下一步,要用单独的线程画画!开个新线程,用SurfaceHolder拿Canvas对象,再在Canvas上渲染图形就可以。这么一来,绘制任务就不会妨碍主进程,应用在运行时更顺畅哦~
SurfaceView的优缺点
当然,虽然SurfaceView有好处,但也有不足之处。只不过,咱们讨论过的那些都是SurfaceView的优点了,比如可以在独立线程里面画图,不会影响到主线程,特别适合需要高频率刷新的情况~
不过,SurfaceView还是有点不足的地方。例如,因为它不具备硬件加速功能,所以某些时候它的绘画速度可能比不上我们平时用的View。还有就是,SurfaceView的绘图是单独在一个子窗口里完成的,这样就没法儿跟其他的View混在一起画了,看起来可能会有点别扭。
SurfaceView与TextureView的对比
说起画画的事儿,我们常会说到两个角色:SurfaceView和TextureView。这俩都能在自己的线程里画画,只是有点儿不太一样。
挺爽的,TextureView能让画面速度更快。它居然能用上硬件加速,所以有时候比SurfaceView还厉害而且画TextureView的时候跟普通View混在一块儿,想要哪个效果就换哪个。
但用起来也有点麻烦,比如绘图过程得主进程干活,画面卡住就容易出现了;还有就是初始阶段textureView会吃掉一定的内存,对内存要求严格的应用就得掂量掂量了。
SurfaceView的实践案例
讲了那么多道理,现在咱们来看一些实际情况~比如说在安卓开发里,咱们经常能看到SurfaceView被用在游戏啊、视频播放器之类的地方。
onDraw()
比如说你听过的那个很火的游戏《愤怒的小鸟》用的就是SurfaceView!这个游戏里面,每一帧画出来都非常关键。所以用SurfaceView就能在后台把那些复杂的画画逻辑搞定,保证游戏顺畅地跑起来,让玩家玩得停不下来。
例如,咱们手机上有的看视频的app就用到了SurfaceView。这种东西,就是用来画视频的每一帧的。用它处理这个,就能让你看视频时候更顺畅,不卡壳。
SurfaceView的未来展望
SurfaceView
让我们来聊聊SurfaceView的未来!安卓系统越更新越棒,SurfaceView自然也在一步步进步。相信我,未来SurfaceView肯定能在各种应用场景中大显身手,给广大的安卓开发者们带来更多方便。
比如,有了越来越牛逼的硬件支持,SurfaceView画图速度肯定会更快啦;再加上安卓系统也越做越好,SurfaceView和各种设备都能更和谐相处,给大家带来更多便利。
评论0