鴻蒙NEXT開發動畫(風格的旋轉加載動畫組件)

1.創建空白項目


2.Page文件夾下面新建Spin.ets文件,代碼如下:

/*** SpinKit 風格的旋轉加載動畫組件。** @component* @param spinSize - 動畫容器大小(必須為正數)* @param spinColor - 動畫顏色(支持資源引用)** 示例:* ```ets* SpinOne({*   spinSize: 60,*   spinColor: '#FF0000'* })* ```*/// 定義關鍵幀動畫配置接口
interface KeyframeItem {duration: number;curve: Curve;event: () => void;
}// 動畫整體配置接口(已存在)
interface KeyframeAnimationConfig {iterations: number;delay: number;
}// 更新動畫狀態的參數接口
interface AnimationUpdateParams {angle?: number;x?: number;y?: number;
}@ComponentV2
export struct SpinOne {@Require @Param spinSize: number = 48;       // 父組件必須傳值,這里默認值不會實際生效@Require @Param spinColor: ResourceColor = '#209ED8';@Local angle: number = 0;@Local x: number = 0;@Local y: number = 0;private readonly ANIMATION_DURATION: number = 600;build() {Canvas().width(this.spinSize).height(this.spinSize).backgroundColor(this.spinColor).renderFit(RenderFit.CENTER).shadow(ShadowStyle.OUTER_DEFAULT_XS).rotate({perspective: this.spinSize,x: this.x,y: this.y,angle: this.angle}).onAppear(() => {this.startAnimation();});}private startAnimation(): void {const uiContext = this.getUIContext();if (!uiContext) return;const animationConfig: KeyframeAnimationConfig = {iterations: -1, // 無限循環delay: 0,};uiContext.keyframeAnimateTo(animationConfig, [this.createKeyframe(this.ANIMATION_DURATION, { angle: 180, x: this.spinSize / 2, y: 0 }),this.createKeyframe(0, { angle: 0 }),this.createKeyframe(this.ANIMATION_DURATION, { angle: 180, x: 0, y: this.spinSize / 2 })]);}/*** 創建關鍵幀動畫配置項* @param duration 動畫持續時間* @param update 動畫更新參數*/private createKeyframe(duration: number,update: AnimationUpdateParams): KeyframeItem {return {duration,curve: Curve.EaseInOut,event: () => {if (update.angle !== undefined) this.angle = update.angle;if (update.x !== undefined) this.x = update.x;if (update.y !== undefined) this.y = update.y;}};}
}代碼如下:
/*** SpinKit 風格的旋轉加載動畫組件。** @component* @param spinSize - 動畫容器大小(必須為正數)* @param spinColor - 動畫顏色(支持資源引用)** 示例:* ```ets* SpinOne({*   spinSize: 60,*   spinColor: '#FF0000'* })* ```*/// 定義關鍵幀動畫配置接口
interface KeyframeItem {duration: number;curve: Curve;event: () => void;
}// 動畫整體配置接口(已存在)
interface KeyframeAnimationConfig {iterations: number;delay: number;
}// 更新動畫狀態的參數接口
interface AnimationUpdateParams {angle?: number;x?: number;y?: number;
}@ComponentV2
export struct SpinOne {@Require @Param spinSize: number = 48;       // 父組件必須傳值,這里默認值不會實際生效@Require @Param spinColor: ResourceColor = '#209ED8';@Local angle: number = 0;@Local x: number = 0;@Local y: number = 0;private readonly ANIMATION_DURATION: number = 600;build() {Canvas().width(this.spinSize).height(this.spinSize).backgroundColor(this.spinColor).renderFit(RenderFit.CENTER).shadow(ShadowStyle.OUTER_DEFAULT_XS).rotate({perspective: this.spinSize,x: this.x,y: this.y,angle: this.angle}).onAppear(() => {this.startAnimation();});}private startAnimation(): void {const uiContext = this.getUIContext();if (!uiContext) return;const animationConfig: KeyframeAnimationConfig = {iterations: -1, // 無限循環delay: 0,};uiContext.keyframeAnimateTo(animationConfig, [this.createKeyframe(this.ANIMATION_DURATION, { angle: 180, x: this.spinSize / 2, y: 0 }),this.createKeyframe(0, { angle: 0 }),this.createKeyframe(this.ANIMATION_DURATION, { angle: 180, x: 0, y: this.spinSize / 2 })]);}/*** 創建關鍵幀動畫配置項* @param duration 動畫持續時間* @param update 動畫更新參數*/private createKeyframe(duration: number,update: AnimationUpdateParams): KeyframeItem {return {duration,curve: Curve.EaseInOut,event: () => {if (update.angle !== undefined) this.angle = update.angle;if (update.x !== undefined) this.x = update.x;if (update.y !== undefined) this.y = update.y;}};}
}

