介紹
OpenHarmony提供了常用的圖片、圖片幀動畫播放器組件,開發(fā)者可以根據(jù)實際場景和開發(fā)需求,實現(xiàn)不同的界面交互效果,包括:點擊陰影效果、點擊切換狀態(tài)、點擊動畫效果、點擊切換動效。
相關(guān)概念
- [image組件]:圖片組件,用于圖片資源的展示。
- [image-animator組件]:幀動畫播放器,用以播放一組圖片,可以設(shè)置播放時間、次數(shù)等參數(shù)。
- [通用事件]:事件綁定在組件上,當(dāng)組件達到事件觸發(fā)條件時,會執(zhí)行JS中對應(yīng)的事件回調(diào)函數(shù),實現(xiàn)頁面UI視圖和頁面JS邏輯層的交互。
環(huán)境搭建
軟件要求
硬件要求
- 開發(fā)板類型:[潤和RK3568開發(fā)板]。
- OpenHarmony系統(tǒng):3.2 Release及以上版本。
環(huán)境搭建
完成本篇Codelab我們首先要完成開發(fā)環(huán)境的搭建,本示例以RK3568開發(fā)板為例,參照以下步驟進行:
- [獲取OpenHarmony系統(tǒng)版本]:標(biāo)準(zhǔn)系統(tǒng)解決方案(二進制)。以3.2 Release版本為例:
- 搭建燒錄環(huán)境。
- [完成DevEco Device Tool的安裝]
- [完成RK3568開發(fā)板的燒錄]
- 搭建開發(fā)環(huán)境。
代碼結(jié)構(gòu)解讀
本篇Codelab只對核心代碼進行講解,對于完整代碼,我們會在gitee中提供。
├──entry/src/main/js // 代碼區(qū)
│ └──MainAbility
│ ├──common
│ │ ├──constants
│ │ │ └──commonConstants.js // 幀動畫數(shù)據(jù)常量
│ │ └──images
│ ├──i18n // 中英文
│ │ ├──en-US.json
│ │ └──zh-CN.json
│ └──pages
│ └──index
│ ├──index.css // 首頁樣式文件
│ ├──index.hml // 首頁布局文件
│ └──index.js // 首頁腳本文件
└──entry/src/main/resources // 應(yīng)用資源目錄
`HarmonyOS與OpenHarmony鴻蒙文檔籽料:mau123789是v直接拿`
界面布局
本示例使用卡片布局,將四種實現(xiàn)以四張卡片的形式呈現(xiàn)在主界面。每張卡片都使用圖文結(jié)合的方式直觀地向開發(fā)者展示所實現(xiàn)效果。
每張卡片對應(yīng)一個div容器組件,以水平形式分為左側(cè)文本和右側(cè)圖片兩部分。左側(cè)文本同樣是一個div容器組件,以垂直形式分為操作文本與效果描述文本。右側(cè)圖片則根據(jù)需要使用image組件或image-animator組件。當(dāng)前示例中,前兩張卡片右側(cè)使用的是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事件,實現(xiàn)點擊圖片改變邊框陰影的效果,點擊觸碰結(jié)束時,恢復(fù)初始效果。
// 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事件,實現(xiàn)點擊切換狀態(tài)并變換顯示圖片的效果。
// index.js
// 點擊切換狀態(tài)
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事件,實現(xiàn)點擊播放幀動畫效果。
// 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();
}
}
}
審核編輯 黃宇
-
鴻蒙
+關(guān)注
關(guān)注
57文章
2351瀏覽量
42849 -
HarmonyOS
+關(guān)注
關(guān)注
79文章
1975瀏覽量
30182 -
OpenHarmony
+關(guān)注
關(guān)注
25文章
3722瀏覽量
16313
發(fā)布評論請先 登錄
相關(guān)推薦
評論