99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

鴻蒙開(kāi)發(fā)之發(fā)動(dòng)畫(huà)篇

王程 ? 來(lái)源:jf_75796907 ? 作者:jf_75796907 ? 2024-02-01 15:25 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

動(dòng)畫(huà)的原理是在一個(gè)時(shí)間段內(nèi),多次改變UI外觀,由于人眼會(huì)產(chǎn)生視覺(jué)暫留,所以最終看到的就是一個(gè)“連續(xù)”的動(dòng)畫(huà)。UI的一次改變稱為一個(gè)動(dòng)畫(huà)幀,對(duì)應(yīng)一次屏幕刷新,而決定動(dòng)畫(huà)流暢度的一個(gè)重要指標(biāo)就是幀率FPS(Frame Per Second),即每秒的動(dòng)畫(huà)幀數(shù),幀率越高則動(dòng)畫(huà)就會(huì)越流暢。

ArkUI中,產(chǎn)生動(dòng)畫(huà)的方式是改變屬性值且指定動(dòng)畫(huà)參數(shù)。動(dòng)畫(huà)參數(shù)包含了如動(dòng)畫(huà)時(shí)長(zhǎng)、變化規(guī)律(即曲線)等參數(shù)。當(dāng)屬性值發(fā)生變化后,按照動(dòng)畫(huà)參數(shù),從原來(lái)的狀態(tài)過(guò)渡到新的狀態(tài),即形成一個(gè)動(dòng)畫(huà)。

ArkUI提供的動(dòng)畫(huà)能力按照頁(yè)面的分類方式,可分為頁(yè)面內(nèi)的動(dòng)畫(huà)和頁(yè)面間的動(dòng)畫(huà)。如下圖所示,頁(yè)面內(nèi)的動(dòng)畫(huà)指在一個(gè)頁(yè)面內(nèi)即可發(fā)生的動(dòng)畫(huà),頁(yè)面間的動(dòng)畫(huà)指兩個(gè)頁(yè)面跳轉(zhuǎn)時(shí)才會(huì)發(fā)生的動(dòng)畫(huà)。

wKgZomW7RvqAXcOyAAFprGg9jqY409.png

圖1 按照頁(yè)面分類的動(dòng)畫(huà)

wKgaomW7R3KAYQ7FAAA3OIfX5UU220.png

如果按照基礎(chǔ)能力分,可分為屬性動(dòng)畫(huà)、顯式動(dòng)畫(huà)、轉(zhuǎn)場(chǎng)動(dòng)畫(huà)三部分。如下圖所示。

wKgZomW7R0OAaNHiAAFciaKtSJM294.png

圖2 按照基礎(chǔ)能力分類的動(dòng)畫(huà)

wKgZomW7R3KAXS-1AAAusHLGs1U740.png

使用顯式動(dòng)畫(huà)產(chǎn)生布局更新動(dòng)畫(huà)

顯式動(dòng)畫(huà)的接口為:

animateTo(value: AnimateParam, event: () => void): void

第一個(gè)參數(shù)指定動(dòng)畫(huà)參數(shù),第二個(gè)參數(shù)為動(dòng)畫(huà)的閉包函數(shù)。

以下是使用顯式動(dòng)畫(huà)產(chǎn)生布局更新動(dòng)畫(huà)的示例。示例中,當(dāng)Column組件的alignItems屬性改變后,其子組件的布局位置結(jié)果發(fā)生變化。只要該屬性是在animateTo的閉包函數(shù)中修改的,那么由其引起的所有變化都會(huì)按照animateTo的動(dòng)畫(huà)參數(shù)執(zhí)行動(dòng)畫(huà)過(guò)渡到終點(diǎn)值。

@Entry
@Component
struct LayoutChange {
  // 用于控制Column的alignItems屬性
  @State itemAlign: HorizontalAlign = HorizontalAlign.Start;
  allAlign: HorizontalAlign[] = [HorizontalAlign.Start, HorizontalAlign.Center, HorizontalAlign.End];
  alignIndex: number = 0;

  build() {
    Column() {
      Column({ space: 10 }) {
        Button("1").width(100).height(50)
        Button("2").width(100).height(50)
        Button("3").width(100).height(50)
      }
      .margin(20)
      .alignItems(this.itemAlign)
      .borderWidth(2)
      .width("90%")
      .height(200)

      Button("click").onClick(() => {
        // 動(dòng)畫(huà)時(shí)長(zhǎng)為1000ms,曲線為EaseInOut
        animateTo({ duration: 1000, curve: Curve.EaseInOut }, () => {
          this.alignIndex = (this.alignIndex + 1) % this.allAlign.length;
          // 在閉包函數(shù)中修改this.itemAlign參數(shù),使Column容器內(nèi)部孩子的布局方式變化,使用動(dòng)畫(huà)過(guò)渡到新位置
          this.itemAlign = this.allAlign[this.alignIndex];
        });
      })
    }
    .width("100%")
    .height("100%")
  }
}

