成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

ArkUI轉場動畫的使用—學習筆記

系統
HarmonyOS eTS提供了豐富的動畫組件和接口,開發者可以根據實際場景和開發需求,選用不同的組件和接口來實現不同的動畫效果。

[[441281]]

想了解更多內容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區

https://harmonyos.51cto.com

前言

好久不見,甚是想念!最近學業上有點小忙,擱置了一個半月,但我又回來啦!好好學習,天天向上(ง •_•)ง

最近看了官方文檔上“轉場動畫的使用(eTS)”的案例,也跟著學習了一下,順便做點筆記O(∩_∩)O

概述

效果圖如下:

#星光計劃2.0#【木棉花】ArkUI轉場動畫的使用——學習筆記-鴻蒙HarmonyOS技術社區
#星光計劃2.0#【木棉花】ArkUI轉場動畫的使用——學習筆記-鴻蒙HarmonyOS技術社區
#星光計劃2.0#【木棉花】ArkUI轉場動畫的使用——學習筆記-鴻蒙HarmonyOS技術社區
#星光計劃2.0#【木棉花】ArkUI轉場動畫的使用——學習筆記-鴻蒙HarmonyOS技術社區
#星光計劃2.0#【木棉花】ArkUI轉場動畫的使用——學習筆記-鴻蒙HarmonyOS技術社區

正文

一.新建項目

DevEco Studio下載安裝成功后,打開DevEco Studio,點擊左上角的File,點擊New,再選擇New Project,選擇Empty Ability,然后點擊Next,給項目命名Animation,選擇設備類型Phone,選擇語言類型ets,API Version選擇7,最后點擊Finish

初始目錄的各個文件夾和文件的作用:

index.ets:用于描述UI布局、樣式、事件交互和頁面邏輯。

app.ets:用于全局應用邏輯和應用生命周期管理。

pages:用于存放所有組件頁面。

java:用于存放Ability等Java代碼。

resources:用于存放資源配置文件,比如:國際化字符串、資源限定相關資源和rawfile資源等。

二.構建主界面

從上面效果圖可以看出,主界面主要由5個相同樣式的功能菜單組成,我們可以將這些菜單抽取成一個子組件Item。

1.添加圖片

將所需要的圖片添加到resources > rawfile目錄下。

#星光計劃2.0#【木棉花】ArkUI轉場動畫的使用——學習筆記-鴻蒙HarmonyOS技術社區

2.新建子組件

