Android屏幕旋转总结
转自:http://www.myexception.cn/operating-system/1452058.html
1. ProjectConifg.mk中定义宏MTK_LCM_PHYSICAL_ROTATION=180,定义此宏后,Surface Flinger会读取rotate属性对画面进行反转刷新,因此正常开机后的所有画面都可以实现翻转180度刷新
2. LK Logo修改,包括开机第一张Logo,以及充电Logo,由于LK阶段Surface Flinger没有启动,MTK_LCM_PHYSICAL_ROTAION不会作用,实现反转显示方法有二,一,替换Logo资源,使用原有资源翻转180度的资源替换之;二,调整Frame Buffer中的刷新顺序,需要修改Path: alps/mediatek/platform/mt6589/lk; Function:show_logo
3. Kernel Logo修改,类似于LK Logo,方法有二,一,使用反转180度的Logo资源替换原有资源;二,调整Frame Buffer中的刷新顺序,请修改Path:alps/mediate/external/boot_logo_updater/boot_logo_updater; Function: main()
4. 开关机动画,请修改Path: alps/frameworks/base/cmds/bootanimation/bootanimation.cpp
Function: BootAnimation::readyToRun()
5. IPO,请修改Path: alps/mediatek/external/ipod/Bootlogo.cpp,Function: mt65xx_surface_init
6. Factory Mode,请修改Path: alps/mediatek/factory/src/miniui/Graphics.c,Function: gr_flip()
7. Recovery Mode,请修改Path: alps/bootable/recovery/miniui/Graphics.c. Function: gr_flip()
8. 如果只有屏幕发生反转,TP不需要反转,请在tp driver中,tpd_up 与tpd_down函数报x, y坐标时 更改为 (x = LCM_WIDTH-x) , (y= LCM_HEIGHT-y)
9. 如果关机动画依然没有旋转,请修改Alps\frameworks\native\libs\gui\SurfaceComposerClient.cpp
10. volume up+power key进入boot mode菜单, engineer build下开机模式字符串,以及recovery mode进入选择菜单需要翻转180度,请参考下面的方案:
①. 在\alps\bootable\bootloader\lk\dev\video\cfb_console.c文件中增加以下函数:
#define SWAP32_16(x) ((((x) & 0x0000ffff) << 16) | (((x) & 0xffff0000) >> 16)) //mtk add
video_drawchars()
{
......
......
case GDF_16BIT_565RGB:
//mtk add begin
if (0 == strncmp(MTK_LCM_PHYSICAL_ROTATION, "180", 3))
{
while (count--) {
c = *s;
cdat = video_fontdata + (c + 1) * VIDEO_FONT_HEIGHT - 1;
for (rows = VIDEO_FONT_HEIGHT, dest = dest0;
rows--;
dest += VIDEO_LINE_LEN) {
u8 bits = *cdat--;
((u32 *) dest)[0] = SWAP32_16(SHORTSWAP32 ((video_font_draw_table16 [bits & 3] & eorx) ^ bgx));
((u32 *) dest)[1] = SWAP32_16(SHORTSWAP32 ((video_font_draw_table16 [bits >> 2 & 3] & eorx) ^ bgx));
((u32 *) dest)[2] = SWAP32_16(SHORTSWAP32 ((video_font_draw_table16 [bits >> 4 & 3] & eorx) ^ bgx));
((u32 *) dest)[3] = SWAP32_16(SHORTSWAP32 ((video_font_draw_table16 [bits >> 6] & eorx) ^ bgx));
}
dest0 += VIDEO_FONT_WIDTH * VIDEO_PIXEL_SIZE;
s++;
}
}
else
{
//mtk add end
while (count--) {
c = *s;
cdat = video_fontdata + c * VIDEO_FONT_HEIGHT;
for (rows = VIDEO_FONT_HEIGHT, dest = dest0;
rows--;
dest += VIDEO_LINE_LEN) {
u8 bits = *cdat++;
((u32 *) dest)[0] = SHORTSWAP32 ((video_font_draw_table16 [bits >> 6] & eorx) ^ bgx);
((u32 *) dest)[1] = SHORTSWAP32 ((video_font_draw_table16 [bits >> 4 & 3] & eorx) ^ bgx);
((u32 *) dest)[2] = SHORTSWAP32 ((video_font_draw_table16 [bits >> 2 & 3] & eorx) ^ bgx);
((u32 *) dest)[3] = SHORTSWAP32 ((video_font_draw_table16 [bits & 3] & eorx) ^ bgx);
}
dest0 += VIDEO_FONT_WIDTH * VIDEO_PIXEL_SIZE;
s++;
}
}//mtk add
break;
......
......
}
void video_puts (const char *s)
{
int count = strlen (s);
//mtk add begin
if (0 == strncmp(MTK_LCM_PHYSICAL_ROTATION, "180", 3))
{
while (count--)
{
video_putc_ext (*s++);
}
}
else
{
//mtk add end
while (count--)
video_putc (*s++);
}
mt_disp_update(0, 0, CFG_DISPLAY_WIDTH, CFG_DISPLAY_HEIGHT);
}
//mtk add begin
void video_putc_ext (const char c)
{
static int nl = 1;
// Jett: check newline here in order to
// scroll the screen immediately for the first time video_printf()
//
if (console_col >= CONSOLE_COLS)
console_newline ();
switch (c) {
case 13: /* back to first column */
console_cr ();
break;
case '\n': /* next line */
if (console_col || (!console_col && nl))
console_newline ();
nl = 1;
break;
case 9: /* tab 8 */
CURSOR_OFF console_col |= 0x0008;
console_col &= ~0x0007;
if (console_col >= CONSOLE_COLS)
console_newline ();
break;
case 8: /* backspace */
console_back ();
break;
default: /* draw the char */
video_putchar ((CONSOLE_COLS - console_col - 1) * VIDEO_FONT_WIDTH,
(CONSOLE_ROWS - console_row) * VIDEO_FONT_HEIGHT,
c);
console_col++;
/* check for newline */
if (console_col >= CONSOLE_COLS) {
console_newline ();
nl = 0;
}
}
CURSOR_SET}
//mtk add end
②. 在\alps\mediatek\platform\mt6572\lk\boot_mode_menu.c里面修改boot_mode_menu_select()这个函数,
void boot_mode_menu_select()
{
......
......
else if(mtk_detect_key(MT65XX_MENU_OK_KEY))//VOL_DOWN,
{
//use for OK
video_clean_screen(); //mtk add
break;
}
else
{
//pass
}
}
......
......
}
Android屏幕旋转总结的更多相关文章
- Android 屏幕旋转 处理 AsyncTask 和 ProgressDialog 的最佳方案
的最佳方案 标签: Android屏幕旋转AsyncTaskProgressDialog 2014-07-19 09:25 39227人阅读 评论(46) 收藏 举报 分类: [android 进阶之 ...
- 【Android】[转] Android屏幕旋转使用OrientationEventListener的监听
说明 遇到一个奇葩的问题,我在使用onConfigChanged拦截屏幕的横竖屏旋转时,发现直接进行180度的横屏/竖屏转换居然没有反应!查找原因发现仅对landscape或者portrait状态有用 ...
- android 屏幕旋转
转自:http://blog.csdn.net/oyzhizhong/article/details/8131799 屏是LANDSCAPE的,要让它默认显示为PORTRAIT. 1.kernel里要 ...
- Android屏幕旋转
一个手机最基本的旋转方向有上面4种,而在Android开发中,涉及到屏幕旋转的地方很多,而且各个函数给出的角度值都不一样,比如 Activity的getRotate,Camera的setDisplay ...
- android 屏幕旋转 不重新加载oncreate
当手机设定了使用横屏或者竖屏的时候,还想要使用重力感应,可以设置activity属性 android:screenOrientation="sensor" 但是每次翻转屏幕,都会重 ...
- Qt for Android 程序禁止屏幕旋转
有时候我们希望让一个程序的界面始终保持在一个方向,不随手机(平板)方向旋转而变化:在AndroidManifest.xml的每一个需要禁止转向的Activity配置中加入 android:screen ...
- 设置Android默认锁定屏幕旋转
/********************************************************************************** * 设置Android默认锁定屏 ...
- 【转】如何在 Android 程序中禁止屏幕旋转和重启Activity
原文网址:http://www.cnblogs.com/bluestorm/p/3665890.html 禁止屏幕随手机旋转变化 有时候我们希望让一个程序的界面始终保持在一个方向,不随手机方向旋转而变 ...
- android学习---屏幕旋转
/** *问题:今天学习android访问Servlet,Servlet给返回一个xml格式的字符串,android得到数据后将其显示到一个TextView中,发现Activity得到数据显 * 示到 ...
随机推荐
- ORA-14402: 更新分区关键字列将导致分区的更改
默认情况下,oracle的分区表对于分区字段是不允许进行update操作的,如果有对分区字段行进update,就会报错——ORA-14402: 更新分区关键字列将导致分区的更改.這種情況可以通過開啟表 ...
- 内网安全工具之hscan扫描
工具下载地址:hscan1.2.zip 界面简单,看配置: 这里我们主要需要配置的是模块和参数 模块,按照默认配置就行,取消 check HTTP vulnerability(漏洞检测) 会更快一点. ...
- BZOJ 2822: [AHOI2012]树屋阶梯
Description 求拼成阶梯状的方案数. Sol 高精度+Catalan数. 我们可以把最后一行无线延伸,所有就很容易看出Catalan数了. \(f_n=f_0f_{n-1}+f_1f_{n- ...
- Linux的目录结构
学习Linux这么久,对Linux的目录的目录结构进行整理总结一下. 以下是对这些目录的解释: /bin:bin是Binary的缩写, 这个目录存放着最经常使用的命令. /boot:这里存放的是启动L ...
- phpcms新闻轮播图实现
首页如果有新闻的轮播图,点击图片可以进入相关的新闻.因为已经使用外部js轮播插件,所以想不修改插件进行轮播 我用的js插件是yx-rotaion插件,配合phpcms的get工具箱对新闻进行读取并抽取 ...
- struts2 提供的校验器列表
- ffmpeg-20160526-git-bin
ESC 退出 0 进度条开关 1 屏幕原始大小 2 屏幕1/2大小 3 屏幕1/3大小 4 屏幕1/4大小 S 下一帧 [ -2秒 ] +2秒 ; -1秒 ' +1秒 下一个帧 -> -5秒 f ...
- 插头DP专题
建议入门的人先看cd琦的<基于连通性状态压缩的动态规划问题>.事半功倍. 插头DP其实是比较久以前听说的一个东西,当初是水了几道水题,最近打算温习一下,顺便看下能否入门之类. 插头DP建议 ...
- 在SpringMVC中获取request对象
1.注解法 @Autowired private HttpServletRequest request; 2. 在web.xml中配置一个监听 <listener> <listen ...
- 【leetcode】Minimum Window Substring (hard) ★
Given a string S and a string T, find the minimum window in S which will contain all the characters ...