0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

HarmonyOS开发案例:【image、image-animator组件】

jf_46214456 来源:jf_46214456 作者:jf_46214456 2024-04-26 17:32 次阅读

介绍

OpenHarmony提供了常用的图片、图片帧动画播放器组件,开发者可以根据实际场景和开发需求,实现不同的界面交互效果,包括:点击阴影效果、点击切换状态、点击动画效果、点击切换动效。

相关概念

  • [image组件]:图片组件,用于图片资源的展示。
  • [image-animator组件]:帧动画播放器,用以播放一组图片,可以设置播放时间、次数等参数
  • [通用事件]:事件绑定在组件上,当组件达到事件触发条件时,会执行JS中对应的事件回调函数,实现页面UI视图和页面JS逻辑层的交互。

环境搭建

软件要求

  • [DevEco Studio]版本:DevEco Studio 3.1 Release及以上版本。
  • OpenHarmony SDK版本:API version 9及以上版本。

硬件要求

  • 开发板类型:[润和RK3568开发板]。
  • OpenHarmony系统:3.2 Release及以上版本。

环境搭建

完成本篇Codelab我们首先要完成开发环境的搭建,本示例以RK3568开发板为例,参照以下步骤进行:

  1. [获取OpenHarmony系统版本]:标准系统解决方案(二进制)。以3.2 Release版本为例:
  2. 搭建烧录环境。
    1. [完成DevEco Device Tool的安装]
    2. [完成RK3568开发板的烧录]
  3. 搭建开发环境。
    1. 开始前请参考[工具准备],完成DevEco Studio的安装和开发环境配置。
    2. 开发环境配置完成后,请参考[使用工程向导]创建工程(模板选择“Empty Ability”)。
    3. 工程创建完成后,选择使用[真机进行调测]。
    4. 鸿蒙开发指导文档:[gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md]

代码结构解读

本篇Codelab只对核心代码进行讲解,对于完整代码,我们会在gitee中提供。

├──entry/src/main/js	              // 代码区
│  └──MainAbility
│     ├──common
│     │  ├──constants
│     │  │  └──commonConstants.js     // 帧动画数据常量
│     │  └──images
│     ├──i18n		                  // 中英文	
│     │  ├──en-US.json			
│     │  └──zh-CN.json			
│     └──pages
│        └──index
│           ├──index.css              // 首页样式文件	
│           ├──index.hml              // 首页布局文件
│           └──index.js               // 首页脚本文件
└──entry/src/main/resources           // 应用资源目录

`HarmonyOSOpenHarmony鸿蒙文档籽料:mau123789v直接拿`

搜狗高速浏览器截图20240326151344.png

界面布局

本示例使用卡片布局,将四种实现以四张卡片的形式呈现在主界面。每张卡片都使用图文结合的方式直观地向开发者展示所实现效果。

每张卡片对应一个div容器组件,以水平形式分为左侧文本和右侧图片两部分。左侧文本同样是一个div容器组件,以垂直形式分为操作文本与效果描述文本。右侧图片则根据需要使用image组件或image-animator组件。当前示例中,前两张卡片右侧使用的是image组件,剩余两张卡片使用的是image-animator组件。

< !-- index.hml -- >
< div class="container" >
    < !-- image组件的点击效果 -- >
    < div class="card-container" for="item in imageCards" >
        < div class="text-container" >
            < text class="text-operation" >{{ contentTitle }}< /text >
            < text class="text-description" >{{ item.description }}< /text >
        < /div >
        < image class="{{ item.classType }}" src="{{ item.src }}" onclick="changeHookState({{ item.eventType }})"
               ontouchstart="changeShadow({{ item.eventType }},true)"
               ontouchend="changeShadow({{ item.eventType }},false)"/ >
    < /div >
	
    < !-- image-animator组件的点击效果 -- >
    < div class="card-container" for="item in animationCards" >
        < div class="text-container" >
            < text class="text-operation" >{{ contentTitle }}< /text >
            < text class="text-description" >{{ item.description }}< /text >
        < /div >
        < image-animator id="{{ item.id }}" class="animator" images="{{ item.frames }}" iteration="1"
                        duration="{{ item.durationTime }}" onclick="handleStartFrame({{ item.type }})"/ >
    < /div >
< /div >

事件交互

为image组件添加touchstart和touchend事件,实现点击图片改变边框阴影的效果,点击触碰结束时,恢复初始效果。

// index.js
// 点击阴影效果
changeShadow(eventType, shadowFlag) {
  if (eventType === 'click') {
    return;
  }
  if (shadowFlag) {
    this.imageCards[0].classType = 'main-img-touch';
  } else {
    this.imageCards[0].classType = 'img-normal';
  }
}

为image组件添加click事件,实现点击切换状态并变换显示图片的效果。

// index.js
// 点击切换状态
changeHookState(eventType) {
  if (eventType === 'touch') {
    return;
  }
  if (this.hook) {
    this.imageCards[1].src = '/common/images/ic_fork.png';
    this.hook = false;
  } else {
    this.imageCards[1].src = '/common/images/ic_hook.png';
    this.hook = true;
  }
}

为image-animator组件添加click事件,实现点击播放帧动画效果。

