设为首页 加入收藏

TOP

Android游戏编程之SurfaceView进行连续渲染
2014-11-24 08:24:47 来源: 作者: 【 】 浏览:1
Tags:Android 游戏 编程 SurfaceView 进行 连续 渲染

什么是Surface?它是一个抽象的原是缓冲区,被屏幕组合器用于渲染特定视图。屏幕组合器是Android上所有渲染的幕后推手,并最终负责将所有的像素点推送到GPU。


我们的目标就是在一个独立的线程中执行渲染,而不用大量占用UI线程,因为UI线程还有很多工作要做。SurfaceView类提供了一种在UI线程之外的线程中进行渲染的方式。


SurfaceHolder和锁定


为了在UI线程之外的另一个不同线程中渲染到SurfaceView,我们需要获得一个SurfaceHolder类的实例,如下所示:


SurfaceHolder holder = surfaceView.getHolder();


SurfaceHolder是Surface的一个包装,可为我们做一些辅助工作。它提供两个方法:


Canvas SurfaceHolder.lockCanvas();


SurfaceHolder.unlockAndPost(Canvas canvas);


第一个方法锁定Surface用于渲染并返回一个可用的Canvas实例。第二个方法解锁Surface并确保通过Canvas进行绘制的内容可显示在屏幕上。我们将在渲染线程中使用这两个方法以获取Canvas,通过它进行渲染并最终确保我们渲染的图像能在屏幕上可见。我们必须确保传递到SurfaceHolder.unlockAndPost()方法的Canvas与从SurfaceHolder.lockCanvas()方法接收的相同。


当SurfaceView被实例化时,Surface并没有立即创建。相反,它是异步创建的。每当活动暂停或再次恢复而重新创建时,该Surface都将被销毁。


Surface的创建与有效性


只要Surface没有生效,我们就不能从SurfaceHolder中获取Canvas。不过,我们可以通过下面的语句来查看Surface是否已被创建:


boolean isCreated = surfaceHolder.getSurface().isValid();


如果该方法返回true,我们就可安全的锁定该Surface并通过接收到的Canvas来在其上进行绘制。我们必须绝对确保在调用SurfaceHolder.lockCanvas()之后再次解锁Surface,否则我们的活动可能会锁定手机。


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Android--常驻BroadReceiver实现.. 下一篇Android游戏编程之基本图形编程

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·如何理解c语言指针和 (2025-12-27 01:19:11)
·为什么C标准库没有链 (2025-12-27 01:19:08)
·玩转C语言和数据结构 (2025-12-27 01:19:05)
·MySQL 基础入门视频 (2025-12-26 23:20:22)
·小白入门:MySQL超详 (2025-12-26 23:20:19)