surfacecreated如何工作?5个步骤带你了解原理

吉云

咱就来聊聊这个 SurfaceCreated。这玩意儿,听起来挺玄乎,就是 Android 里头 SurfaceView 的一个生命周期回调方法,在 SurfaceView 第一次创建的时候被调用。

说白,就是当咱的 SurfaceView 准备好,可以开始画画,系统就告诉咱一声:“喂,准备好,可以开始!”

surfacecreated如何工作?5个步骤带你了解原理

那咱咋知道啥时候准备好?这就得靠这个 SurfaceCreated 。

为搞明白这个东西,我可是花不少功夫。

第一步:我得先整一个 SurfaceView 出来。这玩意儿就像一块画布,咱可以在上头画东西。然后,我得让这个 SurfaceView 实现一个叫 * 的接口。这接口里头有几个方法,其中一个就是咱要说的 surfaceCreated。

第二步:我得获取到 SurfaceView 对应的 SurfaceHolder。这 SurfaceHolder 就像是这块画布的管理员,咱要对画布做啥操作,都得通过它。然后,我还得给这个 SurfaceHolder 添加一个 * 对象,这样系统才能在 SurfaceView 状态变化的时候通知

  • surfaceCreated(SurfaceHolder holder): 当 Surface 第一次被创建时,系统会调用这个方法。咱就在这个方法里头开始画画。
  • surfaceChanged(SurfaceHolder holder, int format, int width, int height): 当 Surface 的大小或者格式发生变化时,系统会调用这个方法。
  • surfaceDestroyed(SurfaceHolder holder): 当 Surface 被销毁时,系统会调用这个方法。

第三步:我就在 * 里头找到 surfaceCreated() 这个方法。这方法会在 SurfaceView 第一次创建的时候被调用。咱就在这个方法里头,初始化一些变量和资源,然后就可以开始画画。

我在 surfaceCreated() 方法里头写一些代码,测试一下能不能正常工作。比如说,我可以在里头画一个圆,或者画一条线啥的。

我还真遇到点问题。比如说,有时候 surfaceCreated 能正常调用,有时候却不行。后来我发现,原来是我用 handler 延时加载,或者用别的一些方法,导致 surfaceCreated 没有被调用。 真是费我老大的劲!所以这里有个注意点,尽量不要用handler来延迟加载,用就调用不。

经过一番折腾,总算是把这个 SurfaceCreated 搞明白。我可以在 SurfaceView 上画我想画的任何东西。这感觉,真不赖!

今儿就分享到这里,希望对大伙儿有所帮助!

免责声明:由于无法甄别是否为投稿用户创作以及文章的准确性,本站尊重并保护知识产权,根据《信息网络传播权保护条例》,如我们转载的作品侵犯了您的权利,请您通知我们,请将本侵权页面网址发送邮件到qingge@88.com,深感抱歉,我们会做删除处理。

目录[+]