首页 > 编程语言 >Android Graphics 多屏同显/异显 - C++示例程序(标准版)

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

时间:2024-04-06 21:23:00浏览次数:19  
标签:layer 多屏 示例 MultiDisplayDemo 标准版 源码 屏幕 display

”为了理解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?

 

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

 

标签:layer,多屏,示例,MultiDisplayDemo,标准版,源码,屏幕,display
From: https://www.cnblogs.com/roger-yu/p/18117934

相关文章

  • React19 新特性 – 附带代码示例的更新
    ReactJS是前端开发世界中最流行的UI库之一。我喜欢React的原因之一就是它背后的团队以及社区对它的热情。当社区提出对新功能和改进的需求时,团队会倾听。React的未来令人兴奋而有趣。如果我必须用一句话来总结,我会说这几乎概括了一切:“少写代码,多实现功能。”在本......
  • 如何使用CSS变量 - 通过代码示例解释
    如果你正在构建网站或Web应用程序,你应该已经知道代码重复被认为是一种不良实践。这就是为什么你应该学习如何使用CSS变量来减少你编写的CSS代码量并将你的样式带到一个新的水平。最成功的Web应用程序拥有令人惊叹的设计。不幸的是,为了达到预期的效果,Web开发人员需要准备大量的样......
  • 配置交换机双归接入IP网络示例(V-STP方式推荐)
    组网需求如图4-23所示,通过配置M-LAG双归接入IP网络可以满足以下要求:当一条接入链路发生故障时,流量可以快速切换到另一条链路,保证可靠性。为了高效利用带宽,两条链路同时处于active状态,可实现使用负载分担的方式转发流量。图4-23 配置M-LAG双归接入IP组网图配置思......
  • 配置M-LAG双归接入普通以太网络示例(根桥方式)
    组网需求如图4-22所示,采用M-LAG方式将主机双归接入普通以太网络。由于用户对于业务的可靠性要求很高,如果主机和接入设备之间做链路聚合只能保证链路级的可靠性,接入设备发生故障时则会导致业务中断。这时用户可以采用跨设备链路聚合技术,正常工作时链路进行负载分担且任何一台......
  • Vue3 Diff 之 patchKeyedChildren 动态示例
    在学习全网学习各路大神的关于Vue3Diff算法分析文章的时候,一定离不开关键方法patchKeyedChildren。patchKeyedChildren处理的场景比较多,大致有5个主要过程。如果你希望查看不同测试用例下,patchKeyedChildren具体的内部处理过程,可以尝试一下这个:《Vue3Diff之patchKey......
  • 【WPF应用34】WPF基本控件-Menu的详解与示例
    WPF(WindowsPresentationFoundation)是.NET框架的一个部分,用于构建桌面应用程序的用户界面。在WPF中,菜单(Menu)是一种常用的控件,用于提供一组选项或命令,使用户可以根据自己的需要执行特定的操作。本文将详细介绍WPF中的Menu控件,包括其基本用法、属性和事件。同时,我们将通过一......
  • 排序代码示例
    冒泡排序#include<iostream>usingnamespacestd;intmain(){ intm[]={6,8,44,7,9,34,64,1}; for(intj=0;j<8;j++){ for(inti=j+1;i<8;i++){ if(m[j]>m[i]){ swap(m[j],m[i]); } } } for(inti=0;i<8;i++){ cout<<m[i]<<......
  • 艾科瑞特科技:计算机视觉-图像示例替换
    艾科瑞特科技:计算机视觉-图像示例替换关键词:目标检测、目标跟踪、图像识别、图像分类、视频分析、自然语言处理、自然语言分析、计算机视觉、人工智能、AIGC、AI、大模型、多模态大模型、API、Docker、镜像、API市场、云市场、国产软件、信创内容摘要:图像示例替换技术利用先......
  • 数据分析的利器,Pandas 软件包详解与应用示例
    左手编程,右手年华。大家好,我是一点,关注我,带你走入编程的世界。公众号:一点sir在中土大地上,有一位名为"数据剑客"的江湖人士,他手持一柄闪烁着银光的利剑,剑法犀利,能够破解数据的种种奥秘。传言他曾在一场数据风暴中横扫八方,击溃了无数数据乱象,以无情的数据剑法征服了各路数据恶徒......
  • React 19 新特性 – 附带代码示例的更新
    ReactJS是前端开发世界中最流行的UI库之一。我喜欢React的原因之一就是它背后的团队以及社区对它的热情。当社区提出对新功能和改进的需求时,团队会倾听。React的未来令人兴奋而有趣。如果我必须用一句话来总结,我会说这几乎概括了一切:“少写代码,多实现功能。”在本文中,我......