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

基于ArkUI的漸變色盤—容器組件的學習分享(上)

系統
目前HarmonyOS ArkUI 3.0框架的容器組件共有21個,在學習完這21個容器組件后,打算使用盡可能多的容器組件基于HarmonyOS ArkUI 3.0框架去完成一個實踐開發。

[[439845]]

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

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

https://harmonyos.51cto.com

前言

目前HarmonyOS ArkUI 3.0框架的容器組件共有21個,在學習完這21個容器組件后,打算使用盡可能多的容器組件基于HarmonyOS ArkUI 3.0框架去完成一個實踐開發,一個實踐項目檢驗容器組件的學習成果就來了o( ̄︶ ̄)o

本次實踐項目涉及的容器組件有:Badge(新事件標記組件)、Column(沿垂直方向布局的容器)、Flex(彈性布局組件)、List(列表包含一系列相同寬度的列表項)、ListItem(用來展示列表具體item)、Navigator(路由容器組件)、Row(沿水平方向布局容器)、Scroll(可滾動的容器組件)、Swiper(滑動容器)、Tabs(一種可以通過頁簽進行內容視圖切換的容器組件)、TabContent(對應一個切換頁簽的內容視圖)。

效果圖

歡迎頁面線性漸變角度添加了漸變徑向漸變

【木棉花】基于ArkUI的漸變色盤——容器組件的學習分享(上)-鴻蒙HarmonyOS技術社區【木棉花】基于ArkUI的漸變色盤——容器組件的學習分享(上)-鴻蒙HarmonyOS技術社區【木棉花】基于ArkUI的漸變色盤——容器組件的學習分享(上)-鴻蒙HarmonyOS技術社區【木棉花】基于ArkUI的漸變色盤——容器組件的學習分享(上)-鴻蒙HarmonyOS技術社區

代碼文件結構

【木棉花】基于ArkUI的漸變色盤——容器組件的學習分享(上)-鴻蒙HarmonyOS技術社區

正文

一、創建一個空白工程

1. 安裝和配置DevEco Studio 3.0

DevEco Studio 3.0下載

DevEco Studio 3.0安裝

2. 創建一個Empty eTS Ability應用

DevEco Studio下載安裝成功后,打開DevEco Studio,點擊左上角的File,點擊New,再選擇New Project,選擇Empty Ability選項,點擊Next按鈕。

【木棉花】基于ArkUI的漸變色盤——容器組件的學習分享(上)-鴻蒙HarmonyOS技術社區

將文件命名為GradientRamp(文件名不能出現中文或者特殊字符,否則將無法成功創建項目文件),Project Type勾選Application,選擇保存路徑,Language勾選eTS,選擇API7,設備勾選Phone,最后點擊Finish按鈕。

【木棉花】基于ArkUI的漸變色盤——容器組件的學習分享(上)-鴻蒙HarmonyOS技術社區

3. 準備工作

在entry>src>main>config.json文件中最下方"launchType": "standard"的后面添加以下代碼,這樣就可以實現去掉應用上方的標簽欄了。

config.json最下方部分代碼:

  1. "metaData": { 
  2.       "customizeData": [ 
  3.         { 
  4.           "name""hwc-theme"
  5.           "value""androidhwext:style/Theme.Emui.Light.NoTitleBar"
  6.           "extra""" 
  7.         } 
  8.       ] 
  9.     } 

二、 歡迎頁面

1. 添加背景

Column(沿垂直方向布局的容器)、Flex(彈性布局組件)、Row(沿水平方向布局容器)是最常見的三種容器組件,所以直接說明。

Flex

Flex:彈性布局組件

參數:

direction:非必填,子組件在Flex容器上排列的方向,即主軸的方向

  • FlexDirection.Row:主軸與行方向一致作為布局模式(默認)
  • FlexDirection.Row:與Row方向相反方向進行布局
  • FlexDirection.RowReverse:主軸與列方向一致作為布局模式
  • FlexDirection.ColumnReverse:與Column相反方向進行布局

wrap:非必填,Flex容器是單行/列還是多行/列排列

  • FlexWrap.NoWrap:Flex容器的元素單行/列布局,子項允許超出容器(默認)
  • FlexWrap.Wrap:Flex容器的元素多行/列排布,子項允許超出容器
  • FlexWrap.WrapReverse:Flex容器的元素反向多行/列排布,子項允許超出容器

