HarmonyOS 5.0應用開發——屬性動畫

【高心星出品】

文章目錄

      • 屬性動畫
        • animateTo屬性動畫
        • animation屬性動畫

屬性動畫

屬性接口(以下簡稱屬性)包含尺寸屬性、布局屬性、位置屬性等多種類型,用于控制組件的行為。針對當前界面上的組件,其部分屬性(如位置屬性)的變化會引起UI的變化。添加動畫可以讓屬性值從起點逐漸變化到終點,從而產生連續的動畫效果。

animateTo屬性動畫

通用函數,對閉包前界面和閉包中的狀態變量引起的界面之間的差異做動畫。

支持多次調用,支持嵌套。

animateTo(value: AnimateParam, event: () => void): void

animateTo接口參數中,value指定AnimateParam對象(包括時長、Curve等)event為動畫的閉包函數,閉包內變量改變產生的屬性動畫將遵循相同的動畫參數。

案例:

點擊按鈕紅色塊旋轉90度,綠色塊向下平移100并且透明度改變為半透明。

在這里插入圖片描述

代碼:

import curves from '@ohos.curves'@Entry
@Component
struct PropAnimation {@State animate: boolean = false;// 第一步: 聲明相關狀態變量@State rotateValue: number = 0; // 組件一旋轉角度@State translateY: number = 0; // 組件二偏移量@State opacityValue: number = 1; // 組件二透明度// 第二步:將狀態變量設置到相關可動畫屬性接口build() {Column() {// 組件一Column() {this.CommonText()}.ColumnStyle().backgroundColor(0xf56c6c).rotate({ angle: this.rotateValue })// 組件二Column() {this.CommonText()}.ColumnStyle().backgroundColor(0x67C23A).opacity(this.opacityValue).translate({ y: this.translateY })Button('Click').margin({ top: 120 }).onClick(() => {this.animate = !this.animate;// 第三步:通過屬性動畫接口開啟屬性動畫animateTo({ curve: curves.springMotion() }, () => {// 第四步:閉包內通過狀態變量改變UI界面// 這里可以寫任何能改變UI的邏輯比如數組添加,顯隱控制,系統會檢測改變后的UI界面與之前的UI界面的差異,對有差異的部分添加動畫// 組件一的rotate屬性發生變化,所以會給組件一添加rotate旋轉動畫this.rotateValue = this.animate ? 90 : 0;// 組件二的scale屬性發生變化,所以會給組件二添加scale縮放動畫this.opacityValue = this.animate ? 0.6 : 1;// 組件二的offset屬性發生變化,所以會給組件二添加offset偏移動畫this.translateY = this.animate ? 100 : 0;})})}.width('100%').height('100%').justifyContent(FlexAlign.Center)}@BuilderCommonText() {Text('ArkUI').fontWeight(FontWeight.Bold).fontSize(20).fontColor(Color.White)}
}@Extend(Column)
function ColumnStyle() {.justifyContent(FlexAlign.Center).width(150).height(150).borderRadius(10)
}
animation屬性動畫

相比于animateTo接口需要把要執行動畫的屬性的修改放在閉包中,animation接口無需使用閉包,把animation接口加在要做屬性動畫的可動畫屬性后即可。animation只要檢測到其綁定的可動畫屬性發生變化,就會自動添加屬性動畫,animateTo則必須在動畫閉包內改變可動畫屬性的值從而生成動畫。

animation(value:AnimateParam)

組件的某些通用屬性變化時,可以通過屬性動畫實現漸變過渡效果,提升用戶體驗。支持的屬性包括width、height、backgroundColor、opacity、scale、rotate、translate等。布局類改變寬高的動畫,內容都是直接到終點狀態,例如文字、Canvas的內容等,如果要內容跟隨寬高變化,可以使用renderFit屬性配置。

案例:

點擊按鈕紅色塊向左平移并且順時針旋轉90°,綠色塊向右平移且逆時針旋轉90°,且文字顏色變為黑色。

在這里插入圖片描述

代碼:

