Android Graphics 多屏同显/异显 - C++示例程序(标准版)-程序员宅基地

技术标签: android  

”为了理解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++示例功能说明

获取当前设备的Displays信息

# adb shell MultiDisplayDemo -l

Display Devices: size=2
        #0 display layerStack=0 activeMode={ [email protected] }
        #1 display layerStack=2 activeMode={ [email protected] }

可以看到当前设备有几块屏幕,每个屏幕当前的分辨率、刷新率,还有一个关键的信息layerStack

画面显示到指定屏幕

-d 选项,后面加指定屏幕的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?

关注公众号阅读剩余内容,获取示例源码!

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u010542873/article/details/137438457

智能推荐

大数据的关键技术(一)-程序员宅基地

文章浏览阅读333次,点赞5次,收藏5次。(6)MapReduce 的功能:①、

【已解决】JSON.parse 返回[Object Object] 问题_parse后返回的对象是[object object]-程序员宅基地

文章浏览阅读5.8k次,点赞6次,收藏4次。JSON.parse返回[Object Object]问题,【已解决】:如果是console.log输出JSON.parse的结果的话, 查看下console.log里是否_parse后返回的对象是[object object]

并查集的应用hdu1598-程序员宅基地

文章浏览阅读387次。刚看到题,就想起最小生成树,但是没想到怎么去实现,第二天还是看了解题报告才想起枚举。#include#include#include#define maxn 205int pre[maxn];struct ss{ int beg; int end; int w;}s[1005];void init(int n){ for(int i=1;i<=

解决eclipse中没有javaee视图的问题_怎么显示java-ee eclipes-程序员宅基地

文章浏览阅读7k次,点赞6次,收藏9次。1 Eclipse没JavaEE视图  1.1 在Eclipse中菜单help选项中选择install new software选项  1.2 在work with 栏中输入 http://download.eclipse.org/releases/ganymede/ -->> 敲一下回车  1.3 选择web and java ee development选项,然后选择..._怎么显示java-ee eclipes

LaTex/TexStudio导入.bib文件引用参考文献不能打开.bib原因_latex i couldn't open database file ref.bib-程序员宅基地

文章浏览阅读1.5w次,点赞12次,收藏16次。Process started: bibtex.exe "test"This is BibTeX, Version 0.99d (TeX Live 2019/W32TeX)The top-level auxiliary file: test.auxThe style file: acm.bstI couldn't open database file Reference.bib---line 6 of file test.aux : \bibdata{Reference : ._latex i couldn't open database file ref.bib

MATLAB各个产品概述----哪些产品需要安装?哪些产品不需要安装?阅完了然_matlab哪些产品可以不安装-程序员宅基地

文章浏览阅读4.8w次,点赞191次,收藏692次。本文整理了MATLAB2022a各个产品,概述每个产品的功能,便于更好的了解和学习MATLAB。_matlab哪些产品可以不安装

随便推点

我的世界2D英文版Scratch源文件_paper minecraft scratch源代码-程序员宅基地

文章浏览阅读575次,点赞7次,收藏6次。我的世界2D英文版Scratch源文件为sb3文件。_paper minecraft scratch源代码

YOLOv5改进算法之添加CA注意力机制模块_yolov5添加注意力机制-程序员宅基地

文章浏览阅读7.8k次,点赞93次,收藏180次。YOLO_yolov5添加注意力机制

python-函数参数类型检查_python 判断参数类型-程序员宅基地

文章浏览阅读5.1k次。python在3.5后引入了参数类型注解,例:def add(x:int,y:int)->int:#对x,y和返回值都进行注释,为int类型 return x + y注:注解是对函数参数和返回值的‘注释’,没有强制定义的作用(因为python是动态语言啊)那么既然注解不能强制定义类型,在函数调用中怎么判断传入的参数是否是我想要的呢?在次引入python的inspect模块ins..._python 判断参数类型

企业培训系统如何选择?高效便捷线上培训系统_组织线上培训的流程应当如何?有哪些注意事项?-程序员宅基地

文章浏览阅读212次。对于企业来说,人才培养计划一直是贯穿整个企业发展的。员工对于企业来说是第一位,因为员工是具有非常强可塑性的,员工不仅能创造产品,更是具有思考创新的人,所以定期培训打磨,才能使整个企业进步。而这个打磨方式,就是企业培训。越来越多的企业选择线上培训,线上培训系统可以选择系统内训系统或者直接选择使用具有saas系统的在线培训平台。今天就以快考题为例给大家介绍一下在线企业培训系统应该如何选择。首先,一定要支持多种端口接入,比如PC端、移动端、小程序、APP等,这样不仅对于员工来说时间非常方便,利用碎片化时间就可_组织线上培训的流程应当如何?有哪些注意事项?

数据库基础教程(Oracle)_oracle数据库入门教程-程序员宅基地

文章浏览阅读7.7k次,点赞15次,收藏107次。  随着网络化的快速发展,信息技术也向着多样化的趋势发展,同时人们的生活也越来越离不开信息技术。对信息进行管理的数据库技术在计算机中也不断被使用,组成了信息系统中不可缺少的部分。随着数据库技术在信息管理中的普遍使用,对信息管理变得更科学、更便捷,而且实现了信息管理的现代化和合理化,更好的促进了信息管理的效率,从而得到了更多人的欢迎和推广。该文将对计算机数据库技术相关理论进行合理的分析,对数据库技术在信息管理中的使用情况进行分析,并提出一些科学有效改善的措施和方法,促进数据库技术在信息管理中更好地发挥其优势。_oracle数据库入门教程

GitLab搭建_gitlab-ce-程序员宅基地

文章浏览阅读1.1k次。GitLab搭建正在上传…重新上传取消正在上传…重新上传取消正在上传…重新上传取消正在上传…重新上传取消正在上传…重新上传取消正在上传…重新上传取消正在上传…重新上传取消正在上传…重新上传取消正在上传…重新上传取消正在上传…重新上传取消正在上传…重新上传取消正在上传…重新上传取消正在上传…重新上传取消正在上传…重新上传取消。_gitlab-ce