自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

嘗試用 ArkUI 做一個(gè)相冊(cè)應(yīng)用

開(kāi)發(fā)
新的編譯框架基于TS,相比于之前的JS代碼更簡(jiǎn)潔,將原來(lái)的js、hml、css合并為了*.ets一個(gè)文件,而且更接近自然語(yǔ)義,學(xué)習(xí)成本很低。

[[440827]]

想了解更多內(nèi)容,請(qǐng)?jiān)L問(wèn):

51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)

https://harmonyos.51cto.com

前言

今年的HDC華為開(kāi)發(fā)者大會(huì)2021,華為又雙叒推出新的聲明式UI開(kāi)發(fā)框架(ArkUI),咋說(shuō)呢,學(xué)無(wú)止境啊,更新速度堪比坐火箭。雖然沒(méi)能到發(fā)布的現(xiàn)場(chǎng)比較遺憾,但是這并不妨礙我們擼代碼的熱情。我也是第一時(shí)間更新IDE,使用新的開(kāi)發(fā)框架嘗試開(kāi)發(fā)一款圖庫(kù)應(yīng)用。先看效果:

嘗試用 ArkUI 做一個(gè)相冊(cè)應(yīng)用-鴻蒙HarmonyOS技術(shù)社區(qū)

一、基本語(yǔ)法

