Android Graphics 多屏同显/异显 - C++示例程序(标准版)
”为了理解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?
关注公众号阅读剩余内容,获取示例源码!
Android Graphics 多屏同显/异显 - C++示例程序(标准版)的更多相关文章
- RK3288 双屏异显,两屏默认方向不一致
CPU:RK3288 系统:Android 5.1 RK3288 支持双屏异显,一般都会同方向显示,如果遇到两个 lcd 的默认方向不一致,只需修改下面参数即可. 例如:主屏为mipi接口,分辨率为 ...
- Android OpenGL ES(六)创建实例应用OpenGLDemos程序框架 .
有了前面关于Android OpenGL ES的介绍,可以开始创建示例程序OpenGLDemos. 使用Eclipse 创建一个Android项目 Project Name: OpenGLDemos ...
- RK3288 6.0 双屏异显,横屏+竖屏【转】
本文转载自:http://blog.csdn.net/clx44551/article/details/78215730?locationNum=8&fps=1 RK3288 6.0 双屏异显 ...
- iTOP-iMX6开发板Android系统下LVDS和HDMI双屏异显方法
迅为iMX6 开发板 android 系统下 LVDS 和 HDMI 双屏异显的使用过程. 注意,iTOP-iMX6 开发板的 android 系统想要实现对 LVDS 和 HDMI 双屏异显功能的支 ...
- RK3288 增加双屏异显 eDP+LVDS
CPU:RK3288 系统:Android 5.1 下面是官方文档中的信息. 1.rk3288 支持的显示接口可以任意组合. 2.双屏异显时,一个显示接口当主屏,另一个当副屏:主副屏由板级 dts 文 ...
- Rk3288 双屏异显单触摸
系统版本:RK3288 android 5.1 设备同时有两个lcd,主屏是mipi接口,带有触摸屏,触摸屏是usb接口,副屏是hdmi接口,没有触摸屏,正常情况下,两个lcd显示相同内容,触摸屏一切 ...
- RK3288 双屏异显时,触摸屏(USB接口)无反应
系统版本:RK3288 android 5.1 设备同时有两个lcd,主屏是mipi接口,带有触摸屏,触摸屏是usb接口,副屏是hdmi接口,没有触摸屏,正常情况下,两个lcd显示相同内容,触摸屏一切 ...
- 【ARM开发板】迅为IMX6开发板QT下LVDS和HDMI双屏异显
本文转自迅为论坛:http://www.topeetboard.com 平台:迅为-IMX6开发板 首先开发板分别连接9.7寸屏和HDMI显示器,然后使用MfgTool工具烧写QT系统,然后拨码开关设 ...
- [Android6.0][RK3399] 双屏异显代码实现流程分析(一)【转】
本文转载自:http://blog.csdn.net/dearsq/article/details/55049182 Platform: RK3399 OS: Android 6.0 Version: ...
- iTOP-4418/6818开发板支持双屏异显,双屏同显
iTOP-4418/6818开发板平台安卓系统下支持双屏异显,双屏同显,客户可按照不同用途,分别播放适合屏幕显示方式的内容 ,如HDMI屏幕和LCD屏幕显示不同内容, 一个屏幕播放广告,另一个屏幕运行 ...
随机推荐
- Java 使用 itext 向PDF插入数据和图片
Java 使用 itext 向PDF插入数据和图片 一.下载Adobe Acrobat DC 二.制作模板 1.准备一个word模板,并转换成PDF格式 2.使用Adobe Acrobat DC打开P ...
- 【LeetCode数组#1二分法】二分查找、搜索插入、在排序数组中查找元素的第一个和最后一个位置
二分查找 题目 力扣704题目链接 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 ...
- Glide源码解析三(注册组件)
转载请标明出处,维权必究: https://www.cnblogs.com/tangZH/p/12900387.html Glide源码解析一,初始化 Glide源码解析二-into方法 Glide源 ...
- Java 常用类 String的使用---测试
1 package com.bytezero.stringclass; 2 3 import org.junit.Test; 4 5 /** 6 * 7 * 8 * 9 * @author Bytez ...
- 青少年CTF训练平台-web部分随笔
文章管理系统 首先打开环境(>ω<。人)ZZz♪♪ 既然要做题,就要做全面了,图上说了,既然有假flag我就先找出来: 假flag: 打开vmware,使用sqlmap进行处理: sqlm ...
- C#拾遗补漏之goto跳转语句
前言 在我们日常工作中常用的C#跳转语句有break.continue.return,但是还有一个C#跳转语句很多同学可能都比较的陌生就是goto,今天大姚带大家一起来认识一下goto语句及其它的优缺 ...
- CTF中常见编码
ASCII编码 ASCII HEX DEC flag{hello_ctfer} 66 6c 61 67 7b 68 65 6c 6c 6f 5f 63 74 66 65 72 7d 102 108 9 ...
- Openssl命令详解 - 密钥篇
非对称算法密钥生成和公钥提取 # ecc算法 openssl ecparam -out pri.key -name prime256v1 -genkey #生成ec密钥,国密使用-name SM2 o ...
- 霞鹜文楷 字体推荐 - 'Fira Code', '霞鹜文楷等宽 Light',
霞鹜文楷 字体推荐 字体推荐 在vscode里面 'Fira Code', '霞鹜文楷等宽 Light', 仓库 https://github.com/lxgw/LxgwWenKai https:// ...
- 基于Python的 如何检查字符串输入是否为数字
一 概念 这种有很多常用的方法,这里只介绍一种常用的方法是使用正则表达式来匹配数字的模式.通过定义一个匹配数字的正则表达式,然后使用re模块中的search()方法来进行匹配. 二 例子: 下面是一个 ...