点击登录

米环7教程 表盘增加亮度调节及通过文件存储数据的教程

zzt741

Lv.7
🔥创作者
社区会员
米坛社区六周年纪念勋章 米坛社区百万注册纪念勋章 热心市民 米坛社区五周年纪念勋章
通过点击表盘的时间来调节亮度应该是杨铭洲际最先实现的,我兴许是受到了启发,在我的机甲表盘上也增加了这一功能,兴许是受到我的机甲表盘的影响,之后也有很多表盘实现了点击时钟增加亮度,分钟减少亮度的功能,个人认为非常的实用,所以贴上教程以供参考。教程是之前的存货,抱歉拖到现在才发。
首先用压缩软件解压表盘文件,如果里面有app.js文件,那么这个表盘才可以修改。先要打开app.json文件,在runtime后面那对括号里面有个type,值为2,应该改为0(如果已经为0则不用管),此时2个bin文件已经失效了,可以将其删掉。之后点开watchface文件夹里面的index.js,如果里面的代码是连在一片的话,可以用在线工具给格式化一下,比如https://tool.lu/js/,之后找到代码的init_view函数的末尾,或者可以找onInit函数前面的一个后括号,之后在这个括号里面加上如下代码,注意要新开一行写:
JavaScript:
let addCover = hmUI.createWidget(hmUI.widget.TEXT, {
    x: 55,
    y: 160,
    w: 84,
    h: 72
});
let subCover = hmUI.createWidget(hmUI.widget.TEXT, {
    x: 55,
    y: 261,
    w: 84,
    h: 72
});
addCover.addEventListener(hmUI.event.CLICK_UP, function (info) {
    let bri = hmSetting.getBrightness() + 25
    if (bri > 100) bri = 100
    hmSetting.setBrightness(bri)
});
subCover.addEventListener(hmUI.event.CLICK_UP, function (info) {
    let bri = hmSetting.getBrightness() - 25
    if (bri < 0) bri = 0
    hmSetting.setBrightness(bri);
});
addCover代表增加按钮的触控区域,sub为减少,其中的x,y分别代表横纵坐标,左上角为0,w,h则为宽高,注意手环分辨率为490*192,请自行确定合适的值,x,y的值可以参考表盘时间的位置,如 hour_startX: 55,hour_startY: 160里面就是小时的横纵坐标,w和h如果想要精确设置的话可以参考小时和分钟对应图片的宽高,之后保存后将其压缩回去就好了,注意zip包下面必须直接是app.json等文件,25代表每次调节25%的亮度。
如果想要点击后直接跳转到亮度调节界面,可以只留一个触控区域,将function (info){后面的3行改为
hmApp.startApp({ url: 'Settings_lightAdjustScreen', native: true })即可。

另外,之前我无意间发现使用hmFS.SysProSetChars在系统缓存中存储数据似乎容易导致设备重启甚至变砖,需要重置手环才能恢复正常,而且官方也不建议使用这种方式,所以建议尽量避免使用这种方式,然而早期的很多程序都喜欢使用这种方式,例如小宠物表盘等。建议可以使用文件存储数据,我的所有程序都是使用这种方式存储的,以下是示例代码,这是我根据官方示例修改的。
JavaScript:
function str2ab(str) {//在程序开头try后面添加
    const buf = new ArrayBuffer(str.length * 2) // 每个字符2字节
    const bufView = new Uint16Array(buf)
    for (let i = 0, strLen = str.length; i < strLen; i++) {
        bufView[i] = str.charCodeAt(i)
    }
    return buf
}
class LocalStorage {
    constructor(fileName = '') {
        this.fileName = fileName
        this.contentObj = {}
    }
    set(obj) {
        const file = hmFS.open(this.fileName, hmFS.O_RDWR | hmFS.O_TRUNC)
        const contentBuffer = str2ab(JSON.stringify(obj))
        hmFS.write(file, contentBuffer, 0, contentBuffer.byteLength)
        hmFS.close(file)
    }
    get() {
        const [fsStat, err] = hmFS.stat(this.fileName)
        if (err === 0) {
            const { size } = fsStat
            const fileContentUnit = new Uint16Array(new ArrayBuffer(size))
            const file = hmFS.open(this.fileName, hmFS.O_RDONLY | hmFS.O_CREAT)
            hmFS.seek(file, 0, hmFS.SEEK_SET)
            hmFS.read(file, fileContentUnit.buffer, 0, size)
            hmFS.close(file)
            try {
                const val = String.fromCharCode.apply(null, fileContentUnit)
                this.contentObj = val ? JSON.parse(val) : {}
            } catch (error) {
                this.contentObj = {}
            }
        }
        return this.contentObj
    }
}

//---
onDestory() {
    console.log('page onDestroy invoked')
    localStorage.set(data)//在onDestroy函数中添加这一句
}

//---
const localStorage = new LocalStorage('zzt741-pet.json')//创建类,指定文件名
data = localStorage.get()//获取文件数据
if (Object.keys(data).length == 0) {//设置默认值
    data = {
        whaleCount: 0,
        resurgenceCount: 0
    }
}
let var1 = data.whaleCount //获取具体的值
data.whaleCount = var1 //设置值
 
最后编辑:
上下滑动调节亮度
JavaScript:
      const fill_rect = hmUI.createWidget(hmUI.widget.FILL_RECT, {
       x: -209,
       y: 0,
       w: 592,
       h: 490,
       color: 0x000000
      })//定义矩形
      let y
      let ligh = hmSetting.getBrightness()
      if (true) {//启用状态
       fill_rect.addEventListener(hmUI.event.MOVE, function(info) {
        if (y === undefined) {
         y = info.y
        } else {
         let returns = ligh - (info.y - y) / 4//灵敏度
         if (returns >= 100) {
          returns = 100
         } else if (returns <= 0) {
          returns = 0
         }
         hmSetting.setBrightness(returns)
         y = info.y
         ligh = hmSetting.getBrightness()

        }
        console.log(info.y)
       })

       fill_rect.addEventListener(hmUI.event.CLICK_UP, function(info) {
        y = undefined
       })
       fill_rect.addEventListener(hmUI.event.CLICK_DOWN, function(info) {
        y = info.y
       })
       fill_rect.addEventListener(hmUI.event.MOVE_OUT, function(info) {
        y = undefined
       })
       fill_rect.addEventListener(hmUI.event.MOVE_IN, function(info) {
        y = info.y
       })
      }
不错,但是我记得表盘上不是不支持滑动吗?然后这个向上滑动好像是降低亮度吧?
 
我学习了你的方法给表盘添加了调节亮度的功能,但是发现增加了这几行代码之后,严重拖慢了手环的运行速度(特别是从表盘页面滑动到其他页面时),甚至出现了一次手环重启的情况,请问这个是什么原因导致的呢?
 
最后编辑:
同时,我所编辑的表盘app.json文件里runtime后面并没有type(我也不理解教程中所说的“两个bin文件已经失效了”是什么意思)。index.js里也没有init_view函数,我把代码加入到onInit函数前面的后括号(大括号)里了,请问是以上原因导致表盘运行速度减慢了吗?
 
同时,我所编辑的表盘app.json文件里runtime后面并没有type(我也不理解教程中所说的“两个bin文件已经失效了”是什么意思)。index.js里也没有init_view函数,我把代码加入到onInit函数前面的后括号(大括号)里了,请问是以上原因导致表盘运行速度减慢了吗?
翻了您的帖子和翻阅了其他大佬的帖子,我明白了bin文件失效是什么意思了,有的表盘文件里的watchface文件夹里不仅有js,还有bin,且bin的优先级更高,将type2改成0就是让这个bin失效。刚好我编辑的这个表盘没有bin文件,所以我没有理解您的意思
 
我学习了你的方法给表盘添加了调节亮度的功能,但是发现增加了这几行代码之后,严重拖慢了手环的运行速度(特别是从表盘页面滑动到其他页面时),甚至出现了一次手环重启的情况,请问这个是什么原因导致的呢?
增加按钮对流畅度肯定会有点影响,但是应该不会很大,使用我的其他调节亮度表盘也会卡吗?你可以把表盘发出来看看。bin文件失效就是指现在用的是js后缀的文件,不再读取bin文件了,没有bin文件就不用管。
 
增加按钮对流畅度肯定会有点影响,但是应该不会很大,使用我的其他调节亮度表盘也会卡吗?你可以把表盘发出来看看。bin文件失效就是指现在用的是js后缀的文件,不再读取bin文件了,没有bin文件就不用管。
谢谢你的回复!我使用的并不是你的调节亮度表盘,而是将你教程中的代码放入了我想要修改的表盘里。在这个我想要修改的表盘里并没有init_view()函数,而是由const init_main = () => {}、const init_aod = () => {}和const updateWidgets = (widgets) => {}这三者组成。起初,按照你的教程,我把亮度调节代码放入了第三个(const updateWidgets = (widgets) => {})的后括号之前(因为最开始我并不是很理解每个const所执行的命令是什么,而是直接按照你的教程无脑的把代码放入了onInit() 的前面一个大括号里,也就是const updateWidgets = (widgets) => {}),然后就出现了表盘严重卡顿和重启,接着我就来米坛上向你询问了。后来我又仔细的研究了一下这个表盘的结构,同时翻阅了zepp os的开发文档,发现第一个const是构建主表盘的,第二个const是构建aod的,而第三个const貌似是获取传感器信息的控件。而我把亮度调节代码放进了第三个const里,可能这就是导致表盘卡顿和重启的原因吧?后来我把亮度调节代码放进了第一个const里的return wds;
}
;之前,然后这个亮度调节功能也实现了,同时表盘流畅度经过测试之后发现和未修改之前的表盘流畅度一样,至此问题就结束了。我想请教一下,我以上的分析是正确的吗(我从来没接触过编程和js,都是昨天现学的,想再学习学习)