import curves from '@ohos.curves';@Entry
@Component
struct AnimationDemo {@State animate: boolean = false;// 第一步: 聲明相關狀態變量@State rotateValue: number = 0; // 組件一旋轉角度@State translateX: number = 0; // 組件二偏移量@State translateXX:number=0;//組件一平移@State rotateValuee: number = 0; // 組件二旋轉角度@State color: Color = Color.White; // 組件二字體顏色// 第二步:將狀態變量設置到相關可動畫屬性接口build() {Column() {Column() {// 組件一Text('ArkUI').textStyle().backgroundColor(0xf56c6c).fontColor(Color.White).rotate({ angle: this.rotateValue })// 第三步:通過屬性動畫接口開啟屬性動畫,控件的函數調用順序是從下往上的,這個animation會作用到上面的rotate屬性.translate({x:this.translateXX}).animation({ curve: curves.springMotion() })// 組件二Text('ArkUI').textStyle().backgroundColor(0x67C23A).fontColor(this.color)// 第三步:通過屬性動畫接口開啟屬性動畫,控件的函數調用順序是從下往上的,這個animation會作用到上面的fontColor屬性.animation({ curve: curves.springMotion() }).translate({ x: this.translateX })// 第三步:通過屬性動畫接口開啟屬性動畫,控件的函數調用順序是從下往上的,這個animation會作用到上面的translate屬性.rotate({angle:this.rotateValuee}).animation({ curve: curves.springMotion() })}.justifyContent(FlexAlign.Center)// 第四步:通過狀態變量改變UI界面,系統會檢測改變后的UI界面與之前的UI界面的差異,對有差異的部分添加動畫Button('Click').margin({ top: 120 }).onClick(() => {this.animate = !this.animate;// 組件一的rotate屬性有變化,所以會給組件一加rotate動畫this.rotateValue = this.animate ? 90 : 0;this.rotateValuee = this.animate ? -90 : 0;// 組件二的translate屬性有變化,所以會給組件二加translate動畫this.translateX = this.animate ? 100 : 0;this.translateXX = this.animate ? -100 : 0;// 組件二的fontColor屬性有變化,所以會給組件二加fontColor動畫this.color = this.animate ? Color.Black : Color.White;})}.width('100%').height('100%').justifyContent(FlexAlign.Center)}
}@Extend(Text)
function textStyle() {.fontWeight(FontWeight.Bold).fontSize(20).textAlign(TextAlign.Center).borderRadius(10).width(150).height(150)
}}
}@Extend(Text)
function textStyle() {.fontWeight(FontWeight.Bold).fontSize(20).textAlign(TextAlign.Center).borderRadius(10).width(150).height(150)
}

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

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

相關文章

機器學習支持向量機(SVM)算法

一、引言 在當今數據驅動的時代,機器學習算法在各個領域發揮著至關重要的作用。支持向量機(Support Vector Machine,SVM)作為一種強大的監督學習算法,以其在分類和回歸任務中的卓越性能而備受矚目。SVM 具有良好的泛化…

介紹一款docker ui 管理工具

http://vm01:18999/main.html 管理員登陸賬號 jinghan/123456 ui啟動命令所在文件夾目錄 /work/docker/docker-ui 參考鏈接 DockerUI:一款功能強大的中文Docker可視化管理工具_docker ui-CSDN博客

Motrix WebExtension 使用教程

Motrix WebExtension 使用教程 項目地址:https://gitcode.com/gh_mirrors/mo/motrix-webextension 項目介紹 Motrix WebExtension 是一個瀏覽器擴展,用于與 Motrix 下載管理器集成。該擴展允許用戶通過 Motrix 下載管理器自動下載文件,而不是使用瀏覽器的原生下載管理器。…

前端(四)css選擇器、css的三大特性

css選擇器、css的三大特性 文章目錄 css選擇器、css的三大特性一、css介紹二、css選擇器2.1 基本選擇器2.2 組合選擇器2.3 交集并集選擇器2.4序列選擇器2.5屬性選擇器2.6偽類選擇器2.7偽元素選擇器 三、css三大特性3.1 繼承性3.2 層疊性3.3 優先級 一、css介紹 CSS全稱為Casca…

《探索視頻數字人:開啟未來視界的鑰匙》

一、引言 1.1視頻數字人技術的崛起 在當今科技飛速發展的時代,視頻數字人技術如一顆璀璨的新星,正逐漸成為各領域矚目的焦點。它的出現,猶如一場科技風暴,徹底改變了傳統的視頻制作方式,為各個行業帶來了前所未有的機…

【ETCD】[源碼閱讀]深度解析 EtcdServer 的 processInternalRaftRequestOnce 方法

在分布式系統中,etcd 的一致性與高效性得益于其強大的 Raft 協議模塊。而 processInternalRaftRequestOnce 是 etcd 服務器處理內部 Raft 請求的核心方法之一。本文將從源碼角度解析這個方法的邏輯流程,幫助讀者更好地理解 etcd 的內部實現。 方法源碼 …

免費下載 | 2024算網融合技術與產業白皮書

《2024算網融合技術與產業白皮書(2023年)》的核心內容概括如下: 算網融合發展概述: 各國細化算網戰略,指引行業應用創新升級。 算網融合市場快速增長,算力互聯成為投資新熱點。 算網融合產業模式逐漸成型…

基于卷積神經網絡的圖像二分類檢測模型訓練與推理實現教程 | 幽絡源

