国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

HarmonyOS NEXT 網(wǎng)格元素交換案例

這篇具有很好參考價(jià)值的文章主要介紹了HarmonyOS NEXT 網(wǎng)格元素交換案例。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

網(wǎng)格元素交換案例

介紹

直接進(jìn)行交換和刪除元素會(huì)給用戶帶來(lái)不好的體驗(yàn)效果,因此需要在此過(guò)程中注入一些特色的動(dòng)畫(huà)來(lái)提升體驗(yàn)效果,本案例通過(guò)Grid組件、attributeModifier、以
及animateTo函數(shù)實(shí)現(xiàn)了拖拽動(dòng)畫(huà)和刪除動(dòng)畫(huà)。

效果圖預(yù)覽

HarmonyOS NEXT 網(wǎng)格元素交換案例,Harmony?OS,OpenHarmony,移動(dòng)開(kāi)發(fā),harmonyos,華為,Openharmony,鴻蒙開(kāi)發(fā),第三方庫(kù),物聯(lián)網(wǎng)

使用說(shuō)明

  1. 進(jìn)入頁(yè)面,點(diǎn)擊編輯,長(zhǎng)按網(wǎng)格元素,執(zhí)行拖拽操作,拖拽過(guò)程中顯示此網(wǎng)格元素,拖拽到一定的位置時(shí),會(huì)進(jìn)行網(wǎng)格元素的位置交換。
  2. 編輯模式下,點(diǎn)擊網(wǎng)格元素,此元素會(huì)被刪除。

實(shí)現(xiàn)思路

本示例主要通過(guò)attributeModifier、supportAnimation、animateTo等實(shí)現(xiàn)了刪除動(dòng)畫(huà)以及長(zhǎng)按拖拽動(dòng)畫(huà)。attributeModifier綁定自定義屬性對(duì)象,
控制每個(gè)網(wǎng)格元素的屬性更新。執(zhí)行刪除操作時(shí),通過(guò)animateTo去更新offset值以及opacity等屬性。supportAnimation設(shè)置為true,支持GridItem
拖拽動(dòng)畫(huà),在onItemDragStart開(kāi)始拖拽網(wǎng)格元素時(shí)觸發(fā),onItemDragStart可以返回一個(gè)@Builder修飾的自定義組件,這樣在拖拽的時(shí)候,
能夠顯示目標(biāo)元素。onItemDrop在網(wǎng)格元素內(nèi)停止拖拽時(shí)觸發(fā)。此時(shí)執(zhí)行元素位置的切換功能。

  1. 聲明一個(gè)數(shù)組,添加自定義屬性對(duì)象,每個(gè)自定義屬性對(duì)象對(duì)應(yīng)一個(gè)網(wǎng)格元素,源碼參考AttributeModifier.ets和GridItemDeletionCtrl.ets。
 constructor(data: T[]) {
   this.gridData = data;
   data.forEach(() => {
     this.modifier.push(new GridItemModifier());
   })
 }
 /**
 * 聲明GridItem動(dòng)態(tài)屬性
 */
@Observed
export class GridItemModifier implements AttributeModifier<GridItemAttribute> {
  public offsetX: number = 0;
  public offsetY: number = 0;
  public opacity: number = 1;

