HarmonyOS中各種動畫的使用介紹

鴻蒙(HarmonyOS)提供了豐富的動畫能力,涵蓋屬性動畫、顯式動畫、轉場動畫、幀動畫等多種類型,適用于不同場景的交互需求。以下是鴻蒙中各類動畫的詳細解析及使用示例:


1. 屬性動畫(Property Animation)

作用:通過改變組件的屬性(如寬高、透明度、旋轉角度等)實現平滑過渡效果。

核心接口animateToanimationkeyframeAnimateTo

特點:系統自動插值計算中間幀,性能優化較好。

示例代碼
// 使用 animateTo 實現縮放動畫
Button('點擊放大').onClick(() => {animateTo({ duration: 1000, curve: Curve.Ease }, () => {this.scaleValue = this.scaleValue === 1 ? 1.5 : 1;});}).scale({ x: this.scaleValue, y: this.scaleValue })
關鍵點
  • animateTo:顯式觸發動畫閉包內的屬性變化。
  • animation修飾符:自動響應狀態變化(無需閉包)。
  • 曲線類型:如 Curve.Ease(緩入緩出)、Curve.Spring(彈性效果)。

2. 顯式動畫(Explicit Animation)

作用:通過animateToImmediately立即下發動畫指令,減少延遲。

適用場景:需要優先渲染部分動畫時(如高優先級交互反饋)。

示例代碼
animateToImmediately({ duration: 500 }, () => {this.translateX = 100; // 立即執行位移動畫
});

3. 轉場動畫(Transition Animation)

作用:處理組件出現/消失時的過渡效果,如頁面跳轉、彈窗彈出。

類型

  • 基礎轉場TransitionEffect.opacity(淡入淡出)、TransitionEffect.slide(滑動)。
  • 高級模板:導航轉場、模態轉場、共享元素轉場(一鏡到底)。

示例代碼
// 共享元素轉場(一鏡到底)
Image($r('app.media.thumbnail')).sharedTransition('imageTransition', { duration: 1000 })// 頁面轉場
pageTransition() {PageTransitionEnter({ duration: 300 }).slide(SlideEffect.Right);PageTransitionExit({ duration: 300 }).opacity(0);
}

4. 幀動畫(Frame Animation)

作用:逐幀控制屬性變化,適合復雜自定義動畫。

核心接口@ohos.animator特點:靈活但性能開銷較大,需手動管理幀回調。

示例代碼
const options = { duration: 2000, begin: 0, end: 100 };
const animator = this.getUIContext().createAnimator(options);
animator.onFrame = (value) => { this.progress = value; };
animator.play();

5. 粒子動畫(Particle Animation)

作用:通過大量粒子運動營造氛圍(如雪花、火焰)。

組件Particle

配置參數:粒子大小、顏色、速度、生命周期等。

示例代碼
Particle({particles: [{emitter: { particle: { type: ParticleType.POINT, radius: 5 } },color: { range: ['#FF0000', '#FFFF00'] }}]
}).width(200).height(200)

6. 路徑動畫(Motion Path)

作用:讓組件沿指定路徑運動。

接口motionPath

路徑定義:支持 SVG 路徑字符串或關鍵點坐標。

示例代碼
Image($r('app.media.rocket')).motionPath({ path: 'M 0 0 L 100 100', rotate: 'auto' })

7. 動畫性能優化

  1. 減少布局屬性動畫:優先使用 scale/translate 替代 width/height,避免觸發重新布局。
  2. 合并動畫閉包:多個屬性變化盡量合并到同一個 animateTo 中。
  3. 使用 renderGroup:對復雜動效組件啟用緩存。
  4. 避免后臺動畫:應用切后臺時暫停動畫。

8. 常見問題

  • 動畫不生效:檢查屬性是否支持動畫(如 zIndex 不可動畫)。
  • 丟幀問題:簡化動畫復雜度,或使用 expectedFrameRateRange 限制幀率范圍。
  • 手勢與動畫銜接:通過 responsiveSpringMotion 繼承手勢速度,實現自然過渡。

