SurfaceView在宿主窗口“挖洞”过程要点

SurfaceView在Android应用中,通过IWindow接口与WindowManagerService交互,实现宿主窗口的'挖洞'效果。这一过程使得SurfaceView如同独立窗口,拥有绘图表面。在布局中,SurfaceView的透明区域由gatherTransparentRegion方法处理,确保其他View能正确绘制在其上方。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SurfaceView在宿主窗口“挖洞”过程要点

Created with Raphaël 2.1.0 SurfaceView SurfaceView ViewGroup ViewGroup ViewRootImpl ViewRootImpl 1.onAttachedToWindow 2.requestTransparentRegion 3.requestTransparentRegion 4.performTraversals 5.gatherTransparentRegion 6.gatherTransparentRegion

第1步,SurfaceView将通过IWindow接口与WindowManagerService关联,WindowManagerService服务将认为Activity窗口和SurfaceView的地位是一样的,即认为它们各自拥有独立窗口,并且具有绘图表面surface;
第5步,ViewGroup的gatherTransparentRegion方法遍历包括SurfaceView在内的所有子View的gatherTransparentRegion以得到最后的透明区域TransparentRegion,如果其他类型子View覆盖SurfaceView,其gatherTransparentRegion方法将减去相应透明区域。同理,在绘制的过程中,ViewGroup的dispatchDraw也将遍历所有子View的draw,覆盖SurfaceView的子View也将绘制在SurfaceView之上。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值