您的位置:首页 > 产品设计 > UI/UE

Android源码中关机充电UI的修改

2016-03-16 15:45 309 查看
  对于Android源码来讲,不管是Android4.X系统还是Android5.X系统,关机充电的流程是一样的。想从网上找关于修改关机充电UI的知识,发现基本没有,今天有时间就总结一下关于如何修改关机充电的UI界面。

  首先,需要了解一下关机充电的流程:如下图



  看不懂图没有关系 我们今天主要是修改上层的UI界面,所以底层的流程有个大概的了解就行。

  好了,下面我们就在Android源码上把关机充电的样式改为LG手机充电的风格。就那本人之前修改过做一个总结。

   一:首先要找到关机充电显示图片所在的位置:mediatek/custom/common/lk/logo

    在这个目录下找到你的源码工程配置信息向对应的目录,我的工程对应的文件是cu_hd720 ,然后把需要的图片给替换掉

   

   二.控制 图片代码的地方     mediatek/external/libshowlogo/show_animation_common.c

   可以看出来 这是一个.C文件  那么如何实现图片之间相互交替出现呢。

  
void fill_animation_battery_ver_1(unsigned int capacity, void *fill_addr, void * dec_logo_addr, void * logo_addr, LCM_SCREEN_T phical_screen)

{
LOG_ANIM("[show_animation_common: %s %d]capacity : %d\n",__FUNCTION__,__LINE__, capacity);
charging_animation_index++;
if (capacity >= 100) {
fill_animation_logo(FULL_BATTERY_INDEX, fill_addr, dec_logo_addr, logo_addr,phical_screen);
charging_animation_index = 0;
} else if (capacity < 10) {LOG_ANIM("[show_animation_common: %s %d]charging_low_index = %d\n",__FUNCTION__,__LINE__, charging_low_index);
fill_animation_logo(LOW_BATTERY_INDEX, fill_addr, dec_logo_addr, logo_addr,phical_screen);
//add by lyj
fill_animation_number(NUMBER_PIC_START_0 + capacity, 1, fill_addr, logo_addr, phical_screen);
fill_animation_dynamic(NUMBER_PIC_PERCENT,percent_location_rect, fill_addr, percent_pic_addr, logo_addr, phical_screen);

if (charging_low_index >= 9) charging_low_index = 0;
charging_animation_index = 0;
} else {

// add by lyj 10-100
if(capacity >= 10 && capacity < 25){ //ONE_BATTERY_INDEX
int display = ONE_BATTERY_INDEX;
if(next_index == 0 && charging_animation_index > display_time_interval ){
next_index = 1;
display = TWO_BATTERY_INDEX;
charging_animation_index = 0;
}else if(next_index == 1 && charging_animation_index > display_time_interval ){
next_index = 0;
charging_animation_index = 0;
}
fill_animation_logo(display, fill_addr, dec_logo_addr, logo_addr,phical_screen);

}else if(capacity >= 25 && capacity < 40){ //TWO_BATTERY_INDEX
int display = TWO_BATTERY_INDEX;
if(next_index == 0 && charging_animation_index > display_time_interval ){
next_index = 1;
display = THREE_BATTERY_INDEX;
charging_animation_index = 0;
}else if(next_index == 1 && charging_animation_index > display_time_interval ){
next_index = 0;
charging_animation_index = 0;
}
fill_animation_logo(display, fill_addr, dec_logo_addr, logo_addr,phical_screen);
}else if(capacity >= 70 && capacity < 80){ // FIVE_BATTERY_INDEX
int display = FIVE_BATTERY_INDEX;
if(next_index == 0 && charging_animation_index > display_time_interval ){
next_index = 1;
display = SIX_BATTERY_INDEX;
charging_animation_index = 0;
}else if(next_index == 1 && charging_animation_index > display_time_interval ){
next_index = 0;
charging_animation_index = 0;
}
fill_animation_logo(display, fill_addr, dec_logo_addr, logo_addr,phical_screen);
}
else if(capacity >= 80 && capacity < 90){//80 - 90  //SIX_BATTERY_INDEX
int display = SIX_BATTERY_INDEX;
if(next_index == 0 && charging_animation_index > display_time_interval ){
next_index = 1;
display = FULL_BATTERY_INDEX;
charging_animation_index = 0;
}else if(next_index == 1 && charging_animation_index > display_time_interval ){
next_index = 0;
charging_animation_index = 0;
}
fill_animation_logo(display, fill_addr, dec_logo_addr, logo_addr,phical_screen);
}else{//90-100 FULL_BATTERY_INDEX
fill_animation_logo(FULL_BATTERY_INDEX, fill_addr, dec_logo_addr, logo_addr,phical_screen);
charging_animation_index = 0;
}//add by lyj
fill_animation_number(NUMBER_PIC_START_0 + (capacity/10), 0, fill_addr, logo_addr, phical_screen);
fill_animation_number(NUMBER_PIC_START_0 + (capacity%10), 1, fill_addr, logo_addr, phical_screen);
fill_animation_dynamic(NUMBER_PIC_PERCENT, percent_location_rect, fill_addr, percent_pic_addr, logo_addr, phical_screen);
}

}


  看一下这个方法我们可以看出,capacity这个变量就是判断电量的,那么我们就可以根据电量的多少来控制图片的显示。当电量capacity >= 100时 我们执行fill_animation_logo(FULL_BATTERY_INDEX, fill_addr, dec_logo_addr, logo_addr,phical_screen); 那么FULL_BATTERY_INDEX是什么东西呢,我们在这个目录下看mediatek/custom/common/lk/logo/update  打开之后发现
   #define FULL_BATTERY_INDEX   37     后面的37是什么意思呢,别急,咱们接着看一下 mediatek/custom/common/lk/logo/update 或者 mediatek/custom/common/lk/logo/rules.mk

