当前位置: 首页 > wzjs >正文

采购网站模板网站开发需求模板模板

采购网站模板,网站开发需求模板模板,表单付款 wordpress,宁波手机网站开发公司在鸿蒙next系统上,通过ArkTS写了个时钟显示页面,集成在【图影工具箱】应用中,应用商店可以下载使用。 这个页面实现起来比较简单,就是左边一个模拟时钟,右边一个数字时钟(包含时间和日期的文字&#xff09…

在鸿蒙next系统上,通过ArkTS写了个时钟显示页面,集成在【图影工具箱】应用中,应用商店可以下载使用。

这个页面实现起来比较简单,就是左边一个模拟时钟,右边一个数字时钟(包含时间和日期的文字),每秒更新一次模拟时钟和数字时钟。

本文基于鸿蒙ArkUI框架,实现了一个支持​​模拟/数字双模式显示​​、​​手势交互​​与​​动态主题切换​​的时钟应用。以下从技术架构、核心功能与创新交互三个维度展开解析。


​一、项目架构与技术栈​
  1. ​基础框架​

    • 使用ArkUI声明式开发范式(基于TypeScript),通过@Entry@Component装饰器定义页面组件。
    • 状态管理:@State驱动UI动态更新(如时间文本、时钟缩放比例、背景色)。
  2. ​依赖模块​

    import { common } from '@kit.AbilityKit';  // 系统能力库
    import { window } from '@kit.ArkUI';       // 窗口管理
    import { AnalogClockComponent } from './AnalogClockComponent'; // 自定义模拟时钟组件
    • ​工具类封装​​:
      • DateUtil:时间格式化(getFormatDateStr生成HH:mm:ssyyyy年MM月dd日)。
      • AppUtil:设备控制(息屏保持、强制横屏)。

​二、核心功能实现​
​1. 双模式时钟动态切换​
  • ​数字时钟​​:通过Text组件动态绑定时间与日期:

    @State timeText: string = '';  // 时间文本(HH:mm:ss)
    @State dateText: string = '';  // 日期文本(yyyy年MM月dd日)

    每秒更新数据:

    setInterval(() => this.load(), 1000); // 定时更新
  • ​模拟时钟​​:封装为独立组件AnalogClockComponent

    if (this.showClock) {AnalogClockComponent().scale({ x: this.clockScale, y: this.clockScale }) // 支持缩放.gesture(PinchGesture().onActionUpdate((event) => { // 捏合手势调整缩放比例(0.5~1.5倍)this.clockScale = Math.max(0.5, Math.min(1.5, event.scale * this.lastClockScale));}))
    }
​2. 交互设计​
  • ​显隐控制​​:顶部按钮切换模拟时钟显示状态:
    Button().onClick(() => this.showClock = !this.showClock)
  • ​主题切换​​:点击屏幕切换黑/白主题:
    .onClick(() => {this.flag = !this.flag;this.fontColor = this.flag ? TimePage.blackColor : TimePage.whiteColor;this.bgColor = this.flag ? TimePage.whiteColor : TimePage.greyColor;
    })
  • ​动画优化​​:黑白主题切换时添加缓动动画:
    Text(this.timeText).animation({ duration: 2000, curve: Curve.EaseOut })
​3. 设备适配与性能​
  • ​横屏沉浸式体验​​:
    AppUtil.setPreferredOrientation(window.Orientation.AUTO_ROTATION_LANDSCAPE);
  • ​保持不息屏​​:
    AppUtil.setWindowKeepScreenOn(true);

​三、关键技术点解析​
  1. ​状态驱动UI更新​

    • @State变量(如timeTextbgColor)变化自动触发UI重渲染。
    • 通过setInterval更新状态,实现每秒刷新时间。
  2. ​手势识别与动画​

    • ​捏合缩放​​:PinchGesture监听手势事件,动态计算缩放比例。
    • ​主题切换动画​​:页面背景色与文字颜色变化时应用2000ms渐变动画。
  3. ​组件化设计​

    • 模拟时钟独立封装为AnalogClockComponent,通过Props控制尺寸与缩放,符合高内聚原则。
    • 工具类DateUtil解耦时间逻辑,提升代码复用性。

​四、优化策略与设计理念​
  1. ​视觉层次设计​

    • ​主次分明​​:数字时钟使用100px大字体突出时间,日期文本使用30px小字体。
    • ​色彩对比​​:深灰背景(#fefefe)与白色文字确保可读性,夜间模式切换为深色文字+白色背景。
  2. ​响应式交互​

    • 手势操作实时反馈(捏合缩放),限制缩放范围避免UI变形。
    • 控件位置优化:控制按钮置于右上角,避免遮挡核心内容。
  3. ​性能与功耗​

    • 页面不可见时(onPageHide)清除定时器,减少资源占用。
    • 横屏模式适配多种设备尺寸,通过Stack+Row/Column布局保证元素对齐。

​五、扩展方向​
  1. ​多时区支持​​:扩展DateUtil,增加时区切换功能。
  2. ​动态背景​​:根据时间自动切换日出/日落主题色。

​结语​

本文实现的ArkUI时钟界面,通过​​状态驱动​​、​​手势交互​​与​​组件化设计​​,平衡了功能性与视觉体验。其设计模式可复用于其他实时数据展示场景(如天气仪表盘、健身数据统计)。未来可结合鸿蒙分布式能力,实现跨设备时钟同步控制。


​设计原则总结​​:

原则实现方式
​信息直观性​双模式时钟互补显示
​操作便捷性​手势缩放+一键切换
​视觉舒适性​动态主题+缓动动画
​性能优化​定时器生命周期管理

源码中的AnalogClockComponent实现可参考《ArkUI自定义组件之模拟时》,重点利用Canvas绘图与旋转动画实现指针效果。

具体代码如下:

import { common } from '@kit.AbilityKit';
import { window } from '@kit.ArkUI';
import { AppUtil } from './Utils/AppUtil';
import { DateUtil } from './Utils/DateUtil';
import { AnalogClockComponent } from './ClockPage/AnalogClockComponent';@Entry
@Component
struct TimePage {context: common.UIAbilityContext = getContext(this) as common.UIAbilityContext;intervalID: number = -1;@State timeText: string = '';@State dateText: string = '';@State showClock: boolean = true;@State lastClockScale: number = 1.35;@State clockScale: number = 1.35;bigFontSize: number = 100;smallFontSize: number = 30;static readonly whiteColor: string = '#fefefe';static readonly greyColor: string | Resource = $r('app.color.body_color');static readonly blackColor: string | Resource = '#000';@State bgColor: string | Resource = TimePage.greyColor;@State fontColor: string | Resource = TimePage.whiteColor;@State flag: boolean = falsenowDate = Date.now();load() {this.nowDate = Date.now();this.timeText = DateUtil.getFormatDateStr(this.nowDate, "HH:mm:ss");this.dateText = DateUtil.getFormatDateStr(this.nowDate, "yyyy年MM月dd日")}onPageShow(): void {this.load();this.intervalID = setInterval(() => {this.load();}, 1000);AppUtil.setWindowKeepScreenOn(true);AppUtil.setPreferredOrientation(window.Orientation.AUTO_ROTATION_LANDSCAPE);}onPageHide(): void {clearInterval(this.intervalID);}build() {Stack({ alignContent: Alignment.Top }) {// 主要内容区域Row() {if (this.showClock) {// 模拟时钟组件Column() {AnalogClockComponent().width('60%').aspectRatio(1)}.scale({ x: this.clockScale, y: this.clockScale }).width('30%').height('100%').justifyContent(FlexAlign.Center).align(Alignment.Center).margin({ left: 30 }).gesture(PinchGesture().onActionStart((event: GestureEvent) => {this.lastClockScale = this.clockScale;}).onActionUpdate((event: GestureEvent) => {this.clockScale = Math.max(0.5, Math.min(1.5, event.scale * this.lastClockScale));}))}// 数字时间显示Column() {Text(this.timeText).fontSize(this.bigFontSize).fontColor(this.fontColor).animation({duration: 2000,curve: Curve.EaseOut,iterations: 1,playMode: PlayMode.Normal})Text(this.dateText).fontSize(this.smallFontSize).fontColor(this.fontColor).animation({duration: 2000,curve: Curve.Ease,iterations: 1,playMode: PlayMode.Normal})}.layoutWeight(1).height('100%').justifyContent(FlexAlign.Center)}.width('100%').height('100%')// 顶部控制栏Row() {Button() {Image(this.showClock ? $r('app.media.ic_visibility_off') : $r('app.media.ic_visibility')).width(24).height(24).fillColor(this.fontColor).opacity(0.3)}.width(48).height(48).borderRadius(24).backgroundColor('transparent').onClick(() => {this.showClock = !this.showClock;})}.width('100%').justifyContent(FlexAlign.End).padding({ right: 20, top: 20 })}.onClick(() => {if (this.flag) {this.fontColor = TimePage.whiteColor;this.bgColor = TimePage.greyColor;} else {this.fontColor = TimePage.blackColor;this.bgColor = TimePage.whiteColor;}this.flag = !this.flag;}).backgroundColor(this.bgColor).animation({duration: 2000,curve: Curve.Ease,iterations: 1,playMode: PlayMode.Normal}).width('100%').height('100%')}
}

http://www.dtcms.com/wzjs/566620.html

相关文章:

  • 海口网站建设搜q.479185700wordpress 音乐 页面
  • 机关网站建设工作总结乡村网络建设方案
  • 有没有专门做家纺的网站apache新建网站
  • 网站运营成功案例wordpress 添加侧边栏
  • 怎么做dnf辅助网站有没有便宜的网站建设
  • 公司做网站自己可以做电商平台网站多少钱
  • 做网站公司需要提供的资料网站开发设计方案
  • 用wordpress建立专业网站视频教程网站自响应
  • 奇迹建站模板wordpress rss 插件
  • 如何建设一个子网站郑州网站开发公司电话
  • 济宁软件开发网站建设自媒体运营课程培训
  • 网站制作哪个公司好免费网站设计模板
  • 开发视频网站多少钱访问的网站显示建设中
  • 做APP必须要有网站么联合年检怎么做网站上
  • wordpress代码实现网站地图wordpress制作网站步骤
  • 网站建设太金手指六六六网站开发能封装成app吗
  • 城乡建设部网站 挂证江津哪里找做网站的
  • 用自己的电脑做服务器搭建网站51zwd一起做网站广州
  • 做网站时如何写接口文档江苏省水利工程建设局网站
  • 专业seo网站优化公司百度广告费用
  • 最简单的手机网站制作如何用服务器做网站
  • 四川城乡住房和城乡建设厅网站首页有限责任公司破产法人承担的责任
  • 网站建设选天祥免费创立网站
  • 网站手机版绑定域名域名注册 腾讯云
  • dns 本地 网站建设wordpress 视频网站
  • 网站建设的分阶段步骤贵州建设学校网站
  • 浙江建设继续教育网站一个网站如何产生流量
  • 网站建设定制价格明细表东莞网站建设方案外包
  • 海南建设监理协会网站网站建设人才招聘
  • 威海高端网站建设重庆彼客的网站是谁家做的