• 游客,欢迎来到米坛社区。
    米坛社区是大型中文智能穿戴设备交流社区,在这里交流你的极客思想,共同建造我们的智能世界
    为了更加方便的获取支持与帮助,请加入米坛社区官方QQ频道

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

zzt741

LV7
🔥社区作者
普通成员
UID
75550
2021-10-12
224
1,796
通过点击表盘的时间来调节亮度应该是杨铭洲际最先实现的,我兴许是受到了启发,在我的机甲表盘上也增加了这一功能,兴许是受到我的机甲表盘的影响,之后也有很多表盘实现了点击时钟增加亮度,分钟减少亮度的功能,个人认为非常的实用,所以贴上教程以供参考。教程是之前的存货,抱歉拖到现在才发。
首先用压缩软件解压表盘文件,如果里面有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 //设置值
 
最后编辑:
  • 赞
反馈: Rayzggz

淘汰郎

LV8
🔥社区作者
普通成员
UID
77922
2021-12-01
594
6,273
通过点击表盘的时间来调节亮度应该是杨铭洲际最先实现的,我兴许是受到了启发,在我的机甲表盘上也增加了这一功能,兴许是受到我的机甲表盘的影响,之后也有很多表盘实现了点击时钟增加亮度,分钟减少亮度的功能,个人认为非常的实用,所以贴上教程以供参考。教程是之前的存货,抱歉拖到现在才发。

如果想要点击后直接跳转到亮度调节界面,可以只留一个触控区域,将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
       })
      }
 

zzt741

LV7
🔥社区作者
普通成员
UID
75550
2021-10-12
224
1,796
上下滑动调节亮度
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
       })
      }
不错,但是我记得表盘上不是不支持滑动吗?然后这个向上滑动好像是降低亮度吧?
 

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