“ 为了更生动地展现Android多屏同显/异显的功能,基于前面的多屏显示互动程序做一个升级版,增加播放视频功能。”
01
多屏显示互动程序概况
源码下载
请查看文章末尾源码下载方式。
源码编译
本demo程序是基于Android S源码环境开发的,所以需要放到Android S源码下编译。
将上一步中下载的源码放到Android源码的合适目录下,比如我放到了android/device/multi-display-demo-pro目录下,然后执行mm进行编译,得到可执行档 MultiDisplayDemoPro
源码运行
运行前,需要先有一个多屏幕的环境,我们采用前面文章提到的方式,搭建模拟环境:2块1080x1920的物理屏幕
Android Graphics 显示系统 - 如何模拟多(物理)显示屏?
启动模拟环境时,设定display参数,如下
--display0=width=1080,height=1920 --display1=width=1080,height=1920
注意:
一定要在开发者选项里打开Force desktop mode,我们需要有一个多屏异显的系统环境!!
将可执行档MultiDisplayDemoPro放到目标测试平台/system/bin下(比如:adb push MultiDisplayDemoPro /system/bin/)
查看使用说明
vsoc_x86_64:/ # MultiDisplayDemoPro -h
usage: MultiDisplayDemoPro [options]
------------------------------------------------------------------------------------------------
[-h] help
[-l] list displays
[-d] layer stack(In case of multi-display, show surface on the specified displays)
[-f] the path of video file to playback
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相比,多了一个选项[-f],用来指定要播放的视频路径。
可以去抖音上下载一个视频,然后push到设备的/sdcard/Movies/目录下。
02
多屏显示互动程序功能说明
获取当前设备的Displays信息
# adb shell MultiDisplayDemoPro -l
Display Devices: size=2
#0 display layerStack=0 activeMode={ 1080x1920@60.00fps }
#1 display layerStack=2 activeMode={ 1080x1920@60.00fps }
可以看到当前设备有几块屏幕,每个屏幕当前的分辨率、刷新率,还有一个关键的信息layerStack。
画面显示到指定屏幕
-f 选项,后面指定要播放的视频的路径;
-d 选项,后面加指定屏幕的layerStack可以将画面显示到对应屏幕上。例如,显示到副屏
adb shell MultiDisplayDemoPro -f /sdcard/Movies/video1.mp4 -d 2
动态切换画面到另一块屏幕
程序运行过程中,输入‘n’,按回车键,可以动态切换画面所在的屏幕,效果如下图
移动画面到另一块屏幕
程序运行过程中,输入‘m’,按回车键,可以动态的移动画面到另一块屏幕,这个过程中会有一个过渡动画的效果,移动过程中画面会同时显示到两个屏幕上,两块屏幕上的内容拼成完整画面,直到画面全部移动到另一块屏幕上去,效果如下图:
多屏同显
程序运行过程中,输入‘s’,按回车键,可以将画面同时显示在多个屏幕上,模拟多屏同显的效果,如下
退出
程序运行过程中,输入‘q’,按回车键 或者 Ctrl+C 可以终止程序执行。
关注公众号,阅读原文,获取demo源码