用大个的数字填充表盘会是怎么样的?

本来设想这样

但是就是麦步不支持超过20个layer害我以为哪有BUG,查到最后,发现创建到21个layer时返回-1.

最后成了这个样子

/** =====================================================================================*    WatchFaceName:   xyz-reborn*    Description: *    Author:  wisepragma*    Created: August 12th,2017*    HomePage:http://blog.csdn.net/wisepragma* =====================================================================================*/
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "maibu_sdk.h"
#include "maibu_res.h"int32_t app_window_stack_push(Window *window);int8_t maibu_get_battery_percent(int8_t *percent);Window * app_window_stack_get_window_by_id(int32_t id);void app_window_update(Window *window);static const uint8_t N_MIN_HIDE_SEC=3;static const char ORGIN_X=0,ORGIN_Y=0;//大数字起始位置
static const char ORGIN_SM_X=7,ORGIN_SM_Y=7;//小数字起始位置
static const char ORGIN_XSM_X=10,ORGIN_XSM_Y=10;//超小数字起始位置
static GSize WATCH_NUM_SIZE={0,0};//大数字的高与宽,从图片资源上获取
static GSize WATCH_SM_NUM_SIZE={0,0};//小数字的高与宽,从图片资源上获取
static GSize WATCH_XSM_NUM_SIZE={0,0};//超小数字的高与宽,从图片资源上获取
static uint32_t    half_sec_cnt = 0;
//static struct date_time last_time;
static struct TIME_NUM
{uint8_t     value;int8_t      lyid;GRect       rc;
}T_num[4+8+16];static  P_Window   p_win=NULL;
static int32_t      win_id =-1;
static int32_t      timer_id =-1;static const uint16_t         tnum_bmp[10] = {BMP_0, BMP_1, BMP_2, BMP_3, BMP_4, BMP_5, BMP_6, BMP_7, BMP_8, BMP_9};
static const uint16_t         tnum_sm_bmp[11] = {SM_BMP_0, SM_BMP_1, SM_BMP_2, SM_BMP_3, SM_BMP_4, SM_BMP_5, SM_BMP_6, SM_BMP_7, SM_BMP_8, SM_BMP_9, SM_BMP_10 };
static const uint16_t         tnum_xsm_bmp[11] = {XSM_BMP_0, XSM_BMP_1, XSM_BMP_2, XSM_BMP_3, XSM_BMP_4, XSM_BMP_5, XSM_BMP_6, XSM_BMP_7, XSM_BMP_8, XSM_BMP_9, XSM_BMP_10 };static void fillGRect(GRect *grc,uint8_t x,uint8_t y,uint8_t h,uint8_t w)
{grc->origin.x=x;grc->origin.y=y;grc->size.w=w;grc->size.h=h;
}static int8_t create_bmp_layer(Window *pwin, uint32_t bmpID,int16_t x,int16_t y,uint8_t h,uint8_t w/*,enum GColor ecolor*/)
{int8_t lyid=-1;GRect frame_bg;GBitmap bitmap_bg;//height,widthres_get_user_bitmap(bmpID, &bitmap_bg);fillGRect( &frame_bg,x,y,h,w );LayerBitmap lb_bg = {bitmap_bg, frame_bg, GAlignLeft}; P_Layer layer_bitmap_bg = app_layer_create_bitmap(&lb_bg);//app_layer_set_bg_color(layer_bitmap_bg, ecolor); if(layer_bitmap_bg != NULL){lyid=app_window_add_layer(pwin, layer_bitmap_bg);}return lyid;
}//=========hour min======================
static void update_hour_min_layer(struct date_time *datetime)
{GBitmap        bitmap;if(T_num[0].lyid == -1 ){        //bigfillGRect( &T_num[0].rc,  ORGIN_X,  ORGIN_Y,       WATCH_NUM_SIZE.h,  WATCH_NUM_SIZE.w  );fillGRect( &T_num[1].rc,  WATCH_NUM_SIZE.w,  ORGIN_Y,      WATCH_NUM_SIZE.h,  WATCH_NUM_SIZE.w  ); fillGRect( &T_num[2].rc,  2*WATCH_NUM_SIZE.w,  ORGIN_Y,    WATCH_NUM_SIZE.h,  WATCH_NUM_SIZE.w ); fillGRect( &T_num[3].rc,  3*WATCH_NUM_SIZE.w,  ORGIN_Y,     WATCH_NUM_SIZE.h,  WATCH_NUM_SIZE.w  ); //small     GSize dt={60,32};fillGRect( &T_num[4].rc, ORGIN_SM_X ,  ORGIN_SM_Y,       WATCH_SM_NUM_SIZE.h,  WATCH_SM_NUM_SIZE.w  );fillGRect( &T_num[5].rc, ORGIN_SM_X+dt.w ,  ORGIN_SM_Y,       WATCH_SM_NUM_SIZE.h,  WATCH_SM_NUM_SIZE.w  );fillGRect( &T_num[6].rc, ORGIN_SM_X+dt.w*2  ,  ORGIN_SM_Y,       WATCH_SM_NUM_SIZE.h,  WATCH_SM_NUM_SIZE.w  );fillGRect( &T_num[7].rc, ORGIN_SM_X +dt.w*3  ,  ORGIN_SM_Y,       WATCH_SM_NUM_SIZE.h,  WATCH_SM_NUM_SIZE.w  );fillGRect( &T_num[8].rc, ORGIN_SM_X ,  ORGIN_SM_Y+dt.h,       WATCH_SM_NUM_SIZE.h,  WATCH_SM_NUM_SIZE.w  );fillGRect( &T_num[9].rc, ORGIN_SM_X+dt.w   ,  ORGIN_SM_Y+dt.h,       WATCH_SM_NUM_SIZE.h,  WATCH_SM_NUM_SIZE.w  );fillGRect( &T_num[10].rc, ORGIN_SM_X +dt.w *2 ,  ORGIN_SM_Y+dt.h,       WATCH_SM_NUM_SIZE.h,  WATCH_SM_NUM_SIZE.w  );fillGRect( &T_num[11].rc, ORGIN_SM_X +dt.w*3  ,  ORGIN_SM_Y+dt.h,       WATCH_SM_NUM_SIZE.h,  WATCH_SM_NUM_SIZE.w  );//extremely smalldt.h=24;dt.w=32;fillGRect( &T_num[12].rc, ORGIN_XSM_X ,  ORGIN_XSM_Y, WATCH_XSM_NUM_SIZE.h,  WATCH_XSM_NUM_SIZE.w  );fillGRect( &T_num[13].rc, ORGIN_XSM_X+ dt.w ,  ORGIN_XSM_Y, WATCH_XSM_NUM_SIZE.h,  WATCH_XSM_NUM_SIZE.w  );fillGRect( &T_num[14].rc, ORGIN_XSM_X+2* dt.w  ,  ORGIN_XSM_Y, WATCH_XSM_NUM_SIZE.h,  WATCH_XSM_NUM_SIZE.w  );fillGRect( &T_num[15].rc, ORGIN_XSM_X+3* dt.w  ,  ORGIN_XSM_Y, WATCH_XSM_NUM_SIZE.h,  WATCH_XSM_NUM_SIZE.w  );fillGRect( &T_num[16].rc, ORGIN_XSM_X ,  ORGIN_XSM_Y+dt.h, WATCH_XSM_NUM_SIZE.h,  WATCH_XSM_NUM_SIZE.w  );fillGRect( &T_num[17].rc, ORGIN_XSM_X+ dt.w ,  ORGIN_XSM_Y+dt.h, WATCH_XSM_NUM_SIZE.h,  WATCH_XSM_NUM_SIZE.w  );fillGRect( &T_num[18].rc, ORGIN_XSM_X+2* dt.w  ,  ORGIN_XSM_Y+dt.h, WATCH_XSM_NUM_SIZE.h,  WATCH_XSM_NUM_SIZE.w  );fillGRect( &T_num[19].rc, ORGIN_XSM_X+3* dt.w ,  ORGIN_XSM_Y+dt.h, WATCH_XSM_NUM_SIZE.h,  WATCH_XSM_NUM_SIZE.w  );fillGRect( &T_num[20].rc, ORGIN_XSM_X ,  ORGIN_XSM_Y+12+2*dt.h, WATCH_XSM_NUM_SIZE.h,  WATCH_XSM_NUM_SIZE.w  );fillGRect( &T_num[21].rc, ORGIN_XSM_X + dt.w,  ORGIN_XSM_Y+12+2*dt.h, WATCH_XSM_NUM_SIZE.h,  WATCH_XSM_NUM_SIZE.w  );fillGRect( &T_num[22].rc, ORGIN_XSM_X+2* dt.w ,  ORGIN_XSM_Y+12+2*dt.h, WATCH_XSM_NUM_SIZE.h,  WATCH_XSM_NUM_SIZE.w  );fillGRect( &T_num[23].rc, ORGIN_XSM_X+3* dt.w ,  ORGIN_XSM_Y+12+2*dt.h, WATCH_XSM_NUM_SIZE.h,  WATCH_XSM_NUM_SIZE.w  );fillGRect( &T_num[24].rc, ORGIN_XSM_X ,  ORGIN_XSM_Y+12+3*dt.h, WATCH_XSM_NUM_SIZE.h,  WATCH_XSM_NUM_SIZE.w  );fillGRect( &T_num[25].rc, ORGIN_XSM_X+ dt.w ,  ORGIN_XSM_Y+12+3*dt.h, WATCH_XSM_NUM_SIZE.h,  WATCH_XSM_NUM_SIZE.w  );fillGRect( &T_num[26].rc, ORGIN_XSM_X+2* dt.w  ,  ORGIN_XSM_Y+12+3*dt.h, WATCH_XSM_NUM_SIZE.h,  WATCH_XSM_NUM_SIZE.w  );fillGRect( &T_num[27].rc, ORGIN_XSM_X+3* dt.w,  ORGIN_XSM_Y+12+3*dt.h, WATCH_XSM_NUM_SIZE.h,  WATCH_XSM_NUM_SIZE.w  );//最多能创建20个layer,之后会返回-1// pos:0,lyid:0// pos:1,lyid:1// pos:2,lyid:2// pos:3,lyid:3// pos:4,lyid:4// pos:5,lyid:5// pos:6,lyid:6// pos:7,lyid:7// pos:8,lyid:8// pos:9,lyid:9// pos:10,lyid:10// pos:11,lyid:11// pos:12,lyid:12// pos:13,lyid:13// pos:14,lyid:14// pos:15,lyid:15// pos:16,lyid:16// pos:17,lyid:17// pos:18,lyid:18// pos:19,lyid:19// pos:20,lyid:-1// pos:21,lyid:-1// pos:22,lyid:-1// pos:23,lyid:-1// pos:24,lyid:-1// pos:25,lyid:-1// pos:26,lyid:-1// pos:27,lyid:-1        }//秒if(half_sec_cnt!=0){T_num[18].value = datetime->sec/10;T_num[19].value = datetime->sec%10;         }//时分T_num[0].value= datetime->hour/10;T_num[1].value= datetime->hour%10;T_num[2].value= datetime->min/10;T_num[3].value= datetime->min%10;//月日T_num[24].value = datetime->mon/10;T_num[25].value = datetime->mon%10;T_num[26].value = datetime->mday/10;T_num[27].value = datetime->mday%10;//年// uint16_t year=  datetime->year ;//bugfixed:uint8_t year;for (int pos=23; pos>=20; pos--)//年份:[11]个[10]十[9]百[8]千{T_num[pos].value =  datetime->year%10;datetime->year =  datetime->year/10;}//星期几T_num[4].value = (datetime->wday==0)?8:datetime->wday;//电量int8_t percent=100;maibu_get_battery_percent(&percent);for (int pos=15; pos>=13; pos--){T_num[pos].value =  percent%10;percent=percent/10;}// for(int i=0;i<=27;i++)// {// T_num[i].value=8;// }for(int pos=0;pos<=3;pos++){if(T_num[pos].lyid == -1){           T_num[pos].lyid =create_bmp_layer( p_win, tnum_bmp[ T_num[pos].value],  T_num[pos].rc.origin.x,  T_num[pos].rc.origin.y,T_num[pos].rc.size.h, T_num[pos].rc.size.w );}else{P_Layer      p_layer = app_window_get_layer_by_id(p_win, T_num[pos].lyid);             if (p_layer != NULL){res_get_user_bitmap(tnum_bmp[  T_num[pos].value  ], &bitmap);app_layer_set_bitmap_bitmap(p_layer, &bitmap);}                    }//           printf("pos:%d,lyid:%d\n",pos,T_num[pos].lyid );}         for(int pos=4;pos<=11;pos++){if(pos==5||pos==8 ||pos==6||pos==7 || pos==9 || pos==10 || pos==11 ) continue;//         printf("s2.pos:%d,lyid:%d\n",pos,T_num[pos].lyid);//模拟调试使用if(T_num[pos].lyid == -1){T_num[pos].lyid =create_bmp_layer( p_win, tnum_sm_bmp[ T_num[pos].value],  T_num[pos].rc.origin.x,  T_num[pos].rc.origin.y,T_num[pos].rc.size.h, T_num[pos].rc.size.w );}else{ P_Layer      p_layer = app_window_get_layer_by_id(p_win, T_num[pos].lyid);             if (p_layer != NULL){res_get_user_bitmap(tnum_sm_bmp[  T_num[pos].value  ], &bitmap);app_layer_set_bitmap_bitmap(p_layer, &bitmap);}                    }//     printf("pos:%d,lyid:%d\n",pos,T_num[pos].lyid );}for(int pos=12;pos<=27;pos++){if(pos==12 || pos==13 || pos==16 || pos==17) continue;if((pos==18 || pos==19) && half_sec_cnt==0 ) {T_num[pos].value=10;}// T_num[pos].value=8;if(T_num[pos].lyid == -1){T_num[pos].lyid =create_bmp_layer( p_win, tnum_xsm_bmp[ T_num[pos].value],  T_num[pos].rc.origin.x,  T_num[pos].rc.origin.y,T_num[pos].rc.size.h, T_num[pos].rc.size.w );}else{ P_Layer      p_layer = app_window_get_layer_by_id(p_win, T_num[pos].lyid);             if (p_layer != NULL){res_get_user_bitmap(tnum_xsm_bmp[  T_num[pos].value  ], &bitmap);app_layer_set_bitmap_bitmap(p_layer, &bitmap);}                    }               //     printf("pos:%d,lyid:%d\n",pos,T_num[pos].lyid );}}//================================
static void sec_callback(date_time_t tick_time, uint32_t millis,void *context)
{half_sec_cnt++;   //500ms刷新一次,避免秒慢于分钟更新if(half_sec_cnt>=N_MIN_HIDE_SEC*60*2)//几钟后停止显示秒{app_service_timer_unsubscribe(timer_id);half_sec_cnt=0;//     printf("......app_service_timer_unsubscribe\n" );}P_Window      p_win =(P_Window)app_window_stack_get_window_by_id(win_id);if (p_win == NULL)  return;struct date_time datetime;app_service_get_datetime(&datetime);update_hour_min_layer( &datetime);app_window_update(p_win);
}static void on_back_key() {P_Window p_win = app_window_stack_get_window_by_id(win_id);if(p_win != NULL){if(half_sec_cnt==0){timer_id=app_window_timer_subscribe(p_win, 500, sec_callback, p_win);}}}static void time_change_callback(enum SysEventType type, void *context)
{if (type == SysEventTypeTimeChange){P_Window      p_win =(P_Window)app_window_stack_get_window_by_id(win_id);if (p_win == NULL)  return;struct date_time datetime;app_service_get_datetime(&datetime);update_hour_min_layer( &datetime );app_window_update(p_win);    }
}
//---------------main-----------------------------------------------------------------------
int main()
{#ifdef USE_SIMULATORsimulator_init();#endif//....................切换表盘时,资源已销毁,要重新创建layer,否则将不能正常显示.............................................................win_id =-1;half_sec_cnt =-1;timer_id =-1;memset(T_num,-1,sizeof(T_num));//.........................................................................................................................p_win = app_window_create();if (NULL == p_win) return 0;struct date_time datetime;app_service_get_datetime(&datetime);GBitmap bitmap; res_get_user_bitmap(*tnum_bmp, &bitmap);//BMP_ID中取得宽高信息WATCH_NUM_SIZE.h=bitmap.height;WATCH_NUM_SIZE.w=bitmap.width;res_get_user_bitmap(*tnum_sm_bmp, &bitmap);//BMP_ID中取得宽高信息WATCH_SM_NUM_SIZE.h=bitmap.height;WATCH_SM_NUM_SIZE.w=bitmap.width;res_get_user_bitmap(*tnum_xsm_bmp, &bitmap);//BMP_ID中取得宽高信息WATCH_XSM_NUM_SIZE.h=bitmap.height;WATCH_XSM_NUM_SIZE.w=bitmap.width;update_hour_min_layer( &datetime );//显示秒定时器timer_id=app_window_timer_subscribe(p_win, 500, sec_callback, p_win);maibu_service_sys_event_subscribe(time_change_callback);app_window_click_subscribe(p_win, ButtonIdBack,  on_back_key);//ButtonIdDown ButtonIdUp ButtonIdBack,ButtonIdSelectapp_window_update(p_win);if (p_win != NULL) win_id= app_window_stack_push(p_win);//.................................................................................#ifdef USE_SIMULATORsimulator_wait();#endifreturn 0;
}

mai文件下载:

http://pan.baidu.com/s/1kUCZo6z

hacking 麦步手表之(4)制作一个大数字表盘xzy-big-number相关推荐

  1. hacking 麦步手表之(1)精简模拟界面

    有一次看了一集Hacking the System(黑客智多星) 感叹,主持人真是天才 临渊羡鱼不如退而结网 接下来我们来hacking 麦步手表的模拟界面 编译生成.MAI是手表的程序.打开模拟开着 ...

  2. hacking 麦步手表之(2)命令行编译工程

    mbEDITOR.zip http://pan.baidu.com/s/1gf5kHhh 在无空格路径下解压解压并运行 注册.CMD 并注册编译目录成功后双击 _BUILD_MB.CMD 可编译相应目 ...

  3. 麦步手表编程纪实(1)

    2018-01-1100:23:32 早想买一个智能手表,之前买过埃微手环,之后亮哥又送我一个小米手环2,但是都不是我想要的,最后在网上发现了一款可以自主编程的手表-麦步手表, 爽歪歪,399太贵,最 ...

  4. 教你亲手制作一个虚拟数字人,超全步骤详解

    自计算机图形学问世以来,人们一直在尝试创造逼真的数字人类.直到最近,那些成功的人还必须投入数月甚至数年的时间.这是一个非常昂贵和耗时的过程,需要高技术知识和设备以及高超的艺术技巧.但随着MetaHum ...

  5. 零元学Expression Blend 4 - Chapter 3 熟悉操作第一步(制作一个猴子脸)

    原文:零元学Expression Blend 4 - Chapter 3 熟悉操作第一步(制作一个猴子脸) 本篇内容会教你如何使用笔刷.钢笔.渐层以及透明度的调整,还有如何转化图层和路径,最重要的是要 ...

  6. python开发rpa_几步教你用 Python 制作一个 RPA 机器人!

    原标题:几步教你用 Python 制作一个 RPA 机器人! 作者 | 阿文 出品 | CSDN(ID:CSDNnews) 头图 | CSDN下载自东方IC 繁琐且重复的工作 在我们日常的工作中,有很 ...

  7. Python开发第一步:如何制作一个简单的桌面应用

    Python开发第一步:如何制作一个简单的桌面应用 前言 大家好,我是baifagg, 一个热爱Python的编程爱好者. 今天我们来学习一下, 如何用Python制作一个简单的桌面应用程序. 虽然桌 ...

  8. 亲手制作一个《哈利·波特》人物图谱,原来罗恩和赫敏的姻缘从第一部就已注定?...

    大数据文摘出品 作者:王烨 文摘菌记得小时候看<哈利·波特>小说的时候,最难记住的就是那些音译的名字,又长又多,最后只能关注那几个主要人物,跟着主要剧情一路过去,当个爽文看完了. 这就导致 ...

  9. ai怎么画循环曲线_AI插画设计,用AI制作一个只可爱的短腿柯基插画

    本次用AI绘制的是一只人见人爱的短腿小柯基,柯基简直萌翻了有没有,尤其在爬楼梯的时候,我们用简单的线条工具绘制这只可爱的的小柯基,创建插画的时候,可以用铅笔工具绘制线条,或者弧形工具创建所需的曲线,具 ...

最新文章

  1. 经纬度绘图_【知识科普】地形图图例汇总,测绘人识图绘图必备(含dwg版下载)...
  2. 生成静态文件的新闻系统核心代码
  3. cubemx pwm dma_红米K30S至尊纪念版翻车?被曝虽是LDC屏,却是PWM调光
  4. 大厅安排(normal)
  5. RHEL 5.4下cyrus-sasl-2.1.22 的编译安装
  6. ASP.NET Core Blazor Webassembly 之 组件
  7. CTabCtrl控件标签的相关设置
  8. 前端框架:AntdUI 文档入门
  9. [Spring实战系列](18)注解切面
  10. Vue3 组合式Api之customRef实现防抖功能
  11. 分享几个免费的开源邮件服务器软件
  12. motrix下载没速度_再见迅雷!高颜值没广告的下载神器Motrix体验
  13. MATLAB websave批量下载(URL)
  14. gerber文件怎么导贴片坐标_如何学习贴片机编程
  15. gif怎么转换html,gif转视频的教程:怎么把gif转换成mp4、avi、wmv
  16. 万物可运算——运算符重载(四)
  17. 【H5/JS】游戏常用算法-碰撞检测-包围盒检测算法(2)-矩形
  18. 关于android的nfc问题 Ultralight c (通用卡)
  19. Wechaty|不使用微信的web协议的机器人
  20. SecureCRT 设置 彩色 中文

热门文章

  1. 设计数据密集型应用——数据系统的未来
  2. led显示屏应用于舞台搭建的解决方案以及需要注意的细节分析
  3. 计算机视觉技术的基础知识,计算机视觉及导航技术基础.pdf
  4. 查看NAND Flash空间大小
  5. Apache多后缀解析漏洞复现(apache_parsing_vulnerability)
  6. Python简单实现microbit传球小游戏
  7. Altium Designer 20设置铜皮到板框的距离(设置内缩)
  8. 【Go进阶】如何让你Go项目中日志清晰有趣-Zap日志库
  9. NFT交易市场的下一站是社区主导
  10. 抖音短视频怎么做?3大要点助你玩转抖音