背景
前面已经给学员朋友们分享过单屏秒变双屏的成果展示,具体详情可以点击这里:
https://mp.weixin.qq.com/s/KdYTLMuXiBdjM0kZmYKzPg
一些vip学员朋友也纷纷求助马哥的实现patch代码,想用于公司的实战项目实现。但是在公司需求实现要求和马哥这边的实现还是会有一些需求上的变更和设备环境差异,所以使用过程中学员朋友们也提出了一些额外的问题。
下面来一一讲解一下相关的需求和bug问题。
实现左右结构的单屏变多屏
正常马哥实现的是上下结构的单屏变多屏
但是学员朋友很多可能是车机厂商,或者平板等横屏设备厂商,所以他们需求往往都是需要变成左右的布局方式。
针对这个需求其实基于马哥的patch修改还是非常简单的,只需要修改如下两个部分:
1、需要定义好一个prop,根据prop来判断是上下结构还是左右结构
2、因为上下结构已经实现,如果左右结构,针对触摸部分,如果左右结构需要更改触摸区域的宽度变宽
3、针对虚拟屏幕的移动也需要判断如果左右结构,则需要平移是x方向坐标不是y方向坐标
具体实现成果如下:
发现有些设备或者场景第二屏不显示
具体看到现象如下:
这个问题其实在马哥自己设备上从来没有发现过,但是有的vip学员朋友和我反馈有这种黑屏不显示情况,针对这个问题第一时间进行了分析,主要通过提供的dumpsys SurfaceFlinger来查看
发现有如下线索
正常显示的设备dumpsys可以看到每个图层都是DEVICE合成方式即HWC合成,但是异常设备提供的dumpsys发现如下:
问题复现路径:
只需要让自己图层多几个使用GPU合成既可以,具体怎么让图层GPU合成呢?这个在SurfaceFlinger专题有讲解过,可以考虑让自己窗口设置圆角裁剪既可以。
一旦设置圆角后既可以复现上面的第二屏幕黑屏问题。
问题原因解决思路:
1、原因属于gpu合成部分和原理hwc有差异,gpu合成属于绘制到新的surface上,这个surface可能依然受到主屏幕屏幕宽高限制
2、解决思路只能是针对这种gpu绘制情况需要特殊处理,不限使用主屏幕逻辑宽高限制,而是使用物理宽高
ps:相关单屏秒变多屏patch可以私聊马哥获取
更多framework技术干货,请关注下面“千里马学框架”