  /**
   * 定義組件普通狀態(tài)時(shí)的樣式
   * @param instance
   */
  applyNormalAttribute(instance: GridItemAttribute): void {
    instance.translate({ x: this.offsetX, y: this.offsetY });
    instance.opacity(this.opacity);
  }
}
  1. 綁定attributeModifier屬性,attributeModifier屬性的值為對(duì)應(yīng)的自定義屬性對(duì)象。源碼參考GridExchange.ets。
 GridItem() {
   IconWithNameView({ app: item })
 }
 .onAreaChange((oldValue: Area, newValue: Area) => {
   this.itemAreaWidth = Number(newValue.width);
 })
 .onTouch((event: TouchEvent) => {
   if (event.type === TouchType.Down) {
     this.movedItem = this.appInfoList[index];
   }
 })
 // TODO:知識(shí)點(diǎn):動(dòng)態(tài)綁定屬性信息
 .attributeModifier(this.GridItemDeletion.getModifier(item) ? this.GridItemDeletion.getModifier(item) : undefined)
  1. 編輯模式下點(diǎn)擊網(wǎng)格元素,執(zhí)行刪除操作,刪除過(guò)程中使用animateTo來(lái)更新元素的偏移量并實(shí)現(xiàn)動(dòng)畫(huà)效果。源碼參考GridItemDeletionCtrl.ets。
 deleteGridItem(item: T, itemAreaWidth: number): void {
   const index: number = this.gridData.indexOf(item);
   // 最后一條數(shù)據(jù)不執(zhí)行偏移
   if (index === this.gridData.length - 1) {
     this.gridData.splice(index, 1);
     this.modifier.splice(index, 1);
     return;
   }
   // TODO:知識(shí)點(diǎn):實(shí)現(xiàn)刪除動(dòng)畫(huà)。先讓目標(biāo)元素的opacity為0,不可視,直接刪除目標(biāo)元素會(huì)導(dǎo)致偏移的時(shí)候位置異常,接著遍歷元素的屬性對(duì)象,修改偏移量。
   this.modifier[index].opacity = 0;
   animateTo({
     curve: Curve.Friction, duration: ANIMATION_DURATION, onFinish: () => {
       // 初始化偏移位置
       this.modifier.forEach((item) => {
         item.offsetX = 0;
         item.offsetY = 0;
       })
       // 刪除對(duì)應(yīng)的數(shù)據(jù)
       this.gridData.splice(index, 1);
       this.modifier.splice(index, 1);
       this.status = DeletionStatus.FINISH;
     }
   }, () => {
     this.modifier.forEach((item: GridItemModifier, ind: number) => {
       if (ind > index && ind % COLUMN_COUNT !== 0) {
         item.offsetX = -itemAreaWidth;
       } else if (ind > index && ind % COLUMN_COUNT === 0) {
         item.offsetX = itemAreaWidth * 4; // 位置偏移到上一行的最后一列,因此偏移4個(gè)gridItem所占的寬度
         item.offsetY = -GRID_ITEM_HEIGHT;
       }
     })
     this.status = DeletionStatus.START;
   })
 }
  1. 交換網(wǎng)格元素,onItemDragStart以及onItemDrop來(lái)完成元素的交換功能,supportAnimation設(shè)置為true,支持在拖拽時(shí)顯示動(dòng)畫(huà)效果。onItemDragStart函數(shù)中
    返回目標(biāo)自定義組件,可以在拖拽過(guò)程中顯示。onItemDrop函數(shù)執(zhí)行最后網(wǎng)格元素的交換。 源碼參考GridExchange.ets。
 .supportAnimation(true)
 .editMode(this.isEdit)
 .onItemDragStart((event: ItemDragInfo, itemIndex: number) => {
   // TODO:知識(shí)點(diǎn):在onItemDragStart函數(shù)返回自定義組件,可在拖拽過(guò)程中顯示此自定義組件。
   return this.pixelMapBuilder();
 })
 .onItemDrop((event: ItemDragInfo, itemIndex: number, insertIndex: number, isSuccess: boolean) => {
   // TODO:知識(shí)點(diǎn):執(zhí)行g(shù)ridItem切換操作
   if (isSuccess && insertIndex < this.appInfoList.length) {
     this.changeIndex(itemIndex, insertIndex);
   }
 })

高性能知識(shí)點(diǎn)

  • 動(dòng)態(tài)加載數(shù)據(jù)場(chǎng)景可以使用LazyForEach遍歷數(shù)據(jù)。
  • onAreaChange
    在區(qū)域發(fā)生大小變化的時(shí)候會(huì)進(jìn)行調(diào)用,由于刪除操作或者網(wǎng)格元素的交互都能夠觸發(fā)區(qū)域函數(shù)的使用,操作頻繁,
    建議此處減少日志的打印、復(fù)用函數(shù)邏輯來(lái)降低性能的內(nèi)耗。
  • onTouch
    在進(jìn)行手勢(shì)操作的時(shí)候會(huì)進(jìn)行多次調(diào)用,建議此處減少日志的打印、復(fù)用函數(shù)邏輯來(lái)降低性能的內(nèi)耗。

