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

news2024/12/23 16:22:20

一. 样例介绍

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

相关概念

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

完整示例

gitee源码地址

二.环境搭建

我们首先需要完成HarmonyOS开发环境搭建,可参照如下步骤进行。

软件要求

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

硬件要求

  • 设备类型:华为手机或运行在DevEco Studio上的华为手机设备模拟器。
  • HarmonyOS系统:3.1.0 Developer Release及以上版本。

环境搭建

  1. 安装DevEco Studio,详情请参考下载和安装软件
  2. 设置DevEco Studio开发环境,DevEco Studio开发环境需要依赖于网络环境,需要连接上网络才能确保工具的正常使用,可以根据如下两种情况来配置开发环境:如果可以直接访问Internet,只需进行下载HarmonyOS SDK操作。
    1. 如果网络不能直接访问Internet,需要通过代理服务器才可以访问,请参考配置开发环境
  3. 开发者可以参考以下链接,完成设备调试的相关配置:
  • 使用真机进行调试
  • 使用模拟器进行调试

三.代码结构解读

本篇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           // 应用资源目录

四.界面布局

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

每张卡片对应一个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();
    }
  }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/982615.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何免费获取CDH集群技术支持

CDH拥有全球70% 的Hadoop用户&#xff0c;在国内也拥有庞大的用户群体。由于Cloudera 和Hortonworks 合并后厂商政策调整&#xff0c;不再更新、不再免费、不再提供服务&#xff0c;众多企业用户生产集群面临着进退两难的窘境和未知的技术风险。 社区版不再更新。Cloudera所有…

如何获取第三方maven依赖信息?

依赖信息查询方式&#xff1a; 1. maven仓库信息官网 https://mvnrepository.com/ 2. mavensearch插件搜索 1. maven仓库信息官网 https://mvnrepository.com/ 访问可能会比较慢 搜索你想要查找的依赖 点击你想要查找的依赖 打开是这个界面&#xff0c;点击对应版…

简单介绍下主数据管理(MDM)工具的发展趋势

主数据管理工具帮助组织管理内部和外部主数据&#xff0c;提升主数据管理的效率。主数据管理工具多种多样&#xff0c;打孔卡、纸质文件记录、目录卡片、数据库、应用系统&#xff0c;以及专业的主数据管理平台&#xff0c;都属于主数据管理工具。 随着主数据管理要求的不断变化…

指针和字符数组笔试题及其解析(第三组)

个人主页&#xff1a;Lei宝啊 愿所有美好如期而遇 第三组笔试题 char *p "abcdef";printf("%d\n", sizeof(p)); printf("%d\n", sizeof(p1)); printf("%d\n", sizeof(*p)); printf("%d\n", sizeof(p[0])); printf("%…

MATLAB基础-MAT文件的读写操作

简介 MAT文件是MATLAB格式的双精度二进制数据文件&#xff0c;由MATLAB软件创建&#xff0c;可以使用MATLAB软件再其他计算机上以其他浮点格式读取&#xff0c;同时也可以使用其他软件通过MATLAB的应用程序接口来进行读写操作。如果只是再MATLAB环境中处理数据&#xff0c;使用…

基于nginx+keepalived的负载均衡、高可用web集群

目录 基于nginxkeepalived的负载均衡、高可用web集群关闭所有机器的相关服务一、按照IP规划配置好静态IP。二、建立免密通道&#xff0c;使用Ansible自动化批量部署软件环境1、安装配置ansible2、编写主机清单3、在ansible上生成密钥对&#xff0c;并将公钥复制到其他主机上4、…

2023年9月惠州/深圳CPDA数据分析师认证找弘博创新

CPDA数据分析师认证是大数据方面的认证&#xff0c;助力数据分析人员打下扎实的数据分析基础知识功底&#xff0c;为入门数据分析保驾护航。 帮助数据分析人员掌握系统化的数据分析思维和方法论&#xff0c;提升工作效率和决策能力&#xff0c;遇到问题能够举一反三&#xff0c…

Android 查看当前手机、APP的ABI架构信息

目录 查看手机 查看APP 查看手机 命令&#xff1a;adb shell "getprop |grep cpu" 命令&#xff1a;adb shell getprop ro.product.cpu.abi 查看APP 在 data/system/packages.xml 文件中找到自己 app 的相关配置信息&#xff0c;这里有明确指出该去哪里加载 so…

