小米手环4表盘配置文件的编写

【BOA】小米手环4可以使用自己的表盘,这里是我总结出来的表盘配置文件写法,有任何问题欢迎指正。

Posted by NEVER_Gargoyle on August 17, 2019

总体说明

  • (X,Y)均为120*240像素中以左上角为(0,0)的像素坐标

  • TopLeftX&TopLeftY 均为左上角坐标
    BottomRightX&BottomRightY为右下角坐标
    由此确定一个矩形区域,再根据Alignment确定对齐方式

    (仅限文字,图片直接X &Y就行了)

  • ImageIndex是从第XX号图片开始读取

    ImagesCount是读取几张图片

    有一些代码中包含简中、繁中、英文就直接一路按顺序拍下去,所以会出现"ImagesCount": 20+这种情况。

  • Spacing是文字间距,一般设置为1

  • 关于打不打,:json文件的标准语法,下面还有并列就要打逗号,如果是最后一项了就不用打。

所有类别(可以打乱顺序)

{
  "Background": {
    "Image": {
      "X": 0,
      "Y": 0,
      "ImageIndex": 0
    }
  },


    "Time": {
        "Hours": {
    }
        "Minutes": {
    }
        "Seconds": {      
    }   ## 一般不用秒,我也不知道为什么
  },


  "Activity": {
    "Steps": {
    }
    "Pulse": {

    }
  },


  "Heart": {
  },    ##请仔细看步数具体语法后再使用,与上面`Activity`中`pulse`都是心率显示





  "StepsProgress": {
  },    ##请仔细看步数具体语法后再使用,与上面`Activity`中`Steps`都是步数显示


  "Date": {
    "MonthAndDay": {
        },
        "DelimiterImageIndex": 21
      },
      "TwoDigitsMonth": true,
      "TwoDigitsDay": true
    },
    "WeekDay": {
    },
    "DayAmpm": {
    }
  },


  "Status": {
    "DoNotDisturb": {
      "Coordinates": {
      },
      "ImageIndexOn": 58
    },
    "Lock": {
      "Coordinates": {
      },
      "ImageIndexOn": 59
    },
    "Bluetooth": {
      "Coordinates": {
      },
      "ImageIndexOff": 57
    },
    "Battery": {
      "UnknownType": {
      },
      "Text": {
      },
      "Icon": {
      }
    }
  },


  "Other": {
    }
  }


}

详细语法

背景图片

