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

HarmonyOS ArkUI之仿微信朋友圈圖片預(yù)覽

開發(fā) OpenHarmony
本項(xiàng)目就是基于ArkUI中的聲明式編程開發(fā),語言ETS(Extended Type Script),代碼都在ets文件中編寫,這個(gè)文件用于描述 UI 布局、樣式、事件交互和頁面邏輯。

[[435288]]

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

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

https://harmonyos.51cto.com

前言

新世界的大門已打開,關(guān)也關(guān)不住!

《華為開發(fā)者大會(huì)2021》推出了方舟開發(fā)框l架(ArkUI),官方解釋:方舟開發(fā)框架是一種跨設(shè)備的高性能UI開發(fā)框架,支持聲明式編程和跨設(shè)備多態(tài)UI。

本項(xiàng)目就是基于ArkUI中的聲明式編程開發(fā),語言ETS(Extended Type Script),代碼都在ets文件中編寫,這個(gè)文件用于描述 UI 布局、樣式、事件交互和頁面邏輯。

官方文檔地址:基于TS擴(kuò)展的聲明式開發(fā)范式1 基于TS擴(kuò)展的聲明式開發(fā)范式2

本文介紹仿微信朋友圈實(shí)現(xiàn)列表展示,九宮格小圖圖片展示,點(diǎn)擊圖片進(jìn)行圖片預(yù)覽,圖片左右滑動(dòng)切換。

效果演示

項(xiàng)目類說明

主要知識(shí)點(diǎn)

九宮格列表和選擇圖片列表:網(wǎng)格容器組件(Grid)

瀏覽大圖切換頁面:滑動(dòng)容器組件(Swiper)

循環(huán)渲染迭代數(shù)組:渲染組件(ForEach) (目前第二個(gè)參數(shù)中 itemGenerator: (item: any, index?: number) => void index不能使用)

基礎(chǔ)的組件:圖片顯示(Image) 文本顯示(Text) 按鈕(Button)

布局容器組件:沿垂直方向布局的容器(Column),沿水平方向布局容器(Row),堆疊容器(Stack)

代碼解析

1、朋友圈列表展示