// index.js
// 点击动画效果方法
handleStartFrame(type) {
  if (type === 'dial') {
    this.animationCards[0].durationTime = CommonConstants.DURATION_TIME;
    this.$element('dialAnimation').start();
  } else {
    if (this.animationCards[1].flag) {
      this.animationCards[1].frames = this.collapse;
      this.animationCards[1].durationTime = this.durationTimeArray[0];
      this.$element('toggleAnimation').start();
      this.animationCards[1].flag = false;
      this.$element('toggleAnimation').stop();
    } else {
      this.animationCards[1].frames = this.arrow;
      this.animationCards[1].durationTime = this.durationTimeArray[1];
      this.$element('toggleAnimation').start();
      this.animationCards[1].flag = true;
      this.$element('toggleAnimation').stop();
    }
  }
}

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 鸿蒙
    +关注

    关注

    57

    文章

    2392

    浏览量

    43024
  • HarmonyOS
    +关注

    关注

    79

    文章

    1982

    浏览量

    30516
  • OpenHarmony
    +关注

    关注

    25

    文章

    3744

    浏览量

    16536
收藏 人收藏

    评论

    相关推荐

    CMOS Image sensor的基础知识

    摄像机用来成像的感光元件叫做Image Sensor或Imager。目前广泛使用的2种Image Sensor是CCD和CMOS Image Sensor(CIS)。
    的头像 发表于 01-15 11:07 5416次阅读
    CMOS <b class='flag-5'>Image</b> sensor的基础知识

    HarmonyOS开发案例:【基础组件Slider的使用】

    学习如何使用声明式UI编程框架的基础组件。本篇Codelab将会使用Image组件、Slider组件、Text组件共同实现一个可调节的风车动
    的头像 发表于 05-10 16:01 712次阅读
    <b class='flag-5'>HarmonyOS</b><b class='flag-5'>开发案</b>例:【基础<b class='flag-5'>组件</b>Slider的使用】

    鸿蒙应用开发image-animator帧动画的播放

    `这里使用image-animator做了一个帧动画的播放设置了四个按钮控制动漫的播放效果stop: 停止播放图片帧动画。start: 开始播放图片帧动画。再次调用,重新从第1帧开始播放。pause
    发表于 04-28 10:16

    HarmonyOS实战—Image组件的剪切和缩放

    1. Image图片标签概述:图片(Image)是用来显示图片的组件。常见的属性:id,长、宽、高等。具体可以参考华为开发手册(组件的通用属
    发表于 08-17 18:00

    HarmonyOS应用开发-ClickableImageJsDome体验

    的设计。本DEMO主要涉及到的页面元素有有imageimage-animator,展现图片资源在界面交互中几种常见运用效果。旨在帮助开发人员快速了解HarmonyOS JSUI应用的
    发表于 06-18 11:42

    HarmonyOS实现几种常见图片点击效果

    。 相关概念 ● ​​image组件​​:图片组件,用于图片资源的展示。 ● ​​image-animator组件​​:帧动画播放器,用以播
    发表于 09-07 15:50

    Biosignal and Biomedical Image

    Biosignal and Biomedical Image Processing MATLAB based Applications
    发表于 02-17 23:09 0次下载
    Biosignal and Biomedical <b class='flag-5'>Image</b>

    Digital Image Processing (Hong

    Digital Image Processing:•What is an Image?Picture, photographVisual dataUsually two or three
    发表于 06-18 07:39 17次下载

    Image Compression - Spelling O

    Image Compression - Spelling Out the Options
    发表于 10-02 09:16 25次下载
    <b class='flag-5'>Image</b> Compression - Spelling O

    Image_Rotation

    Image Rotation,好东西,喜欢的朋友可以下载来学习。
    发表于 02-22 14:49 0次下载

    Image Matters为极端成像应用开发创新的高性能平台

    Image Matters为极端成像应用开发创新的高性能平台。
    的头像 发表于 01-11 07:08 1979次阅读

    Halcon教程:Image、Regiong、XLD基础

    一 读取的3种方式: read_image( image,'filename')       //image 是输出对象,后面是输入文件的路径和名称 读取多图:  1,申明一个数组,分别保存路径
    的头像 发表于 01-07 11:52 5378次阅读
    Halcon教程:<b class='flag-5'>Image</b>、Regiong、XLD基础

    HarmonyOS 应用开发-ClickableImageJsDome体验

    的设计。本DEMO主要涉及到的页面元素有有imageimage-animator,展现图片资源在界面交互中几种常见运用效果。旨在帮助开发人员快速了解 HarmonyOS JSUI应用
    的头像 发表于 06-20 00:24 1142次阅读
    <b class='flag-5'>HarmonyOS</b> 应用<b class='flag-5'>开发</b>-ClickableImageJsDome体验

    OpenHarmony应用开发之ETS开发方式Image组件

    今天带大家了解ETS开发方式中的Image组件
    的头像 发表于 07-03 12:06 3525次阅读
    OpenHarmony应用<b class='flag-5'>开发</b>之ETS<b class='flag-5'>开发</b>方式<b class='flag-5'>Image</b><b class='flag-5'>组件</b>

    鸿蒙ArkTS声明式组件Image

    Image为图片组件,常用于在应用中显示图片。Image支持加载[PixelMap]、[ResourceStr]和[DrawableDescriptor]类型的数据源,支持png、jpg、bmp、svg和gif类型的图片格式。
    的头像 发表于 06-23 20:32 1079次阅读
    鸿蒙ArkTS声明式<b class='flag-5'>组件</b>:<b class='flag-5'>Image</b>