aosp13自由窗口项目出现图库app划线不全bug修改-安卓framework实战项目

背景

在学习了马哥的分屏自由窗口pip专题后,进行了相关的自由窗口等比例放大操作,但是操作测试过程中学员朋友们有发现图库app进入自由窗口进行操作放大有红框显示不全的问题。
在这里插入图片描述但是使用图库app时候发现红框居然显示不完整,具体效果如下图:
在这里插入图片描述
针对这个问题请问学员朋友们知道啥原因么?知道该如何分析修改么?下面就来带大家手把手分析该问题。

分析过程

显示问题最先使用
dumpsys SurfaceFlinger命令看看图层的显示情况,刚好对比正常的短信和图库的sf部分有啥差别
短信部分的sf情况:
在这里插入图片描述
图库部分的sf期情况:
在这里插入图片描述
差异初步结论:
图库的Activity因为有一个SurfaceView,这里的SurfaceView会导致有单独的Layer,真正显示红框部分属于非SurfaceView部分,但是SurfaceView部分的就完全没有显示出来。

在这里插入图片描述
那么具体这个SurfaceView部分为啥就可以让Activity不显示呢?而且看得出来这里的SurfaceView图层明显在Activity图层下面,不存在遮盖Activity的图层情况,而且本身SurfaceView也只是Activity的一个View,怎么就直接把原本Activity切割了一样。

这里个疑问就需要继续看sf的dump调查:
1、这里看看Activity图层的本身大小
在这里插入图片描述
可以看到这里的大小是正常的,是包括SurfaceView的部分。
2、再看看SurfaceView的图层情况
在这里插入图片描述也可以看出来这里SurfaceView的Layer明显大小比Activity小,而且位移也是不一样的。

所以从Layer的情况来看可以得出如下结论:
Activity本身的Layer的buffer大小其实属于正常的完整大小,并没有被切割掉SurfaceView的部分。

那么上面的HWC的输出中为啥Layer又确实被切割了呢?
这里可以看看hwc相关的dump寻找一些线索:
通过Output Layer看看显示区域
在这里插入图片描述可以看出,最开始显示区域底部大小到了1268,但是visibleNonTransparentRegion计算得出却是:242,即这里本质就是因为这个TransparentRegion参数影响的,那么这个参数最开始来自哪里呢?
从前面Layer的data详情其实也可以看到这个transparentRegionHint参数
在这里插入图片描述
那么又是怎么设置来的呢?就是app层面根据自己是否有SurfaceView情况(更加详细的调用和规则自己可以打堆栈哈),然后调用setTransparentRegionHint方法进行设置。
在这里插入图片描述那么本质原因其实就已经知道了,那么具体如何修改呢?

修改方案:

上面已经分析清楚了本质是因为有了SurfaceView以后,系统会设置对应的TransparentRegionHint导致最后的Activity的Layer只显示在非SurfaceView部分,SurfaceView部分区域直接不会被绘制。那么具体这个问题如何修改呢?
1、考虑专门为这个划线框单独建立一个Layer,且这个Layer的图层在Activity的Layer图层上面,Layer也不会接受任何的TransparentRegionHint设置
在这里插入图片描述

2、最简单方案,直接判断是否为Freeform模式,如果这种模式一概不进行的相关的TransparentRegionHint设置操作,全部设置为0,具体修改截图如下:

在这里插入图片描述
运行效果:
在这里插入图片描述

更多framework详细代码和资料参考如下链接

hal+perfetto+surfaceflinger

https://mp.weixin.qq.com/s/LbVLnu1udqExHVKxd74ILg
在这里插入图片描述

其他课程七件套专题:在这里插入图片描述
点击这里
https://mp.weixin.qq.com/s/Qv8zjgQ0CkalKmvi8tMGaw

视频试看:
https://www.bilibili.com/video/BV1wc41117L4/

参考相关链接:
https://blog.csdn.net/zhimokf/article/details/137958615

更多framework假威风耗:androidframework007

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

千里马学框架

帮助你了,就请我喝杯咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值