”为了理解Android多屏同显/异显的基本原理,我们将从Native Level入手,基于Graphics APIs写作一个简单的C++版本的多屏显示互动的演示程序。通过这个程序我们将了解常用的多屏显示相关的接口的使用方法。“
01
多屏显示C++示例概况
源码下载
请查看文章末尾源码下载方式。
源码编译
本demo程序是基于Android S源码环境开发的,所以需要放到Android S源码下编译。
将上一步中下载的源码放到Android源码的合适目录下,比如我放到了android/device/multi-display-demo目录下,然后执行mm进行编译,得到可执行档 MultiDisplayDemo
源码运行
运行前,需要先有一个多屏幕的环境,我们采用前面文章提到的方式,搭建模拟环境:虚拟设备具有2块1080x1920的物理屏幕
Android Graphics 显示系统 - 如何模拟多(物理)显示屏?
启动模拟环境时,设定display参数,如下
--display0=width=1080,height=1920 --display1=width=1080,height=1920
注意:
一定要在开发者选项里打开Force desktop mode,我们需要有一个多屏异显的系统环境!!
将可执行档MultiDisplayDemo放到目标测试平台/system/bin下(比如:adb push MultiDisplayDemo /system/bin/)
查看使用说明
# adb shell MultiDisplayDemo -h
usage: MultiDisplayDemo [options]
----------------------------------------------------------------------------------
[-h] help
[-l] list displays
[-d] layer stack(In case of multi-display, show surface on the specified displays)
When demo is running, you can input a char to control surface
n: move surface to other display with no animation
m: move surface to other display with animation
s: show surface on diffrent displays
----------------------------------------------------------------------------------
至此你已经收获一个可以供后续学习研究的demo小程序了 !!!
02
多屏显示C++示例功能说明
# adb shell MultiDisplayDemo -l
Display Devices: size=2
#0 display layerStack=0 activeMode={ 1080x1920@60.00fps }
#1 display layerStack=2 activeMode={ 1080x1920@60.00fps }
可以看到当前设备有几块屏幕,每个屏幕当前的分辨率、刷新率,还有一个关键的信息layerStack。
adb shell MultiDisplayDemo -d 2
动态切换画面到另一块屏幕
程序运行过程中,输入‘n’,按回车键,可以动态切换画面所在的屏幕,效果如下图
移动画面到另一块屏幕
程序运行过程中,输入‘m’,按回车键,可以动态的移动画面到另一块屏幕,这个过程中会有一个过渡动画的效果,移动过程中画面会同时显示到两个屏幕上,两块屏幕上的内容拼成完整画面,直到画面全部移动到另一块屏幕上去,效果如下图:
多屏同显
程序运行过程中,输入‘s’,按回车键,可以将画面同时显示在多个屏幕上,模拟多屏同显的效果,如下
退出
程序运行过程中,输入‘q’,按回车键 或者 Ctrl+C 可以终止程序执行。
03
多屏显示dumpsys信息解读
本篇先不着急分析源码,在多屏幕显示的场景下,我们需要知道一些基本的命令来查看当前Display和Layer的信息,主要就是两个命令:
1. dumpsys SurfaceFlinger // 可以查看display和layer信息
2. dumpsys display // 查看display信息
重点是要懂得通过dumpsys SurfaceFlinger查看layer的信息:
重点是要懂得通过dumpsys SurfaceFlinger查看layer的信息:
-
layer显示到哪一个display上?
-
layer显示的位置、z-order?
-
layer的大小size?
-
layer是否有被裁剪crop?
关注公众号阅读剩余内容,获取示例源码!
标签:layer,多屏,示例,MultiDisplayDemo,标准版,源码,屏幕,display From: https://www.cnblogs.com/roger-yu/p/18117934