新的編譯框架基于TS,相比于之前的JS代碼更簡(jiǎn)潔,將原來(lái)的js、hml、css合并為了*.ets一個(gè)文件,而且更接近自然語(yǔ)義,學(xué)習(xí)成本很低。基本是下面的寫法:

  1. @裝飾器 
  2. struct 組件名 { 
  3.     build(){  
  4.         //一個(gè)根容器組件,比如: 
  5.         Flex (接口){ 
  6.             //內(nèi)容 
  7.         }.屬性 
  8.          
  9.         Tabs (接口){ 
  10.             TabContent(接口) { 
  11.                 //內(nèi)容 
  12.             } 
  13.         }.屬性 
  14.          
  15.         List (接口){ 
  16.             ListItem(接口) { 
  17.                 //內(nèi)容 
  18.             } 
  19.         }.屬性 
  20.     } 

 詳細(xì)的內(nèi)容可以參考官方文檔:https://developer.harmonyos.com/cn/docs/documentation/doc-references/ts-general-ui-concepts-0000001215268053

目前支持的裝飾器:

二、實(shí)現(xiàn)一個(gè)菜單欄

嘗試用 ArkUI 做一個(gè)相冊(cè)應(yīng)用-鴻蒙HarmonyOS技術(shù)社區(qū)
嘗試用 ArkUI 做一個(gè)相冊(cè)應(yīng)用-鴻蒙HarmonyOS技術(shù)社區(qū)

上面2個(gè)圖片使用了兩種不同的實(shí)現(xiàn)方式,第一種使用的是Tabs + TabContent,現(xiàn)成的組件實(shí)現(xiàn)也比較簡(jiǎn)單,代碼如下:

  1. Tabs( 
  2.     { barPosition: BarPosition.End } //指定頁(yè)簽位置 
  3. ) { 
  4.     TabContent() { 
  5.         Photo() //要實(shí)現(xiàn)的內(nèi)容 
  6.     }.tabBar({ 
  7.         icon: this.menuData[0].url, 
  8.         text: this.menuData[0].text 
  9.     }) 
  10.         ... ... 

 不過(guò)也有點(diǎn)問(wèn)題。第一個(gè)就是圖一中的icon和text有點(diǎn)小,想把尺寸調(diào)大卻發(fā)現(xiàn)各種不支持,只能是這樣默認(rèn)大小,不知道是不是我設(shè)置有問(wèn)題,有知道怎么操作的大佬歡迎留言指點(diǎn)迷津。第二個(gè)問(wèn)題,按理說(shuō)TabContent內(nèi)容是一樣的,可以使用ForEach+數(shù)組,但是也沒(méi)有成功。最終Tabs實(shí)現(xiàn)的效果著實(shí)讓人不太滿意,所以我使用了Flex基本布局 + ForEach 重新實(shí)現(xiàn)了圖二中的效果,代碼如下:

  1. Flex({ 
  2.     direction: FlexDirection.Row, // 主軸:橫向布局 
  3.     alignItems: ItemAlign.Center, // 主軸: 
  4.     justifyContent: FlexAlign.SpaceEvenly 
  5. }) { 
  6.     ForEach(this.menuData, (item) => { 
  7.         Column() { //列方向布局容器 
  8.             this.MenuItem(item.url, item.text) 
  9.         } 
  10.         .onClick(() => { 
  11.             console.info("memememe"
  12.         }) 
  13.     }) 

 源數(shù)據(jù):

  1. //State:數(shù)據(jù)變化觸發(fā)build(),實(shí)現(xiàn)UI更新 
  2. @State menuData: Array<any> = [ 
  3.     { url: $r("app.media.0"), text: "照片" }, 
  4.     { url: $r("app.media.1blue"), text: "相冊(cè)" }, 
  5.     { url: $r("app.media.2"), text: "時(shí)刻" }, 
  6.     { url: $r("app.media.3"), text: "發(fā)現(xiàn)" } 

 菜單項(xiàng):

  1. @Builder MenuItem(url, text) { 
  2.     Column() { 
  3.         Image(url) 
  4.             .objectFit(ImageFit.Contain) // 保持長(zhǎng)寬比縮小或放大,以便圖像完全顯示在顯示邊界內(nèi)。 
  5.             .width('60%').height('60%'
  6.             Text(text) 
  7.             .fontSize(14) 
  8.     } 

 總體來(lái)看Flex + ForEach效果的實(shí)現(xiàn)更自由一些,但是點(diǎn)擊交互切換標(biāo)簽等操作都需要手動(dòng)實(shí)現(xiàn),不如組件化的Tabs方便,或許以后會(huì)支持把。

三、實(shí)現(xiàn)照片區(qū)域

首先照片區(qū)域使用了下面的數(shù)據(jù)格式:

  1. @State photoData: Array<any> = [ 
  2.   { 
  3.     date"昨天"
  4.     photos: [{ src: $r("app.media.today1") }, { src: $r("app.media.today2") }, { src: $r("app.media.today3") }] 
  5.   }, 
  6.   { 
  7.     date"2021年10月27日"
  8.     photos: [{ src: $r("app.media.today4") }, { src: $r("app.media.today5") }, { src: $r("app.media.today6") }, { 
  9.       src: $r("app.media.today7"
  10.     }] 
  11.   }, 
  12.   { 
  13.     date"2021年10月26日"
  14.     photos: [{ src: $r("app.media.today8") }] 
  15.   }, 
  16.   { 
  17.     date"2021年10月25日"
  18.     photos: [{ src: $r("app.media.today9") },{ src: $r("app.media.today11") }] 
  19.   }, 
  20.   { 
  21.     date"2021年10月24日"
  22.     photos: [{ src: $r("app.media.today10") }] 
  23.   } 
  24.   , 
  25.   { 
  26.     date"2021年10月23日"
  27.     photos: [{ src: $r("app.media.today1") }] 
  28.   } 

所以可以使用ForEach循環(huán)嵌套的方式,只需要簡(jiǎn)單的代碼,就可以實(shí)現(xiàn)照片列表的效果。

  1. // 照片區(qū) 
  2. List() { 
  3.     ForEach(this.photoData, (item) => { 
  4.         ListItem() { 
  5.             Flex({ direction: FlexDirection.Column }) { 
  6.                 Text(item.date).fontSize(18).margin({ top: 20,left:15,bottom:5 }) 
  7.                 Flex({ direction: FlexDirection.Row }) { 
  8.                     ForEach(item.photos, (item) => { 
  9.                         Image(item.src).objectFit(ImageFit.Cover).width(80).height(80).margin({right:2}) 
  10.                     }) 
  11.                 } 
  12.             } 
  13.         } 
  14.     }) 

代碼打包上傳了,感興趣的小伙伴,可以下載源碼查看。時(shí)間有限,先體驗(yàn)這么多,有新的心得再來(lái)發(fā)帖和大家交流。

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

想了解更多內(nèi)容,請(qǐng)?jiān)L問(wèn):

51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)

https://harmonyos.51cto.com

 

責(zé)任編輯:jianghua 來(lái)源: 鴻蒙社區(qū)
相關(guān)推薦

2016-11-23 18:13:44

javascriptrxjsreactivex

2011-07-12 10:06:19

Rails

2009-04-12 08:52:52

Symbian諾基亞移動(dòng)OS

2021-02-20 21:04:53

人工智能機(jī)器學(xué)習(xí)技術(shù)

2012-04-10 16:26:46

2015-07-03 11:27:30

程序員自己神器

2023-04-11 09:12:31

北向應(yīng)用開(kāi)發(fā)鴻蒙

2017-10-18 15:28:08

Service WorPWA離線

2017-06-30 15:18:24

對(duì)賬系統(tǒng)互聯(lián)網(wǎng)

2012-12-17 12:58:18

WebjQuery重構(gòu)

2022-12-22 19:22:55

應(yīng)用開(kāi)發(fā)鴻蒙

2018-01-04 16:04:35

圓環(huán)放大動(dòng)畫

2011-02-28 09:22:47

SQLite記賬簿

2014-04-29 10:50:16

池建強(qiáng)

2019-04-22 10:25:52

程序員技術(shù)職場(chǎng)

2020-07-20 10:00:52

Python翻譯工具命令行

2021-12-01 07:02:55

Python 記錄器按鍵

2022-05-07 15:44:45

eTS 開(kāi)發(fā)鴻蒙

2021-12-19 22:00:31

APP軟件開(kāi)發(fā)開(kāi)發(fā)

2014-07-22 10:00:18

程序員
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)