前言 對于本教程,說白了,就是期望能通過一個程序判斷一張圖片是否為某個物體,或者說判斷一張圖片是否為某個缺陷。因為本教程是針對二分類問題,因此主要處理 是 與 不是 的問題,比如我的模型是判斷一張圖片是否為蘋果…

安全見聞全解析

跟隨 瀧羽sec團隊學習 聲明! 學習視頻來自B站up主 瀧羽sec 有興趣的師傅可以關注一下,如涉及侵權馬上刪除文章,筆記只是方便各位師傅的學習和探討,文章所提到的網站以及內容,只做學習交流,其他均與本人以及…

代碼隨想錄-算法訓練營-番外(圖論02:島嶼數量,島嶼的最大面積)

day02 圖論part02 今日任務:島嶼數量,島嶼的最大面積 都是一個模子套出來的 https://programmercarl.com/kamacoder/0099.島嶼的數量深搜.html#思路往日任務: day01 圖論part01 今日任務:圖論理論基礎/所有可到達的路徑 代碼隨想錄圖論視頻部分還沒更新 https://programmercar…

RabbitMQ個人理解與基本使用

目錄 一. 作用: 二. RabbitMQ的5中隊列模式: 1. 簡單模式 2. Work模式 3. 發布/訂閱模式 4. 路由模式 5. 主題模式 三. 消息持久化: 消息過期時間 ACK應答 四. 同步接收和異步接收: 應用場景 五. 基本使用 &#xff…

前端怎么預覽pdf

1.背景 后臺返回了一個在線的pdf地址,需要我這邊去做一個pdf的預覽(需求1),并且支持配置是否可以下載(需求2),需要在當前頁就能預覽(需求3)。之前我寫過一篇預覽pdf的文…

Python 參數配置使用 XML 文件的教程:輕松管理你的項目配置

Python 參數配置使用 XML 文件的教程:輕松管理你的項目配置 一句話總結:當配置項存儲在外部文件(如 XML、JSON)時,修改配置無需重新編譯和發布代碼。通過更新 XML 文件即可調整參數,無需更改源代碼&#xf…

解決 MySQL 啟動失敗與大小寫問題,重置數據庫

技術文檔:解決 MySQL 啟動失敗與大小寫問題,重置數據庫 1. 問題背景 在使用 MySQL 時,可能遇到以下問題: MySQL 啟動失敗,日志顯示 “permission denied” 或 “Can’t create directory” 錯誤。MySQL 在修改配置文…

python webdriver-manager 實現selenium 免下載安裝webdriver

python webdriver-manager 實現selenium 免下載安裝webdriver selenium在自動化測試中,通常需要使用瀏覽器驅動來與瀏覽器進行交互。然而,手動下載、安裝、以及管理這些驅動非常麻煩,尤其是當驅動版本頻繁更新時。為此,webdriver-manager庫提供了一個極簡的方案,自動幫我…

滑動窗口算法專題

滑動窗口簡介 滑動窗口就是利用單調性,配合同向雙指針來優化暴力枚舉的一種算法。 該算法主要有四個步驟 1. 先進進窗口 2. 判斷條件,后續根據條件來判斷是出窗口還是進窗口 3. 出窗口 4.更新結果,更新結果這個步驟是不確定的&#xff0c…

C# 中的Task

文章目錄 前言一、Task 的基本概念二、創建 Task使用異步方法使用 Task.Run 方法 三、等待 Task 完成使用 await 關鍵字使用 Task.Wait 方法 四、處理 Task 的異常使用 try-catch 塊使用 Task.Exception 屬性 五、Task 的延續使用 ContinueWith 方法使用 await 關鍵字和異步方法…

【AIGC】如何高效使用ChatGPT挖掘AI最大潛能?26個Prompt提問秘訣幫你提升300%效率的!

還記得第一次使用ChatGPT時,那種既興奮又困惑的心情嗎?我是從一個對AI一知半解的普通用戶,逐步成長為現在的“ChatGPT大神”。這一過程并非一蹴而就,而是通過不斷的探索和實踐,掌握了一系列高效使用的技巧。今天&#…

浩辰CAD教程004:柱梁板

文章目錄 柱梁板標準柱角柱構造柱柱齊墻邊繪制梁繪制樓板 柱梁板 標準柱 繪制標準柱: ①:點選插入柱子②:沿著一根軸線布置柱子③:指定的矩形區域內的軸線交點插入柱子 替換現有柱子:選擇替換之后的柱子形狀&#x…

UNIX數據恢復—UNIX系統常見故障問題和數據恢復方案

UNIX系統常見故障表現: 1、存儲結構出錯; 2、數據刪除; 3、文件系統格式化; 4、其他原因數據丟失。 UNIX系統常見故障解決方案: 1、檢測UNIX系統故障涉及的設備是否存在硬件故障,如果存在硬件故障&#xf…