咱就来聊聊这个 SurfaceCreated。这玩意儿,听起来挺玄乎,就是 Android 里头 SurfaceView 的一个生命周期回调方法,在 SurfaceView 第一次创建的时候被调用。
说白,就是当咱的 SurfaceView 准备好,可以开始画画,系统就告诉咱一声:“喂,准备好,可以开始!”
那咱咋知道啥时候准备好?这就得靠这个 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 上画我想画的任何东西。这感觉,真不赖!
今儿就分享到这里,希望对大伙儿有所帮助!