linux环境中打印有颜色字体

linux环境中打印有颜色字体 在Linux终端中打印红色字体&#xff0c;可以使用ANSI转义码来设置文本的颜色。下面是如何在Linux终端中使用红色字体的示例&#xff1a; echo -e "\e[31mThis text is in red\e[0m"这个命令使用了ANSI转义码 \e[31m 来将文本的颜色设置为…

【ViT(Vision Transformer)】(二) 阅读笔记

简介 ViT是2020年Google团队提出的将Transformer应用在图像分类的模型&#xff0c;虽然不是第一篇将transformer应用在视觉任务的论文&#xff0c;但是因为其模型“简单”且效果好&#xff0c;可扩展性强&#xff08;scalable&#xff0c;模型越大效果越好&#xff09;&#x…

iPad 消费者风向调整:追求性价比,不追求顶配,11 英寸最畅销

针对苹果公司近期发布的四款不同类型的iPad&#xff0c;消费者情报研究合作伙伴&#xff08;CIRP&#xff09;机构提出观点&#xff1a;苹果需要调整其产品的侧重点。CIRP发布的最新报告《Time to Refresh iPad&#xff1f;》显示&#xff0c;从2022年6月到2023年6月&#xff0…

LeetCode算法心得——生成特殊数字的最少操作(贪心找规律)

大家好&#xff0c;我是晴天学长&#xff0c;这是一个简单贪心思维技巧题&#xff0c;主要考察的还是临场发挥的能力。需要的小伙伴可以关注支持一下哦&#xff01;后续会继续更新的。 2) .算法思路 0 00 50 25 75 末尾是这两个的才能被45整除 思路&#xff1a;分别找&#x…

TypeScript联合类型、交叉类型

联合类型 是指一个变量可以有不同的数据类型&#xff0c;通过 | 符号来表示&#xff0c;它的目的是将多个类型组合成一个类型。这些类型可以是基本类型&#xff0c;也可以是自定义类型。 let myVar: string; myVar hello; myVar 123; //error 使用联合类型 let myVar: stri…

JNDIExploit-1.2-SNAPSHOT.jar工具在log4j漏洞复现中的使用

1.首先搭建log4j靶场 2.开启服务 Windows攻击端执行以下命令 java -jar JNDIExploit-1.2-SNAPSHOT.jar -l 8888 -p 9999 -i 127.0.0.1 再开一个cmd可以看下能用什么payload java -jar JNDIExploit-1.2-SNAPSHOT.jar -u 以上payload都可以尝试&#xff0c;我们使用 ldap:…

数据集笔记:GeoLife GPS 数据 (user guide)

数据链接&#xff1a;https://www.microsoft.com/en-us/download/details.aspx?id52367 1 数据基本信息 1.1 数据介绍 182名用户在超过三年的时间内&#xff08;从2007年4月到2012年8月&#xff09;在&#xff08;微软亚洲研究院&#xff09;Geolife项目中收集的。该数据集…

MATLAB R2023a完美激活版(附激活补丁)

MATLAB R2023a是一款面向科学和工程领域的高级数学计算和数据分析软件&#xff0c;它为Mac用户提供了强大的工具和功能&#xff0c;用于解决各种复杂的数学和科学问题。以下是MATLAB R2023a Mac的一些主要特点和功能&#xff1a; 软件下载&#xff1a;MATLAB R2023a完美激活版 …

工业4.0时代下,到底什么是智慧工厂?

关键词&#xff1a;智慧工厂、智慧工厂数字化、设备设施数字化、能源管理系统、动环监控、智能运维、数据采集、工业互联网 随着物联网、大数据和移动应用等新一轮信息技术的发展&#xff0c;全球化工业革命开始提上日程&#xff0c;工业转型开始进入实质阶段。作为工业4.0的最…

词!自然语言处理之词全解和Python实战!

目录 一、为什么我们需要了解“词”的各个方面词是语言的基础单位词的多维特性词在NLP应用中的关键作用 二、词的基础什么是词&#xff1f;定义分类 词的形态词根、词干和词缀形态生成 词的词性 三、词语处理技术词语规范化定义方法 词语切分&#xff08;Tokenization&#xff…