列表使用List組件實(shí)現(xiàn)多數(shù)據(jù)列表展示(核心代碼實(shí)例)。

  1. List({ initialIndex: 0 }) { 
  2.    ForEach(this.listItems, item => { 
  3.      ListItem() { 
  4.        Row() { 
  5.          Column() { 
  6.            Image(item.bigImg) 
  7.              .width(50) 
  8.              .height(50) 
  9.              .borderRadius(30) 
  10.              .margin(5) 
  11.              .onClick(() => { 
  12.              }) 
  13.  
  14.            Blank() 
  15.          }.height("100%"
  16.  
  17.          Column() { 
  18.            Text(item.name
  19.              .fontSize(16) 
  20.              .margin({ left: 0}) 
  21.              .width("100%"
  22.  
  23.            Row() { 
  24.              Text(item.content) 
  25.                .fontSize(14) 
  26.                .margin({ top: 10 }) 
  27.                .fontColor(Color.Grey) 
  28.                .width("80%"
  29.                .textAlign(TextAlign.Start) 
  30.  
  31.              Blank() 
  32.            } 
  33.  
  34.            Column() { 
  35.              Grid() { 
  36.                ForEach(this.imageDataArray, item => { 
  37.                  GridItem() { 
  38.                    Image(item.smallImg).width(50).height(50) 
  39.  
  40.                  }.sharedTransition("0", { duration: 100, curve: Curve.Linear }) 
  41.                  .onClick(()=>{ 
  42.                    console.log("item.id==="+item.id) 
  43.                    router.push({ 
  44.                      uri: 'pages/imageflige'
  45.                      params: { 
  46.                        imageIndex: item.id, // 當(dāng)前圖片位置 
  47.                      } 
  48.                    }) 
  49.                  }) 
  50.                }, item => item.name
  51.              } 
  52.              .width(155) 
  53.              .columnsTemplate('1fr 1fr 1fr'
  54.              .rowsGap(2) 
  55.              .columnsGap(2) 
  56.            } 
  57.            .width('100%'
  58.            .height(200) 
  59.            .alignItems(HorizontalAlign.Start) 
  60.            .margin({ top: 10 }) 
  61.          }.height("100%"
  62.        } 
  63.        .height("100%"
  64.      } 
  65.      .height(250) 
  66.      .margin({ top: 10 }) 
  67.    }, item => item.name
  68.  } 

2、九宮格展示

主要是網(wǎng)格容器Grid組件和渲染組件ForEach(核心代碼示例)。

  1. Column() { 
  2.     Grid() { 
  3.       ForEach(this.imageDataArray, item => { 
  4.         GridItem() { 
  5.           Image(item.smallImg).width(50).height(50) 
  6.    
  7.         }.sharedTransition("0", { duration: 100, curve: Curve.Linear }) 
  8.         .onClick(()=>{ 
  9.           console.log("item.id==="+item.id) 
  10.           router.push({ 
  11.             uri: 'pages/imageflige'
  12.             params: { 
  13.               imageIndex: item.id, // 當(dāng)前圖片位置 
  14.             } 
  15.           }) 
  16.         }) 
  17.       }, item => item.name
  18.     } 
  19.     .width(155) 
  20.     .columnsTemplate('1fr 1fr 1fr'
  21.     .rowsGap(2) 
  22.     .columnsGap(2) 
  23.   } 
  24.   .width('100%'
  25.   .height(200) 
  26.   .alignItems(HorizontalAlign.Start) 
  27.   .margin({ top: 10 }) 

3、大圖預(yù)覽

使用滑動(dòng)容器組件Swiper,通過傳遞點(diǎn)擊的當(dāng)前下標(biāo)定位到指定位置(核心代碼示例)。

  1. import router from '@system.router'
  2.  
  3. @Entry 
  4. @Component 
  5. struct Imageflige { 
  6.  @State private listPicture: Array<Resource> = [ 
  7.    $r("app.media.food1"), $r("app.media.food2"), $r("app.media.food3"), 
  8.    $r("app.media.food4"), $r("app.media.food5"), $r("app.media.food1"), 
  9.    $r("app.media.food2"), $r("app.media.food3"), $r("app.media.food4"
  10.  ] 
  11.  @State imageIndex: number = 0 
  12.  
  13.  build() { 
  14.    Column() { 
  15.      Stack({ alignContent: Alignment.Top }) { 
  16.        // 切換頁面 
  17.        Swiper() { 
  18.          ForEach(this.listPicture, item => { 
  19.            // 圖片 
  20.            Image(item) 
  21.              .width('100%'
  22.              .height('100%'
  23.              .objectFit(ImageFit.Contain) //縮放類型 
  24.  
  25.          }, item => item.toString()) 
  26.        } 
  27.        .width('100%'
  28.        .height('100%'
  29.        .index(this.imageIndex) // 設(shè)置當(dāng)前索引 
  30.        .indicator(true) // 不顯示指示器 
  31.        .loop(true) // 關(guān)閉循環(huán) 
  32.        .sharedTransition("0", { duration: 100, curve: Curve.Linear }) 
  33.        .onChange((index: number) => { // 索引變化監(jiān)聽 
  34.          // 更新索引值 
  35.          this.imageIndex = index 
  36.        }) 
  37.  
  38.        Image($r("app.media.back")) 
  39.          .width(35) 
  40.          .height(35) 
  41.          .margin(10) 
  42.          .backgroundColor(Color.White) 
  43.          .onClick(() => { 
  44.            router.back() 
  45.          }) 
  46.      } 
  47.      .height("100%"
  48.      .width("100%"
  49.      .alignContent(Alignment.TopStart) 
  50.    } 
  51.  } 
  52.  
  53.  private aboutToAppear() { 
  54.    this.imageIndex = router.getParams().imageIndex 
  55.  } 
  56. }    

評(píng)論功能有兩部分:評(píng)論列表和評(píng)論發(fā)送輸入框。

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

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

https://harmonyos.51cto.com

 

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

2015-09-01 16:55:42

微信朋友圈圖片

2021-11-04 09:55:50

鴻蒙HarmonyOS應(yīng)用

2021-11-23 10:00:55

鴻蒙HarmonyOS應(yīng)用

2013-11-06 14:25:30

微信朋友圈

2022-01-12 21:00:08

微信安卓騰訊

2021-05-31 08:23:47

應(yīng)用開發(fā)前端

2023-03-09 07:29:28

微信朋友圈架構(gòu)

2013-04-12 03:40:53

微信開放平臺(tái)朋友圈

2021-06-23 10:24:06

微信macOS移動(dòng)應(yīng)用

2013-12-06 16:39:56

2020-03-13 13:19:28

微信廣告隱私

2013-11-29 11:46:49

微信朋友圈朋友圈生意淘寶

2021-08-14 23:23:49

ios微信朋友圈

2022-01-27 07:40:27

iOS微信朋友圈

2019-12-24 13:00:03

微信朋友圈移動(dòng)應(yīng)用

2021-03-11 22:23:46

微信Mac版朋友圈

2021-03-31 06:05:08

微信朋友圈騰訊

2020-11-05 14:26:43

微信朋友圏7.0.18

2021-03-12 06:01:35

微信朋友圈騰訊

2020-11-09 09:03:51

微信
點(diǎn)贊
收藏

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