SurfaceView必知

本文详细介绍了SurfaceView在Android应用开发中的作用,包括如何创建绘图表面、使用SurfaceHolder接口访问绘图平面以及在绘图表面放置覆盖物。同时强调了线程相关问题的注意事项,以确保在应用中正确地进行渲染。

    SurfaceView提供了一个嵌入到视图层次结构内部的绘图表面,你可以控制这个表面的格式和它的大小。SurfaceView把这个表面放在屏幕的正确位置。

这个表面在Z轴上是按照顺序放置的,位于持有它的窗口的下面。SurfaceView在它的窗口上打了一个洞,来显示绘图平面。View层次结构会正确的处理SurfaceView与位于它上面显示的兄弟节点的合成。这可以用于在绘图表面放置覆盖物,例如按钮,但是需要注意一点,由于每次绘图表面的改变,要重新进行alpha混合运算,这样会影响显示效果。

通过SurfaceHolder接口访问底层的绘图平面,可以通过SurfaceView实例的getHolder()方法获得。

当SurfaceView的窗口可见时,绘图表面将被创建。你应该实现surfaceCreated(SurfaceHolder)和surfaceDestroyed(SurfaceHolder)方法,这些方法会在绘图表面被创建和销毁时被调用。

这个类的目的之一是提供一个绘图表面,在它上面,第二个线程可以进行渲染。如果你采用这种方式进行渲染,你需要注意一些线程相关的问题:

1. 所有的SurfaceView和SurfaceHolder.Callback方法会被来自于运行SurfaceView的窗口的线程调用(通常都是应用的主线程),所以要正确的同步与绘制线程触及的任何状态;

2. 必须确保绘制线程只在绘图表面可用的前提下在它上面进行操作(在SurfaceHolder.CallBack.surfaceCreated()和SurfaceHolder.CallBack.surfaceDestroyed()之间)。

转载于:https://my.oschina.net/smalant/blog/41061

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值