android5.1竖屏横用显示旋转
显示屏采用驱动IC为ili9881C,LCD的扫描方式参考:
LCD扫描方向
图1
上图中标示的地方是指page 1寄存器0x22不同值对应的第1个像素点,也就是显示原点,左边蓝色箭头表示显示原点在左下角时的扫描方向,右边红色箭头表示显示原点在右上角时的扫码方向。
我们设备正常情况需要的是横屏(比如1280*720),但因为横屏资源少,直接采用了竖屏(720*1280),竖屏横用,下图是720*1280的logo
图2
如果我们竖屏竖用(也就是想手机一样),就不需要对图片和LCD扫描方式做更改,但我们是竖屏横用,见图1。
1. kernel阶段的显示
在kernel阶段,如果我们想显示下面的效果:
图3
需要送给显示控制器的logo图片如下:
图4
这是显示屏厂家默认扫描方式(SS=1&GS=0,对应图1显示原点在右上角),如果我们修改扫描方式为(SS=0&GS=1,对应图1显示原点在左下角),下面的logo也可以有上面的显示效果
图5
我们可能这样想,既然是作为横屏使用,那是否可以直接采用横屏的图片(如1280*720分辨率),但咨询显示屏厂家之后说显示屏的扫描方向只能是先扫描一行720个像素点,然后扫描下一行,直到扫描到1280行,而不能像图1中上半部分黄色线头的横向扫描方向,这是由玻璃决定了。
2. android开机动画的显示
进入android系统阶段,可旋转0、90、180、270度,比较灵活,如果是SS=1&GS=0的扫描方式,需要顺时针旋转270度才能正常显示,如果是SS=0&GS=1的扫描方式,旋转90度,考虑到旋转90度的情况比较通用,所以就选择了这种,但要注意,如果开机动画的图片分辨率为竖屏(720*1280),则只能显示图片中间内容,为了解决此问题,需要把图片分辨率改为横屏的(1280*720),同时记得把bootanimation.zip里面desc.txt文件的分辨率也相应改过来,比如:
1280 720 15
p 1 0 part0
p 0 0 part1
\device\qcom\msm8909\system.prop中添加persist.panel.orientation=90,
\frameworks\base\services\core\java\com\android\server\wm\WindowManagerService.java文件mRotation定义了旋转反向,如下:
int mRotation =SystemProperties.getInt("persist.panel.orientation", 0) / 90;
简易调试方法:
(1) adb shellsetprop service.adb.root 1
(2) adb shellsetprop persist.panel.orientation 0
(3) adb reboot
修改就生效了。