3.修改Index.ets文件,代碼如下:
?

import { SpinOne } from './Spin';

@Entry
@Component
struct Index {
? @State message: string = 'Hello World';

? build() {
? ? Column() {
? ? ? SpinOne({
? ? ? ? spinSize: 60,
? ? ? ? spinColor: '#FF0000'
? ? ? })
? ? }
? ? .alignItems(HorizontalAlign.Center)
? ? .justifyContent(FlexAlign.Center)
? ? .height('100%')
? ? .width('100%')
? }
}
代碼如下:

import { SpinOne } from './Spin';@Entry
@Component
struct Index {@State message: string = 'Hello World';build() {Column() {SpinOne({spinSize: 60,spinColor: '#FF0000'})}.alignItems(HorizontalAlign.Center).justifyContent(FlexAlign.Center).height('100%').width('100%')}
}

4.運行項目,登錄華為賬號,需進行簽名

5.動畫效果如下:

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

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

相關文章

后端接口請求http改為https

1、使用 OpenSSL 生成自簽名證書 在Linxu服務器上執行如下命令: openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes 運行此命令后,會提示輸入一些信息(如國家、省份、城市、組織名稱等)&…

工作記錄 2017-12-12 + 在IIS下發布wordpress

工作記錄 2017-12-12 序號 工作 相關人員 1 修改郵件上的問題。 更新RD服務器。 在IIS下發布wordpress。 郝 服務器更新 RD服務器更新了,更新的文件放在190的D:\Temp\CHTeam\fnehr_update_20171212\下了。 數據庫更新: 數據庫沒有更新 更新的文件&#xf…

【PostgreSQL數據分析實戰:從數據清洗到可視化全流程】1.2 安裝與配置PostgreSQL(Windows/Linux/macOS)

