android recovery UI定制及变更

android recovery模式UI:

recovery模式中的UI显示由screen_ui.cpp实现,recovery/res-xhdpi/image/中存放了显示可能用到的图片素材。
android提供了一个库minui用于简单的UI输出,源码在bootable/recovery/minui中.
以下为screen_ui中的一些重要函数及说明:

int gr_init(void);             /* 初始化图形显示,主要是打开设备、分配内存、初始化一些参数 为UI输出作准备*/
void gr_exit(void);            /* 注销图形显示,关闭设备并释放内存 */
int gr_fb_width(void);         /* 获取屏幕的宽度 */
int gr_fb_height(void);        /* 获取屏幕的高度 */
gr_pixel *gr_fb_data(void);    /* 获取显示数据缓存的地址 */
void gr_flip(void);            /* 刷新显示内容 */
void gr_fb_blank(bool blank);  /* 清屏 */
void gr_color(unsigned char r, unsigned char g, unsigned char b, unsigned char a);  /* 设置字体颜色 */
void gr_fill(int x, int y, int w, int h);  /* 填充矩形区域,参数分别代表起始坐标、矩形区域大小 */
int gr_text(int x, int y, const char *s);  /* 显示字符串 */
int gr_measure(const char *s);             /* 获取字符串在默认字库中占用的像素长度 */
void gr_font_size(int *x, int *y);         /* 获取当前字库一个字符所占的长宽 */
void gr_blit(gr_surface source, int sx, int sy, int w, int h, int dx, int dy);  /* 填充由source指定的图片 */
unsigned int gr_get_width(gr_surface surface);   /* 获取图片宽度 */
unsigned int gr_get_height(gr_surface surface);  /* 获取图片高度 */
/* 根据图片创建显示资源数据,name为图片在mk文件指定的相对路径 */
int res_create_surface(const char* name, gr_surface* pSurface); /* 为minui库中提供,用于将一张图片生成一个surface */
void res_free_surface(gr_surface surface);       /* 释放资源数据 */

基于以上函数说明,可以对升级过程中的动画进行定制变更。
例:

  1. 变更动画显示,首先替换/image/中的图片素材。
  2. 素材变更后计算素材的尺寸以及期望素材在屏幕上的显示区域
    ScreenRecoveryUI::GetAnimationBaseline() //此函数确立动画图像的Y轴偏移量
    ScreenRecoveryUI::GetTextBaseline() //此函数确立进度条及文案提示Y轴偏移量
    ScreenRecoveryUI::draw_foreground_locked() //此函数进行升级动画的描画显示,函数中能够根据以上函数确认描画的位置,可以在此其中对图像进行偏移。
  3. 默认升级动画的背景是纯色黑背景,如果想追加升级动画背景图,可以使用LoadBitmap(“backround_all”, &your_png);进行背景描画

你可能感兴趣的:(android,android,bootloader)