{
 "Background": {
 "Image": {
 "X": 0,
 "Y": 0,
 "ImageIndex": 0
 }
 },

时间

  "Time": {
    "Hours": {
      "Tens": {
        "X": 48,
        "Y": 22,
        "ImageIndex": 1,
        "ImagesCount": 10
      },
      "Ones": {
        "X": 81,
        "Y": 22,
        "ImageIndex": 1,
        "ImagesCount": 10
      }
    },
    "Minutes": {
      "Tens": {
        "X": 59,
        "Y": 76,
        "ImageIndex": 11,
        "ImagesCount": 10
      },
      "Ones": {
        "X": 81,
        "Y": 76,
        "ImageIndex": 11,
        "ImagesCount": 10
      }
    }
  },

日期

  "Date": {
    "MonthAndDay": {
      "OneLine": {
        "Number": {
          "TopLeftX": 14,
          "TopLeftY": 190,
          "BottomRightX": 72,
          "BottomRightY": 190,
          "Alignment": "TopRight",   ##或者"TopLeft",即左对齐

          "Spacing": 2,
          "ImageIndex": 11,
          "ImagesCount": 10
        },
        "DelimiterImageIndex": 21
      },
      "TwoDigitsMonth": true,
      "TwoDigitsDay": true
    },
    "WeekDay": {
      "X": 74,
      "Y": 190,
      "ImageIndex": 22,
      "ImagesCount": 21
    },
    "DayAmpm": {
      "TopLeftX": 90,
      "TopLeftY": 173,
      "ImageIndexAMCN": 43,
      "ImageIndexPMCN": 44,
      "ImageIndexAMEN": 45,
      "ImageIndexPMEN": 46
    }
  },

步数

步数显示的话有几种,可以是环状,数字显示,条状等(当然可以混用)

  1. 数字显示

    非常重要:数字显示的步数是在Activity下的子项目,但是环状是单独的类

        "Steps": {
          "Step": {
            "TopLeftX": 49,
            "TopLeftY": 220,
            "BottomRightX": 78,
            "BottomRightY": 234,
            "Alignment": "TopLeft",
            "Spacing": 1,
            "ImageIndex": 47,
            "ImagesCount": 10
          }
        }
    
  2. 条状显示

    条状显示实际上是一格一格组成,像下面例子所示,Segments中项越多分的就越细,有一个官方的只分了八个,可以做一些参考。

      "StepsProgress": {
        "Linear": {
          "StartImageIndex": 70,
          "Segments": [
            {
              "X": 3,
              "Y": 204,
              "X2": 0,
              "Y2": 0,
              "X3": 0
            },
            {
              "X": 13,
              "Y": 204,
              "X2": 0,
              "Y2": 0,
              "X3": 0
            },
            {
              "X": 23,
              "Y": 204,
              "X2": 0,
              "Y2": 0,
              "X3": 0
            }
       
          ]
        }
      },
    
  3. 环状显示

    非常重要:环状显示是单独一个类,不要放到Activity里去了!!

      "StepsProgress": {
        "Circle": {
          "CenterX": 61,
          "CenterY": 108,
          "RadiusX": 45,
          "RadiusY": 45,
          "StartAngle": -47,
          "EndAngle": 112,
          "Width": 3,
          "Color": "0xFFFFFFFFFFF9FBF0"
        }
      },
    

    CenterXCenterY:既然是环状就有个圆心,这就是圆心坐标了。

    RadiusXRadiusY:半径,但是我也不知道半径有两个,设置成一样就好了

    StartAngleEndAngle:开始结束角度,整圆设置为0和360就好

    Width:环状宽度

心率

心率的显示原理和步数一模一样,我就不多说了。

  1. 数字显示

  2. 条状显示

  3. 环状显示

  4. 格状显示

    什么是格状显示:五格类似- - - - -,其中-就是你放的图片。因为小米把心率分成五个区间所以心率里这个比较常用。(其实步数也可以用,但是不太好用所以就没在步数里写了)

      "Heart": {
        "Scale": {
          "StartImageIndex": 78,
          "Segments": [
            {
              "X": 70,
              "Y": 215,
              "X2": 0,
              "Y2": 0,
              "X3": 0
            },
            {
              "X": 70,
              "Y": 215,
              "X2": 0,
              "Y2": 0,
              "X3": 0
            },
            {
              "X": 70,
              "Y": 215,
              "X2": 0,
              "Y2": 0,
              "X3": 0
            },
            {
              "X": 70,
              "Y": 215,
              "X2": 0,
              "Y2": 0,
              "X3": 0
            },
            {
              "X": 70,
              "Y": 215,
              "X2": 0,
              "Y2": 0,
              "X3": 0
            }
          ]
        }
      }
    

状态

状态是指上面那一行图标,这个基本上不需要怎么改,只有电量可以切换数字/图标。

  "Status": {
    "DoNotDisturb": {
      "Coordinates": {
        "X": 4,
        "Y": 5,
        "X2": 17,
        "Y2": 2,
        "X3": 1
      },
      "ImageIndexOn": 56
    },
    "Lock": {
      "Coordinates": {
        "X": 21,
        "Y": 5,
        "X2": 17,
        "Y2": 2,
        "X3": 1
      },
      "ImageIndexOn": 57
    },
    "Bluetooth": {
      "Coordinates": {
        "X": 38,
        "Y": 5,
        "X2": 12,
        "Y2": 2,
        "X3": 1
      },
      "ImageIndexOff": 58
    },
    "Battery": {
      "UnknownType": {
        "TopLeftX": 0,
        "TopLeftY": 0,
        "BottomRightX": 0,
        "BottomRightY": 0,
        "Alignment": 0,
        "Spacing": 0,
        "ImageIndex": 0,
        "ImagesCount": 0
      },
      "Text": {
        "TopLeftX": 64,
        "TopLeftY": 6,
        "BottomRightX": 84,
        "BottomRightY": 16,
        "Alignment": "TopRight",
        "Spacing": 1,
        "ImageIndex": 59,
        "ImagesCount": 10
      },
      "Icon": {
        "X": 94,
        "Y": 5,
        "ImageIndex": 69,
        "ImagesCount": 9
      }
    }
  },
  1. 电量

        "Battery": {
          "UnknownType": {
            "TopLeftX": 0,
            "TopLeftY": 0,
            "BottomRightX": 0,
            "BottomRightY": 0,
            "Alignment": 0,
            "Spacing": 0,
            "ImageIndex": 0,
            "ImagesCount": 0
          },
          "Text": {
            "TopLeftX": 64,
            "TopLeftY": 6,
            "BottomRightX": 84,
            "BottomRightY": 16,
            "Alignment": "TopRight",
            "Spacing": 1,
            "ImageIndex": 59,
            "ImagesCount": 10
          },
          "Icon": {
            "X": 94,
            "Y": 5,
            "ImageIndex": 69,
            "ImagesCount": 9
          }
        }
    

其它

其它一般用于动图的制作,也可以再加一个普通图片来覆盖其它东西(虽然一般不会这么用)。

  "Other": {
    "Animation": {
      "AnimationImage": {
        "X": 0,
        "Y": 35,
        "ImageIndex": 69,
        "ImageCount": 8,
        "X3": 100
      },
      "x1": 0,
      "y1": 8,
      "Interval": 200
    }
  }

其中Interval是时间间隔,单位也许是毫秒?

至于那些X1,Y1,X3是什么我也不太知道。。。

实例

其实多看一点json文件就会了,推荐一个网站【https://www.bandbbs.cn

我自制的一个表盘:https://www.bandbbs.cn/threads/844/