./tool/bmp_to_raw ./temp32.raw ./$p/"${p}_bat_10_08".bmp
./tool/bmp_to_raw ./temp33.raw ./$p/"${p}_bat_10_09".bmp
./tool/bmp_to_raw ./temp34.raw ./$p/"${p}_bat_10_10".bmp
./tool/bmp_to_raw ./temp35.raw ./$p/"${p}_bat_bg".bmp
./tool/bmp_to_raw ./temp36.raw ./$p/"${p}_bat_img".bmp
./tool/bmp_to_raw ./temp37.raw ./$p/"${p}_bat_100".bmp
./tool/bmp_to_raw ./boot_logo ./$p/"${p}_kernel".bmp
  ^_^ 哈哈 /tool/bmp_to_raw ./temp37.raw ./$p/"${p}_bat_100".bmp 看到这之后你是不是就明白了,对!这个就是图片的名,在cu_hd720目录下电池满的图片的名称就是cu_hd720_bat_100.bmp  这个就对上号了, 图片就是这样转化的,关机充电所有的图片都是在mediatek/custom/common/lk/logo/update 或者 mediatek/custom/common/lk/logo/rules.mk目录下转化的。

    代码种if(){

     }else if (){}else if (){}.....就是控制图片的逻辑代码。

  当然,LG关机充电是不需要控制图片坐标。那么如果有手机不是这样的界面,需要控制坐标该怎么处理呢。接着看

  三:控制图片坐标的位置:mediatek/custom/common/lk/include/target/cust_diaplay.h

     在这个文件中有许多调整坐标的地方,首先你要确定你的手机的分辨率,然后找到对应的分辨率去修改

    // hd720 720*1280 // hd720 720*1280

// battery capacity rectangle ----A
#define CAPACITY_LEFT (266) // battery capacity center
#define CAPACITY_TOP (435)
#define CAPACITY_RIGHT (456)
#define CAPACITY_BOTTOM (705)

// first number rectangle --------B
#define NUMBER_LEFT (290) // number
#define NUMBER_TOP (256)//386
#define NUMBER_RIGHT (335)
#define NUMBER_BOTTOM (320)//450

// % rectangle ----------C
#define PERCENT_LEFT (380) // percent number_left + 2*number_width
#define PERCENT_TOP (256) //386
#define PERCENT_RIGHT (437)
#define PERCENT_BOTTOM (320) //450

// top animation part --------D
#define TOP_ANIMATION_LEFT (278) // top animation
#define TOP_ANIMATION_TOP (100)
#define TOP_ANIMATION_RIGHT (441)
#define TOP_ANIMATION_BOTTOM (129)

// for old animation ----------E
#define BAR_LEFT (313)
#define BAR_TOP (238)
#define BAR_RIGHT (406)
#define BAR_BOTTOM (453)

在这里做一个简单的解释:A组坐标是整个电池容量的一个坐标 B:显示电量数字的相对坐标 C:%号的相对坐标 D和E代表的是页面显示动画图片的相对坐标

其中,TOP是左上角纵坐标,LEFT是左上角横坐标,BOTTOM是右下角纵坐标,RIGHT是右下角横坐标。,它是一个相对坐标,因为在Android中X轴和Y轴的正方向为右和下。,不仅仅是Android ,大部分显示系统都是按照这个标准来定义坐标系的。如此,我们很容易得出电池图片的高度和宽度。