綜合示例

@Entry@Componentstruct ComplexAnimationDemo {@State rotate: number = 0;@State isVisible: boolean = false;build() {Column() {// 屬性動畫 + 轉場if (this.isVisible) {Text("Hello HarmonyOS").transition(TransitionEffect.rotate({ angle: 360 }).animation({ duration: 1000 }))}// 顯式動畫 + 路徑Button("觸發動畫").onClick(() => {this.isVisible = !this.isVisible;animateTo({ duration: 1500 }, () => {this.rotate = 180;});}).motionPath({ path: 'M 0 0 Q 50 100 100 0' })}}}

總結

鴻蒙的動畫體系覆蓋了從簡單屬性變化到復雜場景動效的全場景需求,開發者應根據交互目標選擇合適的動畫類型,并遵循性能優化原則。具體場景可參考官方文檔中的動畫實踐案例。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/914206.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/914206.shtml
英文地址,請注明出處:http://en.pswp.cn/news/914206.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

CSP-S 模擬賽 10

T1 洛谷 U490727 返鄉 思路 首先要意識到一個問題,就是如果所有人總分一定,那么是不會出現偏序的。 可以感性理解一下,就是對于 i,ji, ji,j, 若 ai≤aj,bi≤bja_i \leq a_j, b_i \leq b_jai?≤aj?,bi?≤bj?,那么…

CMD,PowerShell、Linux/MAC設置環境變量

以下是 CMD(Windows)、PowerShell(Windows)、Linux/Mac 在 臨時/永久 環境變量操作上的對比表格:環境變量操作對照表(CMD vs PowerShell vs Linux/Mac)操作CMD(Windows)P…

MySQL(131)如何解決MySQL CPU使用率過高問題?

解決MySQL CPU使用率過高的問題需要從多個方面進行排查和優化,包括查詢優化、索引優化、配置優化和硬件資源的合理使用等。以下是詳細的解決方案和相應的代碼示例。 一、查詢優化 1. 檢查慢查詢 使用MySQL的慢查詢日志來找到執行時間長的查詢。 SET GLOBAL slow_que…

docker基礎與常用命令

目錄 一.docker概述 1.docker與虛擬機區別 2.Linux 六大命名空間 3.Docker 的核心技術及概念 二.docker部署安裝 三.docker常用命令 1.搜索鏡像 2.獲取鏡像 3.查看鏡像信息 4.添加鏡像標簽 5.刪除鏡像 6.存出與載入鏡像 7.上傳鏡像 8.創建容器 9.查看容器狀態 1…

Cypress與多語言后端集成指南

Cypress 簡介 基于 JavaScript 的前端測試工具,可以對瀏覽器中運行的任何內容進行快速、簡單、可靠的測試Cypress 是自集成的,提供了一套完整的端到端測試,無須借助其他外部工具,安裝后即可快速地創建、編寫、運行測試用例,且對每一步操作都支持回看不同于其他只能測試 UI…

計算機畢業設計ssm基于JavaScript的餐廳點餐系統 SSM+Vue智慧餐廳在線點餐管理平臺 JavaWeb前后端分離式餐飲點餐與桌臺調度系統

計算機畢業設計ssm基于JavaScript的餐廳點餐系統0xig8788(配套有源碼 程序 mysql數據庫 論文) 本套源碼可以在文本聯xi,先看具體系統功能演示視頻領取,可分享源碼參考。掃碼點單、手機支付、后廚實時出票已經成為食客對餐廳的基本預期。傳統的…

wedo稻草人-----第32節(免費分享圖紙)

夸克網盤:https://pan.quark.cn/s/ce4943156861 高清圖紙源文件,需要的請自取

Jmeter函數的使用

函數名作用用法${__Random(,,)}${__RandomString(,,)}隨機生成一些東西${__Random(000,999,)} ${__Random(${test1},${test2},)}${__RandomString(${__Random(3,9,)},asdfghjkl,)}${__time(,)}獲取當前的時間戳,也可以定義格式${__CSVRead(,)}讀取CSV文件的格式&…

Windows 用戶賬戶控制(UAC)繞過漏洞

漏洞原理CVE-2021-31199 是一個 Windows 用戶賬戶控制(UAC)繞過漏洞,CVSS 3.1 評分 7.8(高危)。其核心原理如下:UAC 機制缺陷:Windows UAC 通過限制應用程序權限提升系統安全性,但某…

comfyUI-controlNet-線稿軟邊緣

{WebUI&comfyUI}∈Stable Diffuision,所以兩者關于ContrlNet的使用方法的核心思路不會變,變的只是comfyUI能夠讓用戶更直觀地看到,并且控制生圖的局部過程。 之前的webUI中涉及到ContrlNet部分知識:SD-細節控制-CSDN博客 概…

SOEM build on ubuntu

1.配置 soem2.編譯 soem3.結果4.記錄一下自己的開發環境家里臺式機

STM32--USART串口通信的應用(第一節串口通信的概念)

咱們今天呢給大家講解咱們 stm32 開發當中的串口的應用啊 , 串口這個專題呢啊是我們那 個學習上必須要掌握的一個外設串口有什么作用呢,其實在我們以后的這個開發程序當中,咱們可能經常需要用到一些調試 信息,對吧? 啊…

STM32F407ZGT6天氣時鐘+實時溫濕度顯示(附源碼)

文章目錄實現功能:項目展示:代碼解析:實現功能: 1.主要功能:通過485通信獲取傳感器溫濕度,溫濕度數據顯示、實時時鐘顯示與用戶交互。使用LVGL在顯示屏上展示傳感器溫濕度數據,并提供UI設置溫度…

和鯨社區深度學習基礎訓練營2025年關卡4

使用 pytorch 構建一個簡單的卷積神經網絡(CNN)模型,完成對 CIFAR-10 數據集的圖像分類任務。 直接使用 CNN 進行分類的模型性能。 提示: 數據集:CIFAR-10 網絡結構:可以使用 2-3 層卷積層,ReLU…

前端性能優化全攻略:從加載到渲染

目錄 前言網絡請求優化資源加載優化JavaScript執行優化渲染優化用戶體驗優化性能監控與分析總結 前言 隨著Web應用復雜度不斷提升,前端性能優化變得尤為重要。本文將系統性地介紹從資源加載到頁面渲染的全鏈路性能優化策略,幫助開發者構建高效、流暢的…

hiredis: 一個輕量級、高性能的 C 語言 Redis 客戶端庫

目錄 1.簡介 2.安裝和配置 2.1.源碼編譯安裝(通用方法) 2.2.包管理器安裝(特定系統) 2.3.Windows 安裝 3.常用的函數及功能 3.1.連接管理函數 3.2.命令執行函數 3.3.異步操作函數 3.4.回復處理函數 3.5.錯誤處理 3.6.…

TCP套接字

1.概念套接字是專門進行網絡間數據通信的一種文件類型,可以實現不同主機之間雙向通信,包含了需要交換的數據和通信雙方的IP地址和port端口號。2.套接字文件的創建int socket(int domain, int type, int protocol); 功能:該函數用來創建各種各…

Go語言高并發聊天室(一):架構設計與核心概念

Go語言高并發聊天室(一):架構設計與核心概念 🚀 引言 在當今互聯網時代,實時通信已成為各類應用的核心功能。從微信、QQ到各種在線協作工具,高并發聊天系統的需求無處不在。本系列文章將手把手教你使用Go語…

Java基礎:泛型

什么是泛型? 簡單來說,Java泛型是JDK 5引入的一種特性,它允許你在定義類、接口和方法時使用類型參數(Type Parameters)。這些類型參數可以在編譯時被具體的類型(如 String, Integer, MyCustomClass 等&…

RMSNorm實現

當前Qwen、Llama等系列RMSNorm實現源碼均一致。具體現實如下: class RMSNorm(nn.Module):def __init__(self, hidden_size, eps1e-6):super().__init__()self.weight nn.Parameter(torch.ones(hidden_size))self.variance_epsilon epsdef forward(self, hidden_s…