除直接改變布局方式外,也可直接修改組件的寬、高、位置。

@Entry
@Component
struct LayoutChange2 {
  @State myWidth: number = 100;
  @State myHeight: number = 50;
  // 標(biāo)志位,true和false分別對(duì)應(yīng)一組myWidth、myHeight值
  @State flag: boolean = false;

  build() {
    Column({ space: 10 }) {
      Button("text")
        .type(ButtonType.Normal)
        .width(this.myWidth)
        .height(this.myHeight)
        .margin(20)
      Button("area: click me")
        .fontSize(12)
        .margin(20)
        .onClick(() => {
          animateTo({ duration: 1000, curve: Curve.Ease }, () => {
            // 動(dòng)畫(huà)閉包中根據(jù)標(biāo)志位改變控制第一個(gè)Button寬高的狀態(tài)變量,使第一個(gè)Button做寬高動(dòng)畫(huà)
            if (this.flag) {
              this.myWidth = 100;
              this.myHeight = 50;
            } else {
              this.myWidth = 200;
              this.myHeight = 100;
            }
            this.flag = !this.flag;
          });
        })
    }
    .width("100%")
    .height("100%")
  }
}

另一種方式是給第二個(gè)Button添加布局約束,如position的位置約束,使其位置不被第一個(gè)Button的寬高影響。核心代碼如下:

Column({ space: 10 }) {
  Button("text")
    .type(ButtonType.Normal)
    .width(this.myWidth)
    .height(this.myHeight)
    .margin(20)

  Button("area: click me")
    .fontSize(12)
    // 配置position屬性固定,使自己的布局位置不被第一個(gè)Button的寬高影響
    .position({ x: "30%", y: 200 })
    .onClick(() => {
      animateTo({ duration: 1000, curve: Curve.Ease }, () => {
        // 動(dòng)畫(huà)閉包中根據(jù)標(biāo)志位改變控制第一個(gè)Button寬高的狀態(tài)變量,使第一個(gè)Button做寬高動(dòng)畫(huà)
        if (this.flag) {
          this.myWidth = 100;
          this.myHeight = 50;
        } else {
          this.myWidth = 200;
          this.myHeight = 100;
        }
        this.flag = !this.flag;
      });
    })
}
.width("100%")
.height("100%")

使用屬性動(dòng)畫(huà)產(chǎn)生布局更新動(dòng)畫(huà)

顯式動(dòng)畫(huà)把要執(zhí)行動(dòng)畫(huà)的屬性的修改放在閉包函數(shù)中觸發(fā)動(dòng)畫(huà),而屬性動(dòng)畫(huà)則無(wú)需使用閉包,把a(bǔ)nimation屬性加在要做屬性動(dòng)畫(huà)的組件的屬性后即可。

屬性動(dòng)畫(huà)的接口為:

animation(value: AnimateParam)

其入?yún)閯?dòng)畫(huà)參數(shù)。想要組件隨某個(gè)屬性值的變化而產(chǎn)生動(dòng)畫(huà),此屬性需要加在animation屬性之前。有的屬性變化不希望通過(guò)animation產(chǎn)生屬性動(dòng)畫(huà),可以放在animation之后。上面顯式動(dòng)畫(huà)的示例很容易改為用屬性動(dòng)畫(huà)實(shí)現(xiàn)。例如:

@Entry
@Component
struct LayoutChange2 {
  @State myWidth: number = 100;
  @State myHeight: number = 50;
  @State flag: boolean = false;
  @State myColor: Color = Color.Blue;

  build() {
    Column({ space: 10 }) {
      Button("text")
        .type(ButtonType.Normal)
        .width(this.myWidth)
        .height(this.myHeight)
        // animation只對(duì)其上面的type、width、height屬性生效,時(shí)長(zhǎng)為1000ms,曲線為Ease
        .animation({ duration: 1000, curve: Curve.Ease })
        // animation對(duì)下面的backgroundColor、margin屬性不生效
        .backgroundColor(this.myColor)
        .margin(20)
        

      Button("area: click me")
        .fontSize(12)
        .onClick(() => {
          // 改變屬性值,配置了屬性動(dòng)畫(huà)的屬性會(huì)進(jìn)行動(dòng)畫(huà)過(guò)渡
          if (this.flag) {
            this.myWidth = 100;
            this.myHeight = 50;
            this.myColor = Color.Blue;
          } else {
            this.myWidth = 200;
            this.myHeight = 100;
            this.myColor = Color.Pink;
          }
          this.flag = !this.flag;
        })
    }
  }
}