在来看一下Sumsung的界面显示控制的代码

void fill_animation_battery_ver_1(unsigned int capacity, void *fill_addr, void * dec_logo_addr, void * logo_addr, LCM_SCREEN_T phical_screen)
{
LOG_ANIM("[show_animation_common: %s %d]capacity : %d\n",__FUNCTION__,__LINE__, capacity);

if (capacity >= 100) {
fill_animation_logo(FULL_BATTERY_INDEX, fill_addr, dec_logo_addr, logo_addr,phical_screen);
} else if (capacity < 10) {
LOG_ANIM("[show_animation_common: %s %d]charging_low_index = %d\n",__FUNCTION__,__LINE__, charging_low_index);
fill_animation_logo(ANIM_V0_BACKGROUND_INDEX, fill_addr, dec_logo_addr, logo_addr,phical_screen);//low battery
fill_animation_number(NUMBER_PIC_START_0 + capacity, 1, fill_addr, logo_addr, phical_screen);
fill_animation_dynamic(NUMBER_PIC_PERCENT, percent_location_rect, fill_addr, percent_pic_addr, logo_addr, phical_screen);
} else {
unsigned int capacity_grids = 0;
capacity_grids = CAPACITY_BOTTOM - (CAPACITY_BOTTOM - CAPACITY_TOP) * (capacity - 10) / 90;
LOG_ANIM("[show_animation_common: %s %d]capacity_grids : %d,charging_animation_index = %d\n",__FUNCTION__,__LINE__, capacity_grids,charging_animation_index);
fill_animation_logo(ANIM_V1_BACKGROUND_INDEX, fill_addr, dec_logo_addr, logo_addr,phical_screen);
fill_animation_line(ANIM_LINE_INDEX, capacity_grids, fill_addr, logo_addr, phical_screen);
fill_animation_number(NUMBER_PIC_START_0 + (capacity/10), 0, fill_addr, logo_addr, phical_screen);
fill_animation_number(NUMBER_PIC_START_0 + (capacity%10), 1, fill_addr, logo_addr, phical_screen);
fill_animation_dynamic(NUMBER_PIC_PERCENT, percent_location_rect, fill_addr, percent_pic_addr, logo_addr, phical_screen);//控制%号的显示

if (capacity <= 90)
{
RECT_REGION_T top_animation_rect = {TOP_ANIMATION_LEFT, capacity_grids - (TOP_ANIMATION_BOTTOM - TOP_ANIMATION_TOP), TOP_ANIMATION_RIGHT, capacity_grids}; // 动画
fill_animation_dynamic(BAT_ANIM_START_0 + charging_animation_index, top_animation_rect, fill_addr, top_animation_addr, logo_addr, phical_screen);
if (charging_animation_index >= 9) charging_animation_index = 0;
}

}

}

// battery capacity rectangle   ----A
#define CAPACITY_LEFT                (266) // battery capacity center
#define CAPACITY_TOP                 (435)
#define CAPACITY_RIGHT               (456)
#define CAPACITY_BOTTOM              (705)

// first number rectangle  --------B
#define NUMBER_LEFT                  (290) // number
#define NUMBER_TOP                   (256)//386
#define NUMBER_RIGHT                 (335)
#define NUMBER_BOTTOM                (320)//450

// %  rectangle    ----------C
#define PERCENT_LEFT                 (380) // percent number_left + 2*number_width
#define PERCENT_TOP                  (256) //386
#define PERCENT_RIGHT                (437)
#define PERCENT_BOTTOM               (320) //450

// top animation part      --------D
#define TOP_ANIMATION_LEFT           (278) // top animation
#define TOP_ANIMATION_TOP            (100)
#define TOP_ANIMATION_RIGHT          (441)
#define TOP_ANIMATION_BOTTOM         (129)