在index.ets中新建名為Item的子組件,聲明子組件Item的UI布局并添加樣式。創建Stack組件,包含圖片和文本,然后添加文本信息和頁面跳轉事件,定義變量text和uri。其中text用于給Text組件設置文本信息,uri用于設置頁面路由的地址。代碼如下:

  1. @Component 
  2. struct Item { 
  3.   private text: string 
  4.   private uri: string 
  5.  
  6.   build() { 
  7.     Stack({ alignContent: Alignment.Center }) { 
  8.       Image($rawfile('image1.jfif')) 
  9.         .objectFit(ImageFit.Cover) 
  10.         .width('100%'
  11.         .height(100) 
  12.         .borderRadius(15) 
  13.  
  14.       Text(this.text) 
  15.         .fontSize(20) 
  16.         .fontWeight(FontWeight.Bold) 
  17.         .fontColor(Color.Black) 
  18.     } 
  19.     .onClick(() => { 
  20.       router.push({ uri: this.uri }) 
  21.     }) 
  22.     .height(100) 
  23.     .borderRadius(15) 
  24.     .width('80%'
  25.     .margin({ bottom: 20 }) 
  26.   } 

3.將子組件添加到Index組件中

將Item組件添加到Index組件中,并給Item傳入參數text和uri,由于還未創建要跳轉的頁面,所以這里uri暫時傳空字符串。

  1. @Entry  
  2. @Component  
  3. struct Index {  
  4.   build() {  
  5.     Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {  
  6.       Item({ text: '頁面間轉場:底部滑入', uri: '' })  
  7.       Item({ text: '頁面間轉場:自定義1', uri: '' })  
  8.       Item({ text: '頁面間轉場:自定義2', uri: '' })  
  9.       Item({ text: '組件內轉場', uri: '' })  
  10.       Item({ text: '共享元素轉場', uri: '' })  
  11.     }  
  12.     .width('100%')  
  13.     .height('100%')  
  14.     .backgroundColor('#FFECECEC')  
  15.   }  
  16. }  

三.實現頁面間轉場

1.文件架構

在pages目錄下新建名為page的package,然后在page目錄下,點擊鼠標右鍵分別新建名為BottomTransition、CustomTransition和FullCustomTransition的三個ets文件。其中BottomTransition用于實現"頁面間轉場:底部滑入"動效;CustomTransition用于實現"頁面間轉場:自定義1"動效;FullCustomTransition用于實現"頁面間轉場:自定義2"動效。

新建后,打開config.json文件會看到pages標簽下自動添加了BottomTransition、CustomTransition和FullCustomTransition的路由地址,如果沒有的話就自己手動添加。

#星光計劃2.0#【木棉花】ArkUI轉場動畫的使用——學習筆記-鴻蒙HarmonyOS技術社區

tips: 1.頁面文件名不能使用組件名稱,比如:Text.ets、Button.ets等。2.每個頁面文件中必須包含入口組件。3.pages列表中第一個頁面為應用的首頁入口。

2.實現頁面跳轉

在主界面index.ets的Index組件中,將BottomTransition、CustomTransition和FullCustomTransition的路由地址賦值給對應Item的uri。

  1. import router from '@system.router'
  2. @Entry  
  3. @Component  
  4. struct Index {  
  5.   build() {  
  6.     Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {  
  7.       Item({ text: '頁面間轉場:底部滑入', uri: 'pages/page/BottomTransition' })  
  8.       Item({ text: '頁面間轉場:自定義1', uri: 'pages/page/CustomTransition' })  
  9.       Item({ text: '頁面間轉場:自定義2', uri: 'pages/page/FullCustomTransition' })  
  10.       Item({ text: '組件內轉場', uri: '' })  
  11.       Item({ text: '共享元素轉場', uri: '' })  
  12.     }  
  13.     .width('100%')  
  14.     .height('100%')  
  15.     .backgroundColor('#FFECECEC')  
  16.   }  

3.實現"底部滑入"動效

在BottomTransition申明pageTransition方法配置轉場參數,其中PageTransitionEnter用于自定義當前頁面的入場效果,PageTransitionExit用于自定義當前頁面的退場效果。在這里我們設置PageTransitionEnter和PageTransitionExit的slide屬性為SlideEffect.Bottom,來實現BottomTransition入場時從底部滑入,退場時從底部滑出。

  1. @Entry 
  2. @Component 
  3. struct BottomTransition{ 
  4.   build() { 
  5.     Stack() { 
  6.       Image($rawfile('image2.jfif')) 
  7.         .objectFit(ImageFit.Cover) 
  8.         .width('100%'
  9.         .height('100%'
  10.     } 
  11.     .width('100%'
  12.     .height('100%'
  13.   } 
  14.   pageTransition() { 
  15.     PageTransitionEnter({ duration: 600, curve: Curve.Smooth }) 
  16.       .slide(SlideEffect.Bottom) 
  17.     PageTransitionExit({ duration: 600, curve: Curve.Smooth }) 
  18.       .slide(SlideEffect.Bottom) 
  19.   } 

 效果如下:

#星光計劃2.0#【木棉花】ArkUI轉場動畫的使用——學習筆記-鴻蒙HarmonyOS技術社區

4.實現"頁面轉場:自定義1"動效

在CustomTransition.ets的CustomTransition組件中添加Stack組件和Image組件,并且定義pageTransition方法。我實現的效果是進場淡入退場淡出。代碼如下:

  1. @Entry 
  2. @Component 
  3. struct CustomTransition{ 
  4.   build() { 
  5.     Stack() { 
  6.       Image($rawfile('image3.jfif')) 
  7.         .objectFit(ImageFit.Cover) 
  8.         .width('100%'
  9.         .height('100%'
  10.     } 
  11.     .width('100%'
  12.     .height('100%'
  13.   } 
  14.   pageTransition() { 
  15.     PageTransitionEnter({ duration: 1500, curve: Curve.Smooth }) 
  16.       .opacity(0.2) 
  17.     PageTransitionExit({ duration:1000, curve: Curve.Smooth }) 
  18.       .opacity(0) 
  19.   } 

 效果如下: 

#星光計劃2.0#【木棉花】ArkUI轉場動畫的使用——學習筆記-鴻蒙HarmonyOS技術社區

5.實現"頁面轉場:自定義2"動效

實現的效果:頁面入場時淡入和放大,同時順時針旋轉;退場時淡出和縮小,同時逆時針旋轉。

在FullCustomTransition.ets的FullCustomTransition組件中添加Stack組件和Image組件,并且定義pageTransition方法。給Stack組件添加opacity、scale、rotate屬性,定義變量myProgress用來控制Stack組件的動效,在PageTransitionEnter和PageTransitionExit組件中動態改變myProgress的值。代碼如下:

  1. @Entry 
  2. @Component 
  3. struct FullCustomTransition{ 
  4.   @State myProgress: number = 1 
  5.  
  6.   build() { 
  7.     Stack() { 
  8.       Image($rawfile('image2.jfif')) 
  9.         .objectFit(ImageFit.Cover) 
  10.         .width('100%'
  11.         .height('100%'
  12.     } 
  13.     .width('100%'
  14.     .height('100%'
  15.     .opacity(this.myProgress) 
  16.     .scale({ x: this.myProgress, y: this.myProgress }) 
  17.     .rotate({ x: 0, y: 0, z: 1, angle: 360 * this.myProgress }) 
  18.   } 
  19.  
  20.   pageTransition() { 
  21.     PageTransitionEnter({ duration: 1000, curve: Curve.Smooth }) 
  22.       .onEnter((type: RouteType, progress: number) => { 
  23.         this.myProgress = progress  
  24.       }) 
  25.     PageTransitionExit({ duration: 1000, curve: Curve.Smooth }) 
  26.       .onExit((type: RouteType, progress: number) => { 
  27.         this.myProgress = 1 - progress  
  28.       }) 
  29.   } 

 效果如下:

#星光計劃2.0#【木棉花】ArkUI轉場動畫的使用——學習筆記-鴻蒙HarmonyOS技術社區

四.實現組件內轉場

實現組件內轉場動效,通過一個按鈕來控制組件的添加和移除,呈現容器組件子組件添加和移除時的動效。組件轉場主要通過transition屬性方法配置轉場參數,在組件添加和移除時會執行過渡動效,需要配合animteTo才能生效。動效時長、曲線、延時跟隨animateTo中的配置。

1.新建文件

在pages目錄下,新建名為ComponentTransition的ets文件

2.新建子組件

在ComponentTransition.ets文件中,新建ComponentItem子組件,添加Stack組件和Image組件。給Stack添加兩個transition屬性,分別用于定義組件的添加動效和移除動效。

  1. @Component 
  2. struct ComponentItem { 
  3.   build() { 
  4.     Stack({ alignContent: Alignment.Center }) { 
  5.       Image($rawfile('image1.jfif')) 
  6.         .objectFit(ImageFit.Cover) 
  7.         .width('100%'
  8.         .height(120) 
  9.         .borderRadius(15) 
  10.     } 
  11.     .height(120) 
  12.     .borderRadius(15) 
  13.     .width('80%'
  14.     .margin({ top: 20 }) 
  15.     .transition({ type: TransitionType.Insert, scale: { x: 0.5, y: 0.5 }, opacity: 0 }) 
  16.     .transition({ type: TransitionType.Delete, rotate: { x: 0, y: 1, z: 0, angle: 360 }, scale: { x: 0, y: 0 } }) 
  17.   } 

3.添加子組件

在ComponentTransition組件定義一個變量,用于控制ComponentItem的添加和移除,在Button組件的onClick事件中添加animateTo方法,來使ComponentItem子組件動效生效。

  1. @Entry 
  2. @Component 
  3. struct ComponentTransition { 
  4.   @State private isShow: boolean= false 
  5.  
  6.   build() { 
  7.     Column() { 
  8.       if (this.isShow) { 
  9.         ComponentItem() 
  10.       } 
  11.       ComponentItem() 
  12.       Button("Toggle"
  13.         .onClick(() => { 
  14.           animateTo({ duration: 600 }, () => { 
  15.             this.isShow = !this.isShow; 
  16.           }) 
  17.         }) 
  18.         .height(45) 
  19.         .width(200) 
  20.         .fontColor(Color.Black) 
  21.         .backgroundColor('rgb(203,155,192)'
  22.         .margin({ top: 20 }) 
  23.     } 
  24.     .padding({ left: 20, right: 20 }) 
  25.     .backgroundColor('#FFECECEC'
  26.     .height('100%'
  27.     .width('100%'
  28.   } 

 效果圖如下:

#星光計劃2.0#【木棉花】ArkUI轉場動畫的使用——學習筆記-鴻蒙HarmonyOS技術社區

五.實現元素共享轉場

共享元素轉場通過給組件設置sharedTransition屬性來實現,兩個頁面的組件配置為同一個id,則轉場過程中會執行共享元素轉場。sharedTransition可以設置動效的時長、動畫曲線和延時。

1.首先在pages目錄下新建名為share的包,然后在share目錄下分別新建名為ShareItem和SharePage的ets文件。其中ShareItem.ets用于展示小圖,SharePage.ets用于展示大圖。

#星光計劃2.0#【木棉花】ArkUI轉場動畫的使用——學習筆記-鴻蒙HarmonyOS技術社區

 

2.在ShareItem.ets中給Image組件設置sharedTransition屬性,組件轉場id設置為"imageId"。

  1. import router from '@system.router' 
  2.  
  3. @Entry 
  4. @Component 
  5. struct ShareItem{ 
  6.   build() { 
  7.     Flex() { 
  8.       Flex({ justifyContent: FlexAlign.Start, alignItems: ItemAlign.Center }) { 
  9.         Stack() { 
  10.           Image($rawfile('image3.jfif')) 
  11.           // 設置共享元素轉場屬性 
  12.             .sharedTransition('imageId', { duration: 600, curve: Curve.Smooth, delay: 100 }) 
  13.             .onClick(() => { 
  14.               router.push({ uri: 'pages/share/SharePage' }) 
  15.             }) 
  16.             .objectFit(ImageFit.Cover) 
  17.             .height('100%'
  18.             .width('100%'
  19.             .borderRadius(15) 
  20.         } 
  21.         .height('100%'
  22.         .width('100%'
  23.  
  24.         Text('點擊查看共享元素轉場動效'
  25.           .fontSize(20) 
  26.           .fontColor(Color.Black) 
  27.           .fontWeight(FontWeight.Regular) 
  28.           .margin({ left: 10, right: 10 }) 
  29.  
  30.       } 
  31.       .height(120) 
  32.       .backgroundColor('rgb(181,222,224)'
  33.       .borderRadius(15) 
  34.       .margin({ top: 20 }) 
  35.     } 
  36.     .width('100%'
  37.     .padding({ left: 16, right: 16 }) 
  38.     .backgroundColor('#FFECECEC'
  39.   } 

3.在SharePage.ets中給Image組件設置sharedTransition屬性,組件轉場id設置為"imageId"。

  1. @Entry 
  2. @Component 
  3. struct SharePage{ 
  4.   build() { 
  5.     Stack() { 
  6.       Image($rawfile('image3.jfif')) 
  7.       // 設置共享元素轉場屬性 
  8.         .sharedTransition('imageId', { duration: 1000, curve: Curve.Smooth, delay: 100 }) 
  9.         .objectFit(ImageFit.Cover) 
  10.         .width('100%'
  11.         .height('100%'
  12.     } 
  13.     .width('100%'
  14.     .height('100%'
  15.   } 

 4.最后別忘在主界面添加相應路由地址。

  1. import router from '@system.router'
  2. @Entry 
  3. @Component 
  4. struct Index { 
  5.   build() { 
  6.     Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { 
  7.       Item({ text: '頁面間轉場:底部滑入', uri: 'pages/page/BottomTransition' }) 
  8.       Item({ text: '頁面間轉場:自定義1', uri: 'pages/page/CustomTransition' }) 
  9.       Item({ text: '頁面間轉場:自定義2', uri: 'pages/page/FullCustomTransition' }) 
  10.       Item({ text: '組件內轉場', uri: 'pages/ComponentTransition' }) 
  11.       Item({ text: '共享元素轉場', uri: 'pages/share/ShareItem' }) 
  12.     } 
  13.     .width('100%'
  14.     .height('100%'
  15.     .backgroundColor('#FFECECEC'
  16.   } 

 效果圖如下:

#星光計劃2.0#【木棉花】ArkUI轉場動畫的使用——學習筆記-鴻蒙HarmonyOS技術社區

tips:1.兩個頁面的組件配置為同一個id,則轉場過程中會執行共享元素轉場,配置為空字符串時不會有共享元素轉場效果。

2.在 config.json文件里在 “launchType”: "standard"后面添加以下代碼就能去掉左上角的標簽欄。

  1. "icon""$media:icon"
  2.         "description""$string:mainability_description"
  3.         "label""$string:entry_MainAbility"
  4.         "type""page"
  5.         "launchType""standard"
  6.         "metaData": { 
  7.           "customizeData": [ 
  8.             { 
  9.               "name""hwc-theme"
  10.               "value""androidhwext:style/Theme.Emui.Light.NoTitleBar"
  11.               "extra""" 
  12.             } 
  13.           ] 
  14.         } 

結語

以上就是我這次的小分享啦❀❀!

文章相關附件可以點擊下面的原文鏈接前往下載

https://harmonyos.51cto.com/resource/1600

想了解更多內容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區

https://harmonyos.51cto.com

責任編輯:jianghua 來源: 鴻蒙社區
相關推薦

2015-03-23 17:43:31

transitionViewControl

2021-10-12 11:07:33

動畫深度Android

2022-06-01 22:41:29

轉場動畫鴻蒙

2022-07-08 09:55:54

CSS轉場動畫

2024-05-31 08:43:31

2023-12-20 17:28:48

水波紋ArkUI動畫開發

2011-08-16 18:13:42

IPhone開發UIView動畫

2022-07-20 15:24:47

ArkUI動畫效果項目開發

2009-04-12 08:55:18

Symbian諾基亞移動OS

2010-08-31 16:35:59

CSS

2014-10-27 14:34:39

Material De轉場動畫

2009-06-19 18:38:01

Spring

2009-11-09 12:30:23

WCF生成代理

2010-06-01 19:55:30

SVN使用

2009-09-01 11:28:32

C#使用函數重載

2010-07-23 14:04:43

Perl grep函數

2010-05-21 11:07:36

2010-07-19 15:31:10

Perl關聯數組函數

2011-08-16 10:56:01

SQLPLUS學習筆記ECHO

2022-09-05 15:22:27

ArkUIets
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 色www精品视频在线观看 | 黄色激情毛片 | 国产精品99999 | 自拍偷拍中文字幕 | 超碰日本 | 天天看天天干 | 久久久精品视频免费看 | 久久婷婷国产香蕉 | 欧美精品一区二区在线观看 | 成人免费观看男女羞羞视频 | 亚洲欧洲小视频 | 成年人黄色一级片 | 色站综合| 欧美 中文字幕 | 免费一级欧美在线观看视频 | 国产精品一区二区免费 | 天天曰天天曰 | 91精品国产综合久久香蕉922 | 久久精品亚洲一区 | 国产精品美女久久久久aⅴ国产馆 | 日本一区不卡 | 成人夜晚看av | 午夜久久久 | 久久成人人人人精品欧 | 久久91 | 粉色午夜视频 | 免费在线观看一区二区三区 | 一区二区三区四区不卡视频 | 91视频在线看 | 一区二区在线看 | 日韩欧美一区二区三区在线播放 | 久久精品国产久精国产 | 欧美在线视频免费 | 欧美国产激情 | 成人福利网站 | 久久久夜色精品亚洲 | 亚洲精品乱码 | 日日夜夜天天干 | 欧美在线综合 | 51ⅴ精品国产91久久久久久 | 国产一区久久久 |