上述示例中,第一個(gè)button上的animation屬性,只對(duì)寫(xiě)在animation之前的type、width、height屬性生效,而對(duì)寫(xiě)在animation之后的backgroundColor、margin屬性無(wú)效。運(yùn)行結(jié)果是width、height屬性會(huì)按照animation的動(dòng)畫(huà)參數(shù)執(zhí)行動(dòng)畫(huà),而backgroundColor會(huì)直接跳變,不會(huì)產(chǎn)生動(dòng)畫(huà)

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 鴻蒙
    +關(guān)注

    關(guān)注

    60

    文章

    2618

    瀏覽量

    44041
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    【HarmonyOS 5】金融應(yīng)用開(kāi)發(fā)鴻蒙組件實(shí)踐

    【HarmonyOS 5】金融應(yīng)用開(kāi)發(fā)鴻蒙組件實(shí)踐 ##鴻蒙開(kāi)發(fā)能力 ##HarmonyOS SDK應(yīng)用服務(wù)##鴻蒙金融類應(yīng)用 (金融理財(cái)#
    的頭像 發(fā)表于 07-11 18:20 ?280次閱讀
    【HarmonyOS 5】金融應(yīng)用<b class='flag-5'>開(kāi)發(fā)</b><b class='flag-5'>鴻蒙</b>組件實(shí)踐

    鴻蒙5開(kāi)發(fā)寶藏案例分享---優(yōu)化應(yīng)用時(shí)延問(wèn)題

    鴻蒙性能優(yōu)化寶藏指南:6大實(shí)戰(zhàn)案例讓你的應(yīng)用飛起來(lái)! 大家好!今天在翻鴻蒙文檔時(shí)挖到了 性能優(yōu)化寶藏庫(kù) !官方竟然悄悄藏了這么多實(shí)戰(zhàn)案例,從UI渲染到數(shù)據(jù)庫(kù)操作應(yīng)有盡有。這些案例要是早發(fā)現(xiàn),我上周
    發(fā)表于 06-13 10:08

    鴻蒙5開(kāi)發(fā)寶藏案例分享---Web頁(yè)面內(nèi)點(diǎn)擊響應(yīng)時(shí)延分析

    鴻蒙Web性能優(yōu)化寶藏指南!那些官方?jīng)]明說(shuō)的實(shí)戰(zhàn)技巧 各位鴻蒙開(kāi)發(fā)者好!最近在排查Web頁(yè)面卡頓時(shí),意外在HarmonyOS開(kāi)發(fā)者文檔里挖到性能優(yōu)化的寶藏案例!這些實(shí)戰(zhàn)經(jīng)驗(yàn)藏在「應(yīng)用質(zhì)
    發(fā)表于 06-12 17:09

    鴻蒙5開(kāi)發(fā)寶藏案例分享---分析幀率問(wèn)題

    鴻蒙性能優(yōu)化寶藏:幀率問(wèn)題實(shí)戰(zhàn)案例解析 嘿,各位鴻蒙開(kāi)發(fā)者! 今天分享一個(gè)開(kāi)發(fā)中的大發(fā)現(xiàn)——鴻蒙官方文檔里藏著一堆超實(shí)用的性能優(yōu)化案例!這些
    發(fā)表于 06-12 17:07

    鴻蒙5開(kāi)發(fā)寶藏案例分享---點(diǎn)擊完成時(shí)延分析

    ?** 鴻蒙完成時(shí)延優(yōu)化實(shí)戰(zhàn)指南:讓你的應(yīng)用絲滑如飛!** 在移動(dòng)端開(kāi)發(fā)中, 完成時(shí)延就是用戶體驗(yàn)的生命線 !今天帶你深入鴻蒙完成時(shí)延優(yōu)化,揭秘官方文檔中的寶藏技巧,讓你的應(yīng)用告別卡頓,流暢起飛
    發(fā)表于 06-12 17:03

    鴻蒙5開(kāi)發(fā)寶藏案例分享---性能體驗(yàn)設(shè)計(jì)

    章可循?記住三個(gè)關(guān)鍵數(shù)字: ?點(diǎn)擊響應(yīng)≤100ms ?啟動(dòng)耗時(shí)≤1100ms ?丟幀≤3幀 官方文檔里還有更多寶藏案例(比如《優(yōu)化長(zhǎng)列表加載》和《轉(zhuǎn)場(chǎng)動(dòng)畫(huà)最佳實(shí)踐》),強(qiáng)烈建議去開(kāi)發(fā)者文檔搜\"
    發(fā)表于 06-12 16:45

    鴻蒙5開(kāi)發(fā)寶藏案例分享---體驗(yàn)流暢的首頁(yè)信息流

    ?** 鴻蒙新聞?lì)愂醉?yè)開(kāi)發(fā)全攻略:流暢動(dòng)效+懶加載實(shí)戰(zhàn)** Hey 各位鴻蒙開(kāi)發(fā)者! 今天要分享一個(gè)超實(shí)用的鴻蒙新聞?lì)愂醉?yè)
    發(fā)表于 06-12 11:42

    DevEco Studio AI輔助開(kāi)發(fā)工具兩大升級(jí)功能 鴻蒙應(yīng)用開(kāi)發(fā)效率再提升

    隨著搭載HarmonyOS 5的Pura X發(fā)布,鴻蒙生態(tài)進(jìn)入快車(chē)道,各應(yīng)用正在加速適配開(kāi)發(fā),越來(lái)越多開(kāi)發(fā)者加入到鴻蒙應(yīng)用開(kāi)發(fā)浪潮中。為提升
    發(fā)表于 04-18 14:43

    DialogHub上線OpenHarmony開(kāi)源社區(qū),高效開(kāi)發(fā)鴻蒙應(yīng)用彈窗

    作為鴻蒙應(yīng)用開(kāi)發(fā)者,在使用ArkUI現(xiàn)有能力進(jìn)行彈窗開(kāi)發(fā)時(shí),總會(huì)遇到一些讓人糾結(jié)的交互問(wèn)題:應(yīng)用內(nèi)進(jìn)行消息提示時(shí),既要求消息內(nèi)容支持圖文混排,又要求彈窗本身不能打斷用戶交互(頁(yè)面滑動(dòng)、頁(yè)面
    發(fā)表于 04-03 17:30

    鴻蒙北向開(kāi)發(fā)OpenHarmony5.0 DevEco Studio開(kāi)發(fā)工具安裝與配置

    本文介紹OpenHarmony5.0 DevEco Studio開(kāi)發(fā)工具安裝與配置,鴻蒙北向開(kāi)發(fā)入門(mén)必備!由觸覺(jué)智能Purple Pi OH鴻蒙開(kāi)發(fā)
    的頭像 發(fā)表于 03-28 18:05 ?859次閱讀
    <b class='flag-5'>鴻蒙</b>北向<b class='flag-5'>開(kāi)發(fā)</b>OpenHarmony5.0 DevEco Studio<b class='flag-5'>開(kāi)發(fā)</b>工具安裝與配置

    【「極速探索HarmonyOS NEXT 」閱讀體驗(yàn)】 初印象:一本純血鴻蒙應(yīng)用開(kāi)發(fā)入門(mén)的好書(shū)

    非常有幸的于近日收到了電子發(fā)燒友寄來(lái)的《 極速探索HarmonyOS NEXT **** 純血鴻蒙應(yīng)用開(kāi)發(fā)實(shí)踐》這本由清華大學(xué)出版社出版的一本純血鴻蒙應(yīng)用開(kāi)發(fā)學(xué)習(xí)的一本好書(shū)。 書(shū)籍一共
    發(fā)表于 03-04 12:41

    名單公布!【書(shū)籍評(píng)測(cè)活動(dòng)NO.56】極速探索HarmonyOS NEXT:純血鴻蒙應(yīng)用開(kāi)發(fā)實(shí)踐

    開(kāi)發(fā)的核心技術(shù),以及鴻蒙應(yīng)用在實(shí)際開(kāi)發(fā)中的應(yīng)用方法。 本書(shū)共分為四,共計(jì)16章,分別為鴻蒙開(kāi)發(fā)
    發(fā)表于 01-20 16:53

    鴻蒙機(jī)器人與鴻蒙開(kāi)發(fā)板聯(lián)動(dòng)演示

    鴻蒙機(jī)器人與鴻蒙開(kāi)發(fā)板聯(lián)動(dòng)演示,機(jī)器人的角色為迎賓機(jī)器人,開(kāi)發(fā)板負(fù)責(zé)人賓客出現(xiàn)監(jiān)聽(tīng)
    發(fā)表于 12-02 14:55

    鴻蒙Flutter實(shí)戰(zhàn):07混合開(kāi)發(fā)

    # 鴻蒙Flutter實(shí)戰(zhàn):混合開(kāi)發(fā) 鴻蒙Flutter混合開(kāi)發(fā)主要有兩種形式。 ## 1.基于har 將flutter module打包成har包,在原生
    發(fā)表于 10-23 16:00

    鴻蒙OpenHarmony南向/北向快速開(kāi)發(fā)教程-迅為RK3568開(kāi)發(fā)

    4.1學(xué)習(xí)之旅了嗎?快來(lái)加入我們,一起探索鴻蒙4.1系統(tǒng)的無(wú)限魅力吧! 【北京迅為】OpenHarmony學(xué)習(xí)開(kāi)發(fā)系列教程(第1期 北向基礎(chǔ)一) P0_先導(dǎo)課 P1_OpenHarmony系統(tǒng)概述
    發(fā)表于 07-23 10:44