// for old animation    ----------E
#define BAR_LEFT            (313)
#define BAR_TOP             (238)
#define BAR_RIGHT           (406)
#define BAR_BOTTOM          (453)


   在这里做一个简单的解释:A组坐标是整个电池容量的一个坐标 B:显示电量数字的相对坐标  C:%号的相对坐标   D和E代表的是页面显示动画图片的相对坐标

   其中,TOP是左上角纵坐标,LEFT是左上角横坐标,BOTTOM是右下角纵坐标,RIGHT是右下角横坐标。,它是一个相对坐标,因为在Android中X轴和Y轴的正方向为右和下。,不仅仅是Android ,大部分显示系统都是按照这个标准来定义坐标系的。如此,我们很容易得出电池图片的高度和宽度。

   在来看一下Sumsung的界面显示控制的代码

  void fill_animation_battery_ver_1(unsigned int capacity, void *fill_addr, void * dec_logo_addr, void * logo_addr, LCM_SCREEN_T phical_screen)
{
LOG_ANIM("[show_animation_common: %s %d]capacity : %d\n",__FUNCTION__,__LINE__, capacity);

if (capacity >= 100) {
fill_animation_logo(FULL_BATTERY_INDEX, fill_addr, dec_logo_addr, logo_addr,phical_screen);
} else if (capacity < 10) {
LOG_ANIM("[show_animation_common: %s %d]charging_low_index = %d\n",__FUNCTION__,__LINE__, charging_low_index);
fill_animation_logo(ANIM_V0_BACKGROUND_INDEX, fill_addr, dec_logo_addr, logo_addr,phical_screen);//low battery
fill_animation_number(NUMBER_PIC_START_0 + capacity, 1, fill_addr, logo_addr, phical_screen);
fill_animation_dynamic(NUMBER_PIC_PERCENT, percent_location_rect, fill_addr, percent_pic_addr, logo_addr, phical_screen);
} else {
unsigned int capacity_grids = 0;
capacity_grids = CAPACITY_BOTTOM - (CAPACITY_BOTTOM - CAPACITY_TOP) * (capacity - 10) / 90;
LOG_ANIM("[show_animation_common: %s %d]capacity_grids : %d,charging_animation_index = %d\n",__FUNCTION__,__LINE__, capacity_grids,charging_animation_index);
fill_animation_logo(ANIM_V1_BACKGROUND_INDEX, fill_addr, dec_logo_addr, logo_addr,phical_screen);
fill_animation_line(ANIM_LINE_INDEX, capacity_grids, fill_addr, logo_addr, phical_screen);
fill_animation_number(NUMBER_PIC_START_0 + (capacity/10), 0, fill_addr, logo_addr, phical_screen);
fill_animation_number(NUMBER_PIC_START_0 + (capacity%10), 1, fill_addr, logo_addr, phical_screen);
fill_animation_dynamic(NUMBER_PIC_PERCENT, percent_location_rect, fill_addr, percent_pic_addr, logo_addr, phical_screen);//控制%号的显示

if (capacity <= 90)
{
RECT_REGION_T top_animation_rect = {TOP_ANIMATION_LEFT, capacity_grids - (TOP_ANIMATION_BOTTOM - TOP_ANIMATION_TOP), TOP_ANIMATION_RIGHT, capacity_grids}; // 动画
fill_animation_dynamic(BAT_ANIM_START_0 + charging_animation_index, top_animation_rect, fill_addr, top_animation_addr, logo_addr, phical_screen);
if (charging_animation_index >= 9) charging_animation_index = 0;
}

}

}
  代码很清晰,不用做过多的解释。

  我们现在所做的都是在Android源码已有的图片上进行的修改,那么现在要是添加一些图片怎么办?接着看

 四:图片的添加

      1:首先把需要的图片放在对应的资源文件下

      2:然后在mediatek/custom/common/lk/logo/update 和 mediatek/custom/common/lk/logo/rules.mk目录图片进行注册

             这里需要注意的是:注册是有先后顺序的,一定要把注册的   图片放在最后。在rules.mk常规注册一下就行了。在/update中

            要在./tool/bmp_to_raw 和./tool/zpipe -l 9 以及rm -rf ./temp0.raw都需要注册

      3:在控制代码的show_animation_common.c文件中控制图片即可。

  以上是在Android4.X基础上做的。Android5.X只有包括文件的路径,代码的控制有多改变,但是修改的流程是和Android4.X是一样的。下面就对Android5.X相对应的路径做一下说明

    关机充电图片的路径:/bootable/bootloader/lk/dev/logo

    控制图片代码的路径:/vendor/mediatek/proprietary/external/libshowlogo/show_animation_common.c

    控制图片坐标的路径:/vendor/mediatek/proprietary/external/libshowlogo/cust_display.h

    图片注册的路径: /vendor/mediatek/proprietary/external/libshowlogo/rules.mk

                                 /vendor/mediatek/proprietary/external/libshowlogo/update

     好了,本篇对关机充电界面的修改做了一个简单实例说明。希望能给大家带来帮助。

  

                    

       

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Android 手机系统