下面我放出原表盘文件(resource_55845140299777.bin)和修改后的表盘文件(mb8_purple_v8.zip)
 

附件

  • resource_55845140299777.bin
    271.6 KB 下载
  • mb8_purple_v8.zip
    276.1 KB 下载
谢谢你的回复!我使用的并不是你的调节亮度表盘,而是将你教程中的代码放入了我想要修改的表盘里。在这个我想要修改的表盘里并没有init_view()函数,而是由const init_main = () => {}、const init_aod = () => {}和const updateWidgets = (widgets) => {}这三者组成。起初,按照你的教程,我把亮度调节代码放入了第三个(const updateWidgets = (widgets) => {})的后括号之前(因为最开始我并不是很理解每个const所执行的命令是什么,而是直接按照你的教程无脑的把代码放入了onInit() 的前面一个大括号里,也就是const updateWidgets = (widgets) => {}),然后就出现了表盘严重卡顿和重启,接着我就来米坛上向你询问了。后来我又仔细的研究了一下这个表盘的结构,同时翻阅了zepp os的开发文档,发现第一个const是构建主表盘的,第二个const是构建aod的,而第三个const貌似是获取传感器信息的控件。而我把亮度调节代码放进了第三个const里,可能这就是导致表盘卡顿和重启的原因吧?后来我把亮度调节代码放进了第一个const里的return wds;
}
;之前,然后这个亮度调节功能也实现了,同时表盘流畅度经过测试之后发现和未修改之前的表盘流畅度一样,至此问题就结束了。我想请教一下,我以上的分析是正确的吗(我从来没接触过编程和js,都是昨天现学的,想再学习学习)

下面我放出原表盘文件(resource_55845140299777.bin)和修改后的表盘文件(mb8_purple_v8.zip)
正确的,第三个函数是刷新表盘时间用的,每秒钟会调用一次,暂停恢复之后也会调用,所以放到这里面会创建很多控件导致卡顿。我的教程是针对小米官方的表盘写的,你这个是用软件转换的表盘所以不一样。感觉你的学习能力还是挺强的。
 
正确的,第三个函数是刷新表盘时间用的,每秒钟会调用一次,暂停恢复之后也会调用,所以放到这里面会创建很多控件导致卡顿。我的教程是针对小米官方的表盘写的,你这个是用软件转换的表盘所以不一样。感觉你的学习能力还是挺强的。
学习了,感谢🙏
 

*这是一则由 Google AdSense 自动推荐的广告,与本站无关,不对其真实性与可靠性负责

相似主题

米环7小程序
15K
288

Home 首页
Home 资源
News 发现
Account 我的
顶部