justifyContent:非必填,子組件在Flex容器上排列的方向,即主軸的方向子組件在Flex容器主軸上的對齊格式

  • FlexAlign.Start:元素在主軸方向首端對齊, 第一個元素與行首對齊,同時后續的元素與前一個對齊(默認)
  • FlexAlign.Center:元素在主軸方向中心對齊,第一個元素與行首的距離與最后一個元素與行尾距離相同
  • FlexAlign.End:元素在主軸方向尾部對齊, 最后一個元素與行尾對齊,其他元素與后一個對齊
  • FlexAlign.SpaceBetween:Flex主軸方向均勻分配彈性元素,相鄰元素之間距離相同。 第一個元素與行首對齊,最后一個元素與行尾對齊
  • FlexAlign.SpaceAround:Flex主軸方向均勻分配彈性元素,相鄰元素之間距離相同。 第一個元素到行首的距離和最后一個元素到行尾的距離時相鄰元素之間距離的一半
  • FlexAlign.SpaceEvenly:Flex主軸方向元素等間距布局, 相鄰元素之間的間距、第一個元素與行首的間距、最后一個元素到行尾的間距都完全一樣

alignItems:非必填,子組件在Flex容器交叉軸上的對齊格式

  • ItemAlign.Auto:使用Flex容器中默認配置
  • ItemAlign.Start:元素在Flex容器中,交叉軸方向首部對齊
  • ItemAlign.Center:元素在Flex容器中,交叉軸方向居中對齊
  • ItemAlign.End:元素在Flex容器中,交叉軸方向底部對齊
  • ItemAlign.Stretch:元素在Flex容器中,交叉軸方向拉伸填充,在未設置尺寸時,拉伸到容器尺寸(默認)
  • ItemAlign.Baseline:元素在Flex容器中,交叉軸方向文本基線對齊

alignContent:非必填,交叉軸中有額外的空間時,多行內容的對齊方式。僅在wrap為Wrap或WrapReverse下生效

  • FlexAlign.Start:元素在主軸方向首端對齊, 第一個元素與行首對齊,同時后續的元素與前一個對齊(默認)
  • FlexAlign.Center:元素在主軸方向中心對齊,第一個元素與行首的距離與最后一個元素與行尾距離相同
  • FlexAlign.End:元素在主軸方向尾部對齊, 最后一個元素與行尾對齊,其他元素與后一個對齊
  • FlexAlign.SpaceBetween:Flex主軸方向均勻分配彈性元素,相鄰元素之間距離相同。 第一個元素與行首對齊,最后一個元素與行尾對齊
  • FlexAlign.SpaceAround:Flex主軸方向均勻分配彈性元素,相鄰元素之間距離相同。 第一個元素到行首的距離和最后一個元素到行尾的距離時相鄰元素之間距離的一半
  • FlexAlign.SpaceEvenly:Flex主軸方向元素等間距布局, 相鄰元素之間的間距、第一個元素與行首的間距、最后一個元素到行尾的間距都完全一樣

Column

Column:沿垂直方向布局的容器

參數:

space:非必填,縱向布局元素間距,參數類型為Length,即直接填數字

屬性:

alignItems:設置子組件在水平方向上的對齊格式

  • HorizontalAlign.Start:按照語言方向起始端對齊
  • HorizontalAlign.Center:居中對齊,默認對齊方式(默認)
  • HorizontalAlign.End:按照語言方向末端對齊

Row

Row:沿水平方向布局容器

參數:

space:非必填,橫向布局元素間距,參數類型為Length,即直接填數字

屬性:

alignItems:在垂直方向上子組件的對齊格式

  • VerticalAlign.Top:頂部對齊
  • VerticalAlign.Center:居中對齊,默認對齊方式(默認)
  • VerticalAlign.Bottom:底部對齊

在index.ets文件中,通過Text(‘漸變色盤’)和Text(‘一個懂你的調色盤’)可放置文字內容。

屬性linearGradient為設置線性漸變顏色,linearGradient中的angle為漸變角度,設置為180,即為從上往下漸變,colors則為漸變的顏色。

要值得說明的是,如果文本屬性添加了fontFamily(‘華文行楷’)的話,在預覽器是能看到效果的,但在遠程模擬器是看不到效果的,因為遠程模擬器內是沒有這個字體的。

