高通安卓Q显示屏不同角度旋转竖屏横屏切换
由于项目需要,使用了竖屏当横屏用,所以需要将系统显示旋转90度,我们目前平台是基于高通QCM6125安卓10.0系统。为了方便以后其他角度的旋转,添加了persist.panel.orientation 属性来控制角度。
- 开机动画
frameworks/base/cmds/bootanimation/BootAnimation.cpp@@ -279,11 +279,36 @@ status_t BootAnimation::readyToRun() {if (status)return -1;+ char rAngleValue[PROPERTY_VALUE_MAX];
+ property_get("persist.panel.orientation", rAngleValue, "0");
+ int rAngle = atoi(rAngleValue);
+ SurfaceComposerClient::Transaction t;
+
+ if ( rAngle == 90) {+ int temp = dinfo.h;
+ dinfo.h= dinfo.w;
+ dinfo.w= temp;
+ Rect destRect(dinfo.w, dinfo.h);
+ t.setDisplayProjection(mDisplayToken, 1, destRect, destRect);//orient=1
+ ALOGD("BootAnimation default set rotation to be 90...");
+ } else if (rAngle == 180) {+ Rect destRect(dinfo.w, dinfo.h);
+ t.setDisplayProjection(mDisplayToken, 2, destRect, destRect);//orient=2
+ ALOGD("BootAnimation default set rotation to be 180...");
+ } else if (rAngle == 270) {+ int temp = dinfo.h;
+ dinfo.h= dinfo.w;
+ dinfo.w= temp;
+ Rect destRect(dinfo.w, dinfo.h);
+ t.setDisplayProjection(mDisplayToken, 3, destRect, destRect);//orient=3
+ ALOGD("BootAnimation default set rotation to be 270...");
+ }
+// create the native surfacesp<SurfaceControl> control = session()->createSurface(String8("BootAnimation"),dinfo.w, dinfo.h, PIXEL_FORMAT_RGB_565);- SurfaceComposerClient::Transaction t;
+ //SurfaceComposerClient::Transaction t;t.setLayer(control, 0x40000000).apply();
- 进入桌面后
frameworks/base/core/java/com/android/internal/view/RotationPolicy.java
import android.os.UserHandle;
+import android.os.SystemProperties;import android.provider.Settings;import android.util.Log;import android.view.Display;
@@ -42,7 +43,7 @@ public final class RotationPolicy {private static final String TAG = "RotationPolicy";private static final int CURRENT_ROTATION = -1;- public static final int NATURAL_ROTATION = Surface.ROTATION_0;
+ public static final int NATURAL_ROTATION = SystemProperties.getInt("persist.panel.orientation", 0) / 90;
private RotationPolicy() {
frameworks/base/services/core/java/com/android/server/wm/DisplayContent.java
+import android.os.SystemProperties;import android.util.ArraySet;import android.util.DisplayMetrics;import android.util.Slog;
@@ -361,7 +362,7 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo** @see #updateRotationUnchecked()*/
- private int mRotation = 0;
+ private int mRotation = SystemProperties.getInt("persist.panel.orientation", 0) / 90;/*** Last applied orientation of the display.
@@ -1370,6 +1371,10 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo* UNFREEZE THE SCREEN.*/boolean updateRotationUnchecked(boolean forceUpdate) {+
+ if(true){+ return true;
+ }ScreenRotationAnimation screenRotationAnimation;if (!forceUpdate) {if (mDeferredRotationPauseCount > 0) {
updateRotationUnchecked方法里不直接返回true,会出现进入桌面一瞬间竖屏再转横屏。
3. 系统导航栏位置
将系统导航栏位置固定在底部,如果不需要这里不用修改。
frameworks\base\services\core\java\com\android\server\wm\DisplayPolicy.java
@NavigationBarPositionint navigationBarPosition(int displayWidth, int displayHeight, int displayRotation) {- if (navigationBarCanMove() && displayWidth > displayHeight) {+ /*if (navigationBarCanMove() && displayWidth > displayHeight) {if (displayRotation == Surface.ROTATION_270) {return NAV_BAR_LEFT;} else if (displayRotation == Surface.ROTATION_90) {return NAV_BAR_RIGHT;}
- }
+ }*/return NAV_BAR_BOTTOM;}
- recovery ui
bootable/recovery/minui/graphics.cpp
@@ -401,6 +401,19 @@ int gr_init() {} else { // "ROTATION_NONE" or unknown stringgr_rotate(GRRotation::NONE);}
+
+ int rotation_user =
+ android::base::GetIntProperty("persist.panel.orientation", 0);
+ if(90 == rotation_user){+ rotation = GRRotation::RIGHT;
+ }else if(180 == rotation_user){+ rotation = GRRotation::DOWN;
+ }else if(270 == rotation_user){+ rotation = GRRotation::LEFT;
+ }else{+ rotation = GRRotation::NONE;
+ }
+
if (gr_draw->pixel_bytes != 4) {
- mk文件里设置persist.panel.orientation默认值,选配0/90/180/270
- LK阶段开机图片
高通使用splash.img存储LK的开机动画,在device/qcom/common/display/logo/logo.png
添加对应分辨率的图片,手动旋转相应的角度后,重新打包编译splash.img下载进去。
高通安卓Q显示屏不同角度旋转竖屏横屏切换相关推荐
- 高通安卓调试LCD几方面总结
来公司上班现在已经整整一个月了,蔽人不才,能力有限,学习进度缓慢,不过也是有一点点的收获与心得,在这里写出来与大家分享,养成良好的记录习惯也免得后忘记. 不啰嗦了,开入正题.来公司一个月左右的时间,主 ...
- android backtrace,高通android q 通过backtrace使用addr2ine工具定位crash问题记录
高通android q 通过backtrace使用addr2ine工具定位crash问题记录 高通android q 通过backtrace,使用addr2ine工具,定位crash问题记录 cras ...
- 高通安卓关闭WiFi服务不卸载驱动
高通安卓关闭WiFi不卸载驱动 由于客户的算法在注册授权时,会读取机器的一些硬件信息作为凭证,如果下次调用算法时,硬件信息不一致时,算法会注销不能再使用.硬件信息包括了WiFi的Mac地址,可是WiF ...
- 高通平台android7.1系统显示旋转180度
实现方法 内核层修改 kernel\msm-3.18\arch\arm\boot\dts\qcom\dsi-panel-lm215w-lvds-1080p-video.dtsi增加qcom,mdss- ...
- 高通 安卓 Uefi 的理解
最近接触了高通bootloader,对UEFI有了一些理解,虽说不深入,俗话说不总结等于没学,因此还是小小总结一下: UEFI早在PC领域名声大噪,UEFI+gpt以其自身优点干翻了传统bios+mb ...
- 高通android q 通过backtrace,使用addr2ine工具,定位crash问题记录
crash日志记录如下: 1.找到带有符号表的相应的库文件或者可执行文件: 高通sda660为例,我这里目录是 android/out/target/product/sdm660_64/symbols ...
- 高通安卓平台BOARD-ID和MSM-ID
文章目录 BOARD-ID 传统格式 最新的格式 MSM-ID BOARD-ID 说明文档目录:kernel/msm4.14/Documentation/devicetree/bindings/arm ...
- 高通安卓msm8909适配gt1xx系列的TP
最近新开发项目,需要适配新的TP,lcd等等,因为更换了TP IC,适配需要更换驱动和节点信息等等,为了以后快速适配,写下来作为记录. 准备东西 1.找厂商拿配置文件,一般会提供xxxxx.cfg文件 ...
- 高通410随身WiFi之uz801系列的板子怎么切换卡上网
首先准备一个 uz801的随身WiFi 才开看看 有没有卡槽,没有的话,你还要自己焊接 下面是正面 下一步 通电上机 打开手机连接上 去找到网关地址,例如 192.168.100.1 不代表全部 设 ...
最新文章
- 基于Python的QPSK音频的波形和频谱
- 点云 DBSCAN 对点云障碍物聚类
- yum下载包保存到本地
- android 入门-工序
- linux线程同步(4)-自旋锁
- HighNewTech:重磅!来自深度学习的三位大牛Yoshua、Hinton、LeCun荣获2018年图灵奖
- js修改地址栏url_不同寻常的地址栏过渡
- java的比较运算符是_Java 基础(比较运算符,逻辑运算符,三元运算符)
- jni c 传递对象到java_JNI将二进制数据从C传递到Java
- 对TCP/IP协议的一些看法(13):IP路由
- Python基础教程 第六章 学习笔记
- Python入门--列表生成式
- python开发环境
- 9. Doctrine2
- Java Interview Questions (1)
- C++ 归并排序与快速排序
- Java基础——学生管理系统
- 缺陷分析之缺陷预防的过程
- ASCII码与英文的显示原理
- NOD32升级ID,免费ID升级网址