女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

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

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

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

鴻蒙開發(fā)之發(fā)動畫篇

王程 ? 來源:jf_75796907 ? 作者:jf_75796907 ? 2024-02-01 15:25 ? 次閱讀

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

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

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

wKgZomW7RvqAXcOyAAFprGg9jqY409.png

圖1 按照頁面分類的動畫

wKgaomW7R3KAYQ7FAAA3OIfX5UU220.png

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

wKgZomW7R0OAaNHiAAFciaKtSJM294.png

圖2 按照基礎(chǔ)能力分類的動畫

wKgZomW7R3KAXS-1AAAusHLGs1U740.png

使用顯式動畫產(chǎn)生布局更新動畫

顯式動畫的接口為:

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

第一個參數(shù)指定動畫參數(shù),第二個參數(shù)為動畫的閉包函數(shù)。

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

@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(() => {
        // 動畫時長為1000ms,曲線為EaseInOut
        animateTo({ duration: 1000, curve: Curve.EaseInOut }, () => {
          this.alignIndex = (this.alignIndex + 1) % this.allAlign.length;
          // 在閉包函數(shù)中修改this.itemAlign參數(shù),使Column容器內(nèi)部孩子的布局方式變化,使用動畫過渡到新位置
          this.itemAlign = this.allAlign[this.alignIndex];
        });
      })
    }
    .width("100%")
    .height("100%")
  }
}

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

@Entry
@Component
struct LayoutChange2 {
  @State myWidth: number = 100;
  @State myHeight: number = 50;
  // 標志位,true和false分別對應一組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 }, () => {
            // 動畫閉包中根據(jù)標志位改變控制第一個Button寬高的狀態(tài)變量,使第一個Button做寬高動畫
            if (this.flag) {
              this.myWidth = 100;
              this.myHeight = 50;
            } else {
              this.myWidth = 200;
              this.myHeight = 100;
            }
            this.flag = !this.flag;
          });
        })
    }
    .width("100%")
    .height("100%")
  }
}

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

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

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

使用屬性動畫產(chǎn)生布局更新動畫

顯式動畫把要執(zhí)行動畫的屬性的修改放在閉包函數(shù)中觸發(fā)動畫,而屬性動畫則無需使用閉包,把animation屬性加在要做屬性動畫的組件的屬性后即可。

屬性動畫的接口為:

animation(value: AnimateParam)

其入?yún)閯赢媴?shù)。想要組件隨某個屬性值的變化而產(chǎn)生動畫,此屬性需要加在animation屬性之前。有的屬性變化不希望通過animation產(chǎn)生屬性動畫,可以放在animation之后。上面顯式動畫的示例很容易改為用屬性動畫實現(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只對其上面的type、width、height屬性生效,時長為1000ms,曲線為Ease
        .animation({ duration: 1000, curve: Curve.Ease })
        // animation對下面的backgroundColor、margin屬性不生效
        .backgroundColor(this.myColor)
        .margin(20)
        

      Button("area: click me")
        .fontSize(12)
        .onClick(() => {
          // 改變屬性值,配置了屬性動畫的屬性會進行動畫過渡
          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;
        })
    }
  }
}

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

審核編輯 黃宇

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

    關(guān)注

    59

    文章

    2525

    瀏覽量

    43775
收藏 人收藏

    評論

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

    鴻蒙5開發(fā)寶藏案例分享---一多開發(fā)實例(游戲)

    ?【開發(fā)者必看】鴻蒙隱藏寶箱大公開!這些實戰(zhàn)案例讓你的開發(fā)效率翻倍! 哈嘍各位開發(fā)者小伙伴!今天要和大家分享一個讓我拍大腿的發(fā)現(xiàn)——原來鴻蒙
    發(fā)表于 06-03 18:22

    2025開源鴻蒙開發(fā)者大會圓滿落幕

    近日,開源鴻蒙開發(fā)者大會2025(OHDC.2025,簡稱“大會”)在深圳隆重開幕。大會正式發(fā)布了開源鴻蒙5.1 Release版本,舉行了開源鴻蒙應用技術(shù)組件共建啟動、開源
    的頭像 發(fā)表于 05-26 17:03 ?329次閱讀

    DevEco Studio AI輔助開發(fā)工具兩大升級功能 鴻蒙應用開發(fā)效率再提升

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

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

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

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

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

    【「極速探索HarmonyOS NEXT 」閱讀體驗】 初印象:一本純血鴻蒙應用開發(fā)入門的好書

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

    鴻蒙原生應用開發(fā)也可以使用DeepSeek了

    近期DeepSeek火爆全球,那一樣很火的開發(fā)鴻蒙原生應用的DevEco Studio如果把它接入,會發(fā)生什么“化學反應”呢?下面我們將詳細分享如何在DevEco Studio中利用CodeGPT
    發(fā)表于 02-20 18:06

    HarmonyOS 應用開發(fā)賦能套件:鴻蒙原生應用開發(fā)的 “神助攻”

    隨著鴻蒙生態(tài)的快速發(fā)展,越來越多的開發(fā)者投身于鴻蒙原生應用的開發(fā)中。然而,在學習鴻蒙原生應用開發(fā)
    發(fā)表于 02-17 16:37

    鴻蒙北向開發(fā)OpenHarmony4.1 DevEco Studio開發(fā)工具安裝與配置

    OpenHarmony4.1 DevEco Studio開發(fā)工具安裝與配置,鴻蒙北向開發(fā)入門必備!
    的頭像 發(fā)表于 02-07 17:35 ?630次閱讀
    <b class='flag-5'>鴻蒙</b>北向<b class='flag-5'>開發(fā)</b>OpenHarmony4.1 DevEco Studio<b class='flag-5'>開發(fā)</b>工具安裝與配置

    名單公布!【書籍評測活動NO.56】極速探索HarmonyOS NEXT:純血鴻蒙應用開發(fā)實踐

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

    《HarmonyOS第一課》煥新升級,賦能開發(fā)者快速掌握鴻蒙應用開發(fā)

    《HarmonyOS第一課》煥新升級,賦能開發(fā)者快速掌握鴻蒙應用開發(fā) 隨著HarmonyOS NEXT發(fā)布,鴻蒙生態(tài)日益壯大,廣大開發(fā)者對于
    發(fā)表于 01-02 14:24

    OpenHarmony怎么修改DPI密度值?觸覺智能RK3566鴻蒙開發(fā)板演示

    開源鴻蒙OpenHarmony系統(tǒng)下,修改DPI密度值的方法,觸覺智能Purple Pi OH鴻蒙開發(fā)板演示,搭載了瑞芯微RK3566四核處理器,Laval鴻蒙社區(qū)推薦
    的頭像 發(fā)表于 12-24 11:46 ?601次閱讀
    OpenHarmony怎么修改DPI密度值?觸覺智能RK3566<b class='flag-5'>鴻蒙</b><b class='flag-5'>開發(fā)</b>板演示

    鴻蒙機器人與鴻蒙開發(fā)板聯(lián)動演示

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

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

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

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

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