工程結(jié)構(gòu)&模塊類型

gridexchange                                 // har類型
|---model
|   |---AppInfo.ets                          // App信息
|   |---AttributeModifier.ets                // 屬性對(duì)象
|   |---GridItemDeletionCtrl.ets             // 列表項(xiàng)交換
|   |---MockData.ets                         // 模擬數(shù)據(jù)
|---view
|   |---GridExchange.ets                     // 視圖層-應(yīng)用主頁(yè)面

模塊依賴

本實(shí)例依賴common模塊來(lái)實(shí)現(xiàn)日志的打印、資源 的調(diào)用、依賴動(dòng)態(tài)路由模塊來(lái)實(shí)現(xiàn)頁(yè)面的動(dòng)態(tài)加載。

參考資料

Grid

animateTo

attributeModifier

為了能讓大家更好的學(xué)習(xí)鴻蒙(HarmonyOS NEXT)開(kāi)發(fā)技術(shù),這邊特意整理了《鴻蒙開(kāi)發(fā)學(xué)習(xí)手冊(cè)》(共計(jì)890頁(yè)),希望對(duì)大家有所幫助:https://qr21.cn/FV7h05

《鴻蒙開(kāi)發(fā)學(xué)習(xí)手冊(cè)》:

如何快速入門(mén):https://qr21.cn/FV7h05

  1. 基本概念
  2. 構(gòu)建第一個(gè)ArkTS應(yīng)用
  3. ……

HarmonyOS NEXT 網(wǎng)格元素交換案例,Harmony?OS,OpenHarmony,移動(dòng)開(kāi)發(fā),harmonyos,華為,Openharmony,鴻蒙開(kāi)發(fā),第三方庫(kù),物聯(lián)網(wǎng)

開(kāi)發(fā)基礎(chǔ)知識(shí):https://qr21.cn/FV7h05

  1. 應(yīng)用基礎(chǔ)知識(shí)
  2. 配置文件
  3. 應(yīng)用數(shù)據(jù)管理
  4. 應(yīng)用安全管理
  5. 應(yīng)用隱私保護(hù)
  6. 三方應(yīng)用調(diào)用管控機(jī)制
  7. 資源分類與訪問(wèn)
  8. 學(xué)習(xí)ArkTS語(yǔ)言
  9. ……

HarmonyOS NEXT 網(wǎng)格元素交換案例,Harmony?OS,OpenHarmony,移動(dòng)開(kāi)發(fā),harmonyos,華為,Openharmony,鴻蒙開(kāi)發(fā),第三方庫(kù),物聯(lián)網(wǎng)

基于ArkTS 開(kāi)發(fā):https://qr21.cn/FV7h05

  1. Ability開(kāi)發(fā)
  2. UI開(kāi)發(fā)
  3. 公共事件與通知
  4. 窗口管理
  5. 媒體
  6. 安全
  7. 網(wǎng)絡(luò)與鏈接
  8. 電話服務(wù)
  9. 數(shù)據(jù)管理
  10. 后臺(tái)任務(wù)(Background Task)管理
  11. 設(shè)備管理
  12. 設(shè)備使用信息統(tǒng)計(jì)
  13. DFX
  14. 國(guó)際化開(kāi)發(fā)
  15. 折疊屏系列
  16. ……

HarmonyOS NEXT 網(wǎng)格元素交換案例,Harmony?OS,OpenHarmony,移動(dòng)開(kāi)發(fā),harmonyos,華為,Openharmony,鴻蒙開(kāi)發(fā),第三方庫(kù),物聯(lián)網(wǎng)

鴻蒙開(kāi)發(fā)面試真題(含參考答案):https://qr18.cn/F781PH

HarmonyOS NEXT 網(wǎng)格元素交換案例,Harmony?OS,OpenHarmony,移動(dòng)開(kāi)發(fā),harmonyos,華為,Openharmony,鴻蒙開(kāi)發(fā),第三方庫(kù),物聯(lián)網(wǎng)

鴻蒙開(kāi)發(fā)面試大盤(pán)集篇(共計(jì)319頁(yè)):https://qr18.cn/F781PH