?? 點擊關注不迷路 ?? 點擊關注不迷路 ?? 點擊關注不迷路 文章大綱 1.2 安裝與配置 PostgreSQL(Windows/Linux/macOS)1.2.1 操作系統兼容性與硬件要求1.2.2 Windows 安裝與配置1.2.2.1 安裝步驟1.2.2.2 服務管理1.2.2.3 配置文件路徑1.2.3 Linux 安裝與配置(以 Ubuntu…

epub格式轉txt格式工具,txt批量轉PDF

epub格式轉txt格式工具,功能如圖: txt格式批量轉PDF 參考原文:epub格式轉txt格式工具,txt批量轉PDF 輕輕一點就關注, 好運連連擋不住,點個關注吧。

56.[前端開發-前端工程化]Day03-webpack構建工具

邂逅Webpack和打包過程 1 認識webpack工具 前端開發的流程 內置模塊path path常見的API 在webpack中的使用 認識webpack 腳手架依賴webpack Webpack到底是什么呢 Webpack官方的圖片 Vue項目加載的文件有哪些呢? Webpack的使用前提 Webpack的安裝 2 webpack基本打包…

Rockchip Android平臺打開GKI無法開機問題

Rockchip Android平臺打開GKI無法開機問題 問題描述 Rockchip Android平臺由于編譯環境對pahole版本有要求,如果版本不對會導致ko無法加載從而導致系統無法開機。pahole的版本具體要求如下: Android版本pahole版本Android12/13版本pahole v1.21Androi…

SQL命令二:SQL 高級查詢與特殊算法

引言 在掌握了 SQL 的基礎操作和建表約束后,我們可以進一步探索 SQL 的高級查詢功能和一些特殊算法。這些高級技巧能夠幫助我們更高效地處理和分析數據,滿足復雜的業務需求。 一、查詢進階 (一)簡單查詢 簡單查詢通過 select 語…

HTML04:圖像標簽

圖像標簽 常見的圖像標簽 JPGGIFPNGBMP <img src"路徑" alt"名稱" title"懸停名稱" width"高" height"寬"/><!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8&quo…

Docker —— 技術架構的演進

Docker —— 技術架構的演進 技術架構演進總結單機架構優點缺點總結 應用數據分離架構優點缺點總結 應用服務集群架構1. Nginx2. HAProxy3. LVS&#xff08;Linux Virtual Server&#xff09;4. F5 BIG-IP對比總結選型建議 讀寫分離/主從分離架構1. MyCat簡介 2. TDDL&#xff…

[machine learning] Transformer - Attention (一)

Attention是Transformer的核心&#xff0c;本系列先通過介紹Attention來學習Transformer。本文先介紹簡單版的Attention。 在Attention出現之前&#xff0c;通常使用recurrent neural networds (RNNs)來處理長序列數據。模型架構上&#xff0c;又通常使用encoder-decoder的結構…

Android 輸入控件事件使用示例

一 前端 <EditTextandroid:id="@+id/editTextText2"android:layout_width="match_parent"android:layout_height="wrap_content"android:ems="10"android:inputType="text"android:text="Name" />二 后臺代…

【向量數據庫】用披薩點餐解釋向量數據庫:一個美味的技術類比

文章目錄 前言場景設定&#xff1a;披薩特征向量化顧客到來&#xff1a;生成查詢向量相似度計算實戰1. 歐氏距離計算&#xff08;值越小越相似&#xff09;2. 余弦相似度計算&#xff08;值越大越相似&#xff09; 關鍵發現&#xff1a;度量選擇影響結果現實啟示結語 前言 想象…

人工智能和機器學習在包裝仿真中的應用與價值

引言 隨著包裝成為消費品關鍵的差異化因素&#xff0c;對智能設計、可持續性和高性能的要求比以往任何時候都更高 。為了滿足這些復雜的期望&#xff0c;公司越來越多地采用先進的仿真方法&#xff0c;而現在人工智能 (AI) 和機器學習 (ML) 又極大地增強了這些方法 。本文探討…

【人工智能】深入探索Python中的自然語言理解:實現實體識別系統

《Python OpenCV從菜鳥到高手》帶你進入圖像處理與計算機視覺的大門! 解鎖Python編程的無限可能:《奇妙的Python》帶你漫游代碼世界 自然語言理解(NLU)是人工智能(AI)領域中的重要研究方向之一,其目標是讓計算機理解和處理人類語言。在NLU的眾多應用中,實體識別(Nam…

個人健康中樞的多元化AI硬件革新與精準健康路徑探析

在醫療信息化領域,個人健康中樞正經歷著一場由硬件技術革新驅動的深刻變革。隨著可穿戴設備、傳感器技術和人工智能算法的快速發展,新一代健康監測硬件能夠采集前所未有的多維度生物數據,并通過智能分析提供精準的健康建議。本文將深入探討構成個人健康中樞的最新硬件技術,…

深入了解Linux系統—— 進程切換和調度

前言&#xff1a; 了解了進程的狀態和進程的優先級&#xff0c;我們現在來看進程是如何被CPU調度執行的。 在單CPU的系統在&#xff0c;程序是并發執行的&#xff1b;也就是說在一段時間呢&#xff0c;進程是輪番執行的&#xff1b; 這也是說一個進程在運行時不會一直占用CPU直…

阿里云服務遷移實戰: 06-切換DNS

概述 按前面的步驟&#xff0c;所有服務遷移完畢之后&#xff0c;最后就剩下 DNS 解析修改了。 修改解析 在域名解析處&#xff0c;修改域名的解析地址即可。 如果 IP 已經過戶到了新賬號&#xff0c;則不需要修改解析。 何確保業務穩定 域名解析更換時&#xff0c;由于 D…

uni-app 中封裝全局音頻播放器

在開發移動應用時&#xff0c;音頻播放功能是一個常見的需求。無論是背景音樂、音效還是語音消息&#xff0c;音頻播放都需要一個穩定且易于管理的解決方案。在 uni-app 中&#xff0c;雖然原生提供了 uni.createInnerAudioContext 方法用于音頻播放&#xff0c;但直接使用它可…

golang常用庫之-標準庫text/template

文章目錄 golang常用庫之-標準庫text/template背景什么是text/templatetext/template庫的使用 golang常用庫之-標準庫text/template 背景 在許多編程場景中&#xff0c;我們經常需要把數據按照某種格式進行輸出&#xff0c;比如生成HTML頁面&#xff0c;或者生成配置文件。這…

Linux btop 使用教程

簡介 btop 是一個基于終端的現代系統資源監控器&#xff0c;具有美觀的圖形界面、響應快、功能豐富等特點。它支持查看 CPU、內存、磁盤、網絡、進程&#xff0c;并可以方便地篩選和管理進程。 功能總覽 啟動命令&#xff1a; btop界面分為以下幾部分&#xff1a; CPU 區域…