index.ets:

  1. @Entry 
  2. @Component 
  3. struct Index { 
  4.   build() { 
  5.     Flex({ justifyContent: FlexAlign.Center, alignItems: ItemAlign.Center, direction: FlexDirection.Column }) { 
  6.       Column(){ 
  7.         Text('漸變色盤'
  8.           .fontColor('#cf6cc9'
  9.           .fontSize(60) 
  10.           .fontStyle(FontStyle.Italic) 
  11.           .fontWeight(700) 
  12.           .fontFamily('華文行楷'
  13.           .textAlign(TextAlign.Center) 
  14.         Text('一個懂你的調色盤'
  15.           .fontColor('#ee609c'
  16.           .fontSize(40) 
  17.           .fontStyle(FontStyle.Italic) 
  18.           .fontWeight(600) 
  19.           .fontFamily('華文行楷'
  20.           .textAlign(TextAlign.Center) 
  21.           .margin({ top: -5 }) 
  22.       }    
  23.     } 
  24.     .width('100%'
  25.     .height('100%'
  26.     .linearGradient({ 
  27.       angle: 120, 
  28.       colors: [['#d9ded8', 0], ["#ebc0fd", 1]] 
  29.     }) 
  30.   } 

2. 添加動畫效果

這里使用的動畫效果是通過animateTo顯式動畫實現的。animateTo顯式動畫可以設置組件從狀態A到狀態B的變化動畫效果,包括樣式、位置信息和節點的增加刪除等,開發者無需關注變化過程,只需指定起點和終點的狀態。animateTo還提供播放狀態的回調接口,是對屬性動畫的增強與封裝。

添加狀態變量opacityValue和scaleValue并初始化為0,分別用于表示透明度和放縮的倍數,動畫效果中實現這兩個數值從0到1,即可實現Logo的漸出和放大效果。

定義一個貝塞爾曲線cubicBezier,Curves.cubicBezier(0.1, 0.2, 1, 1)。由于需要使用到動畫能力接口中的插值計算,故需要導入curves模塊。@ohos.curves模塊提供了線性Curve. Linear、階梯step、三階貝塞爾(cubicBezier)和彈簧(spring)插值曲線的初始化函數,可以根據入參創建一個插值曲線對象。

在animateTo顯式動畫中,設置動畫時長(duration)為2s,延時(delay)0.1s開始播放,設置顯示動效event的閉包函數(curve),即起點狀態到終點狀態為透明度opacityValue和大小scaleValue從0到1。

index.ets:

  1. @Entry 
  2. @Component 
  3. struct Index { 
  4.   @State private opacityValue: number = 0 
  5.   @State private scaleValue: number = 0 
  6.   private curve1 = Curves.cubicBezier(0.1, 0.2, 1, 1) 
  7.  
  8.   build() { 
  9.     Flex({ justifyContent: FlexAlign.Center, alignItems: ItemAlign.Center, direction: FlexDirection.Column }) { 
  10.       Column(){ 
  11.         Text('漸變色盤'
  12.           .fontColor('#cf6cc9'
  13.           .fontSize(60) 
  14.           .fontStyle(FontStyle.Italic) 
  15.           .fontWeight(700) 
  16.           .fontFamily('華文行楷'
  17.           .textAlign(TextAlign.Center) 
  18.         Text('一個懂你的調色盤'
  19.           .fontColor('#ee609c'
  20.           .fontSize(40) 
  21.           .fontStyle(FontStyle.Italic) 
  22.           .fontWeight(600) 
  23.           .fontFamily('華文行楷'
  24.           .textAlign(TextAlign.Center) 
  25.           .margin({ top: -5 }) 
  26.       } 
  27.       .scale({ x: this.scaleValue, y: this.scaleValue }) 
  28.       .opacity(this.opacityValue) 
  29.       .onAppear(() => { 
  30.         animateTo({ 
  31.           duration: 2000, 
  32.           curve: this.curve1, 
  33.           delay: 100, 
  34.         }, () => { 
  35.           this.opacityValue = 1 
  36.           this.scaleValue = 1 
  37.         }) 
  38.       }) 
  39.     } 
  40.     .width('100%'
  41.     .height('100%'
  42.     .linearGradient({ 
  43.       angle: 120, 
  44.       colors: [['#d9ded8', 0], ["#ebc0fd", 1]] 
  45.     }) 
  46.   } 

3. 添加動畫結束跳轉效果

先創建一個main.ets文件。

在animateTo顯示動畫播放結束的onFinish回調接口中,調用定時器Timer的setTimeout接口延時1.5s后,調用router.replace,顯示mainpage.ets頁面,其中需要導入router模塊。

index.ets:

  1. // @ts-nocheck 
  2. import router from '@system.router' 
  3. import Curves from '@ohos.curves' 
  4.  
  5. @Entry 
  6. @Component 
  7. struct Index { 
  8.   @State private opacityValue: number = 0 
  9.   @State private scaleValue: number = 0 
  10.   private curve1 = Curves.cubicBezier(0.1, 0.2, 1, 1) 
  11.  
  12.   build() { 
  13.     Flex({ justifyContent: FlexAlign.Center, alignItems: ItemAlign.Center, direction: FlexDirection.Column }) { 
  14.       Column(){ 
  15.         Text('漸變色盤'
  16.           .fontColor('#cf6cc9'
  17.           .fontSize(60) 
  18.           .fontStyle(FontStyle.Italic) 
  19.           .fontWeight(700) 
  20.           .fontFamily('華文行楷'
  21.           .textAlign(TextAlign.Center) 
  22.         Text('一個懂你的調色盤'
  23.           .fontColor('#ee609c'
  24.           .fontSize(40) 
  25.           .fontStyle(FontStyle.Italic) 
  26.           .fontWeight(600) 
  27.           .fontFamily('華文行楷'
  28.           .textAlign(TextAlign.Center) 
  29.           .margin({ top: -5 }) 
  30.       } 
  31.       .scale({ x: this.scaleValue, y: this.scaleValue }) 
  32.       .opacity(this.opacityValue) 
  33.       .onAppear(() => { 
  34.         animateTo({ 
  35.           duration: 2000, 
  36.           curve: this.curve1, 
  37.           delay: 100, 
  38.           onFinish: () => { 
  39.             setTimeout(() => { 
  40.               router.replace({ uri: "pages/main" }) 
  41.             }, 1500); 
  42.           } 
  43.         }, () => { 
  44.           this.opacityValue = 1 
  45.           this.scaleValue = 1 
  46.         }) 
  47.       }) 
  48.     } 
  49.     .width('100%'
  50.     .height('100%'
  51.     .linearGradient({ 
  52.       angle: 120, 
  53.       colors: [['#d9ded8', 0], ["#ebc0fd", 1]] 
  54.     }) 
  55.   } 

三、主頁面

1. 添加背景

主頁面的背景和歡迎頁面的背景幾乎一樣,這里就不重復啰嗦了。

mainp.ets:

  1. @Entry 
  2. @Component 
  3. struct Main { 
  4.   private swiperController: SwiperController = new SwiperController() 
  5.   build() { 
  6.     Flex({ justifyContent: FlexAlign.Center, alignItems: ItemAlign.Center, direction: FlexDirection.Column }) { 
  7.     } 
  8.     .width('100%'
  9.     .height('100%'
  10.     .linearGradient({ 
  11.       angle: 120, 
  12.       colors: [['#d9ded8', 0], ["#ebc0fd", 1]] 
  13.     }) 
  14.   } 
  15.  

2. 添加按鈕

Navigator

Navigator:路由容器組件,提供路由跳轉能力

參數:

target:必填,指定跳轉目標頁面的路徑,參數類型為string,即直接填頁面路徑

type:非必填,指定路由方式

  • NavigationType.Push:跳轉到應用內的指定頁面(默認)
  • NavigationType.Replace:用應用內的某個頁面替換當前頁面,并銷毀被替換的頁面
  • NavigationType.Back:返回上一頁面或指定的頁面

屬性:

  • active:當前路由組件是否處于激活狀態,處于激活狀態時,會生效相應的路由操作,參數類型為boolean,即true或false
  • params:跳轉時要同時傳遞到目標頁面的數據,可在目標頁面使用router.getParams()獲得

從效果圖可以看出按鈕的樣式是一致的,因此我們可以使用裝飾器@Component自定義按鈕。通過Navigator容器組件為按鈕Button添加路由功能。變量str記錄按鈕文本,變量str記錄頁面路徑,添加狀態變量active初始化為false,在按鈕的點擊事件中對狀態變量active賦值為true,這樣就能當點擊按鈕時,使Navigator處于激活狀態時,生效相應的路由操作。

mainp.ets:

  1. //import router from '@system.router' 
  2.  
  3. @Entry 
  4. @Component 
  5. struct Main { 
  6.   private swiperController: SwiperController = new SwiperController() 
  7.   build() { 
  8.     Flex({ justifyContent: FlexAlign.Center, alignItems: ItemAlign.Center, direction: FlexDirection.Column }) { 
  9.       setButton({ str: '線性漸變', uri: 'pages/LinearGradient' }) 
  10.       setButton({ str: '角度漸變', uri: 'pages/SweepGradient' }) 
  11.       setButton({ str: '徑向漸變', uri: 'pages/RadialGradient' }) 
  12.     } 
  13.     .width('100%'
  14.     .height('100%'
  15.     .linearGradient({ 
  16.       angle: 120, 
  17.       colors: [['#d9ded8', 0], ["#ebc0fd", 1]] 
  18.     }) 
  19.   } 
  20.  
  21. @Component 
  22. struct setButton{ 
  23.   @State active: boolean = false 
  24.   private str: string 
  25.   private uri: string 
  26.  
  27.   build(){ 
  28.     Navigator({ target: this.uri, type: NavigationType.Push }){ 
  29.       Button({ type: ButtonType.Normal, stateEffect: true }){ 
  30.         Text(this.str) 
  31.           .fontFamily('方正舒體'
  32.           .fontSize(40) 
  33.           .fontWeight(800) 
  34.           .fontColor('#FDEB82'
  35.       } 
  36.       .width(170) 
  37.       .height(80) 
  38.       .borderRadius(10) 
  39.       .borderColor('#A168FE'
  40.       .borderWidth(2) 
  41.       .backgroundColor('#DEB0DF'
  42.       .onClick(() => { 
  43.         this.active = true 
  44.       }) 
  45.     } 
  46.     .margin(10) 
  47.     .active(this.active) 
  48.   } 
  49.  
  50. //通過router添加路由功能 
  51. /*@Component 
  52. struct setButton{ 
  53.   private str: string 
  54.   private uri: string 
  55.  
  56.   build(){ 
  57.     Button({ type: ButtonType.Normal, stateEffect: true }){ 
  58.       Text(this.str) 
  59.         .fontFamily('方正舒體'
  60.         .fontSize(40) 
  61.         .fontWeight(800) 
  62.         .fontColor('#FDEB82'
  63.     } 
  64.     .width(170) 
  65.     .height(80) 
  66.     .borderRadius(10) 
  67.     .borderColor('#A168FE'
  68.     .borderWidth(2) 
  69.     .backgroundColor('#DEB0DF'
  70.     .margin(10).onClick(() => { 
  71.       router.push({ uri: this.uri }) 
  72.     }) 
  73.   } 
  74. }*/ 

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

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

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

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

https://harmonyos.51cto.com

 

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

2021-12-10 15:05:41

鴻蒙HarmonyOS應用

2021-12-10 15:04:24

鴻蒙HarmonyOS應用

2024-01-16 08:22:42

Gradient線性梯度

2024-01-29 08:57:06

CSS漸變色前端

2023-05-06 07:23:57

2024-07-31 20:38:18

2022-07-04 16:34:46

流光按鈕Stack

2022-10-24 14:49:54

ArkUI心電圖組件

2021-12-01 15:38:33

鴻蒙HarmonyOS應用

2015-07-22 15:19:46

Docker云計算微服務

2022-07-26 14:40:42

ArkUIJS

2022-10-17 14:36:09

ArkUI虛擬搖桿組件

2023-04-02 10:06:24

組件vue3sign2.

2022-10-19 15:12:05

ArkUI鴻蒙

2018-07-25 17:27:47

華為

2022-09-15 15:04:16

ArkUI鴻蒙

2022-03-10 14:57:35

ArkUIets項目開發鴻蒙

2012-05-31 10:57:06

HTML5

2011-04-22 10:13:35

SimpleFrame

2022-02-17 14:51:39

HarmonyOSJSPAI開發canvas畫布
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩成人免费 | 黄色片在线观看网址 | av永久 | 亚洲精品久久久久avwww潮水 | 黄色在线免费观看 | 欧美高清视频 | 久久久久网站 | 狠狠躁天天躁夜夜躁婷婷老牛影视 | 久久亚洲视频网 | 亚洲国产免费 | 91在线视频免费观看 | 国产精品久久久久久 | 91精品久久久久久久久中文字幕 | 中文字幕在线一区 | 浴室洗澡偷拍一区二区 | 黄色av网站免费看 | 男女视频在线免费观看 | 日韩影院在线观看 | 日本在线小视频 | 亚洲成人一区二区 | 欧美激情一区 | 欧美视频福利 | 国产 亚洲 网红 主播 | 69电影网| 亚洲高清在线 | 中文字幕一区二区三区四区五区 | 国产一区二区三区高清 | 亚洲日韩中文字幕一区 | 亚洲精品乱码久久久久久蜜桃91 | 国产一区二区三区四区五区加勒比 | 久久久久亚洲精品 | 欧美日韩国产一区 | 国产精品福利在线 | 久久这里只有精品首页 | 国产成人精品午夜 | 五月免费视频 | 成人午夜免费网站 | 久久综合av| 一级a性色生活片久久毛片 一级特黄a大片 | 蜜臀91视频| 日韩美女在线看免费观看 |