1.項(xiàng)目開(kāi)發(fā)必備面試題
2.性能優(yōu)化方向
3.架構(gòu)方向
4.鴻蒙開(kāi)發(fā)系統(tǒng)底層方向
5.鴻蒙音視頻開(kāi)發(fā)方向
6.鴻蒙車載開(kāi)發(fā)方向
7.鴻蒙南向開(kāi)發(fā)方向

HarmonyOS NEXT 網(wǎng)格元素交換案例,Harmony?OS,OpenHarmony,移動(dòng)開(kāi)發(fā),harmonyos,華為,Openharmony,鴻蒙開(kāi)發(fā),第三方庫(kù),物聯(lián)網(wǎng)文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-856873.html

到了這里,關(guān)于HarmonyOS NEXT 網(wǎng)格元素交換案例的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • HarmonyOS NEXT應(yīng)用開(kāi)發(fā)案例——自定義TabBar

    HarmonyOS NEXT應(yīng)用開(kāi)發(fā)案例——自定義TabBar

    介紹 本示例主要介紹了TabBar中間頁(yè)面如何實(shí)現(xiàn)有一圈圓弧外輪廓以及TabBar頁(yè)簽被點(diǎn)擊之后會(huì)改變圖標(biāo)顯示,并有一小段動(dòng)畫(huà)效果。 效果圖預(yù)覽 使用說(shuō)明 : 依次點(diǎn)擊tabBar頁(yè)面,除了社區(qū)圖標(biāo)之外,其它圖標(biāo)往上移動(dòng)一小段距離。 實(shí)現(xiàn)思路 場(chǎng)景1:TabBar中間頁(yè)面實(shí)現(xiàn)有一圈圓

    2024年03月14日
    瀏覽(21)
  • HarmonyOS NEXT應(yīng)用開(kāi)發(fā)—視頻全屏切換案例

    HarmonyOS NEXT應(yīng)用開(kāi)發(fā)—視頻全屏切換案例

    介紹 本示例介紹了Video組件和@ohos.window接口實(shí)現(xiàn)媒體全屏的功能。 該場(chǎng)景多用于首頁(yè)瀑布流媒體播放等。 效果圖預(yù)覽 使用說(shuō)明 : 點(diǎn)擊全屏按鈕,橫屏媒體窗口。 點(diǎn)擊恢復(fù)窗口按鈕,恢復(fù)媒體窗口。 在Video組件內(nèi)調(diào)用 onFullscreenChange 方法,實(shí)現(xiàn)媒體全屏效果。 調(diào)用@ohos.win

    2024年03月20日
    瀏覽(22)
  • HarmonyOS NEXT應(yīng)用開(kāi)發(fā)之Web獲取相機(jī)拍照?qǐng)D片案例

    HarmonyOS NEXT應(yīng)用開(kāi)發(fā)之Web獲取相機(jī)拍照?qǐng)D片案例

    介紹 本示例介紹如何在HTML頁(yè)面中拉起原生相機(jī)進(jìn)行拍照,并獲取返回的圖片。 效果預(yù)覽圖 使用說(shuō)明 點(diǎn)擊HTML頁(yè)面中的選擇文件按鈕,拉起原生相機(jī)進(jìn)行拍照。 完成拍照后,將圖片在HTML的img標(biāo)簽中顯示。 實(shí)現(xiàn)思路 添加Web組件,設(shè)置onShowFileSelector屬性,接收HTML頁(yè)面中input的點(diǎn)

    2024年03月23日
    瀏覽(24)
  • ArkUI框架之聲明式 UI 條件渲染&聲明周期以及案例美化實(shí)戰(zhàn)運(yùn)用【OpenHarmony/HarmonyOS】

    1.1.1 用戶名位數(shù)判斷 實(shí)現(xiàn)用戶名位數(shù)判斷可以直接在build方法函數(shù)里進(jìn)行寫(xiě)if語(yǔ)句的條件判斷。 我們把用戶名改到超出五位查看效果如下:

    2024年02月06日
    瀏覽(25)
  • 【Harmony OS - 消息通知】

    【Harmony OS - 消息通知】

    應(yīng)用可以通過(guò)接口發(fā)送通知消息,提醒用戶關(guān)注應(yīng)用中的變化。用戶可以在通知欄查看和操作通知內(nèi)容,通常用于當(dāng)應(yīng)用處于后臺(tái)時(shí),發(fā)送,本文主要來(lái)介紹在Harmony OS中的三種消息通知。 總體流程有三步: 導(dǎo)入notification模塊 配置通知參數(shù)之后通過(guò)publish發(fā)布通知 取消通知

    2024年02月01日
    瀏覽(25)
  • 帶你走進(jìn)Harmony OS 開(kāi)發(fā)

    帶你走進(jìn)Harmony OS 開(kāi)發(fā)

    HUAWEI HarmonyOS 鴻蒙系統(tǒng)(鴻蒙 OS)是一款“面向未來(lái)”、面向全場(chǎng)景(移動(dòng)辦公、運(yùn)動(dòng)健康、社交通信、媒體娛樂(lè)等)的分布式操作系統(tǒng)。在傳統(tǒng)的單設(shè)備系統(tǒng)能力的基礎(chǔ)上,HarmonyOS提出了基于同一套系統(tǒng)能力、適配多種終端形態(tài)的分布式理念,能夠支持多種終端設(shè)備。 Har

    2024年02月04日
    瀏覽(27)
  • Harmony OS—UIAbility的使用

    Harmony OS—UIAbility的使用

    UIAbility是一種包含用戶界面的應(yīng)用組件,主要用于和用戶進(jìn)行交互。UIAbility也是系統(tǒng)調(diào)度的單元,為應(yīng)用提供窗口在其中繪制界面。一個(gè)應(yīng)用可以有一個(gè)UIAbility,也可以有多個(gè)UIAbility,類似于Android 的 Activity,如果有安卓基礎(chǔ)的同學(xué),也可以結(jié)合過(guò)往知識(shí)點(diǎn)學(xué)習(xí)。比如 設(shè)置路

    2024年02月04日
    瀏覽(56)
  • 不得不承認(rèn),我們都太低估鴻蒙了 !_harmony next 展示

    不得不承認(rèn),我們都太低估鴻蒙了 !_harmony next 展示

    先自我介紹一下,小編浙江大學(xué)畢業(yè),去過(guò)華為、字節(jié)跳動(dòng)等大廠,目前阿里P7 深知大多數(shù)程序員,想要提升技能,往往是自己摸索成長(zhǎng),但自己不成體系的自學(xué)效果低效又漫長(zhǎng),而且極易碰到天花板技術(shù)停滯不前! 因此收集整理了一份《2024年最新HarmonyOS鴻蒙全套學(xué)習(xí)資料

    2024年04月25日
    瀏覽(21)
  • 使用Harmony OS控制外設(shè)——輸入輸出

    本節(jié)課程主要介紹如何在HiSpark WiFi IoT套件上使用Hamony OS進(jìn)行編程,以及如何使用GPIO輸入輸出功能。 Hi3861開(kāi)發(fā)板第一個(gè)示例程序演示 熟悉使用DevEco Device Tool插件進(jìn)行程序燒錄 熟悉串口調(diào)試工具sscom的使用 官方文檔中控制核心板上LED的 led_example.c 講解及演示 源碼路徑: appli

    2023年04月20日
    瀏覽(23)
  • Harmony OS (eTS語(yǔ)言)的起源和演進(jìn)

    ??Mozilla創(chuàng)造了JS,Microsoft創(chuàng)建了TS,Huawei進(jìn)一步推出了eTS。eTS(extended TypeScript)是鴻蒙(Harmony)生態(tài)的一種應(yīng)用開(kāi)發(fā)語(yǔ)言。也是Harmony系統(tǒng)(Harmony開(kāi)發(fā)語(yǔ)言java、js、eTS,Harmony3.0后java語(yǔ)言廢棄了)主推的一種開(kāi)發(fā)語(yǔ)言。它在TypeScript(簡(jiǎn)稱TS)的基礎(chǔ)上,擴(kuò)展了聲明式UI、狀態(tài)管理

    2024年02月03日
    瀏覽(33)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包