HarmonyOS NEXT應用開發之深色跑馬燈案例

来源:https://www.cnblogs.com/HarmonyOSNext/p/18146849
-Advertisement-
Play Games

介紹 本示例介紹了文本寬度過寬時,如何實現文本首尾相接迴圈滾動並顯示在可視區,以及每迴圈滾動一次之後會停滯一段時間後再滾動。 效果圖預覽 使用說明: 1.進入頁面,檢票口文本處,實現文本首尾相接迴圈滾動,且在同一可視區,滾動完成之後,停滯一段時間後繼續滾動。 實現思路 由於ArkUI中的Marque ...


介紹

本示例介紹了文本寬度過寬時,如何實現文本首尾相接迴圈滾動並顯示在可視區,以及每迴圈滾動一次之後會停滯一段時間後再滾動。

效果圖預覽

image

使用說明

1.進入頁面,檢票口文本處,實現文本首尾相接迴圈滾動,且在同一可視區,滾動完成之後,停滯一段時間後繼續滾動。

實現思路

由於ArkUI中的Marquee組件無法實現文本接替並顯示在同一可視區的效果,它只能等文本完全消失在可視區之後,才會再次顯示在可視區, 因此需要以下方案實現。

  1. Text組件外層包裹一層Scroll組件,Scroll組件設置一定的百分比寬度值,並獲取當前文本內容寬度和Scroll組件寬度,文本寬度大於 Scroll組件寬度時,通過添加判斷顯示同樣的文本,在偏移過程中可實現文本接替並顯示在同一顯示區的效果。源碼參考Marquee.ets
    // TODO:知識點:使用Scroll組件和文本內容組件結合來判斷文本寬度過寬時執行文本滾動,否則不執行
    Scroll() {
      Row() {
        Text(this.tripDataItem.ticketEntrance)
          .onAreaChange((oldValue, newValue) => {
            logger.info(`TextArea oldValue:${JSON.stringify(oldValue)},newValue:${JSON.stringify(newValue)}`);
            // 獲取當前文本內容寬度
            this.ticketCheckTextWidth = Number(newValue.width);
          })
        // TODO:知識點:文本寬度大於Scroll組件寬度時顯示。在偏移過程中可實現文本接替並顯示在同一顯示區的效果
        if (this.ticketCheckTextWidth >= this.ticketCheckScrollWidth) {
          Blank()
            .width(50)
          Text(this.tripDataItem.ticketEntrance)
        }
      }.offset({ x: this.ticketCheckTextOffset })
    }
    .width('50%')
    .align(Alignment.Start)
    .enableScrollInteraction(false)
    .flexGrow(1)
    .scrollable(ScrollDirection.Horizontal)
    .scrollBar(BarState.Off)
    .onAreaChange((oldValue, newValue) => {
      logger.info(`scrollArea oldValue:${JSON.stringify(oldValue)},newValue:${JSON.stringify(newValue)}`);
      // 獲取當前Scroll組件寬度
      this.ticketCheckScrollWidth = Number(newValue.width);
    })
   }
   .width('46%')
  1. 頁面進來執行文本滾動函數scrollAnimation(),在指定的時間內完成文本的偏移,當迴圈一次之後,通過定時器setTimeout 來實現停滯操作。源碼參考Marquee.ets
   // 文本滾動函數
  scrollAnimation() {
    // 文本寬度小於Scroll組件寬度,不執行滾動操作
    if (this.ticketCheckTextWidth < this.ticketCheckScrollWidth) {
      return;
    }
    /**
     * 文本向左偏移動畫
     *
     * @param duration:動畫總時長
     * @param curve:動畫曲線
     * @param delay:延遲時間
     * @param onFinish:完成回調函數
     * 性能:播放動畫時,系統需要在一個刷新周期內完成動畫變化曲線的計算,完成組件佈局繪製等操作。建議使用系統提供的動畫介面,
     * 只需設置曲線類型、終點位置、時長等信息,就能夠滿足常用的動畫功能,減少UI主線程的負載。
     * 參考資料:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/arkts-attribute-animation-apis-0000001820879805
     */
    animateTo({
      duration: Constants.ANIMATION_DURATION,
      curve: Curve.Linear,
      delay: this.delay,
      onFinish: () => {
        // TODO:知識點:動畫完成時,添加定時器,1s之後重新執行動畫函數,達到停滯操作。
        setTimeout(() => {
          // 初始化文本偏移量
          this.ticketCheckTextOffset = 0;
          this.scrollAnimation();
        }, Constants.DELAY_TIME)
      }
    }, () => {
      // 文本偏離量
      this.ticketCheckTextOffset = -(this.ticketCheckTextWidth + Constants.BLANK_SPACE)
    })
  }

高性能知識點

本示例使用了LazyForEach 進行數據懶載入,動態添加行程信息以及顯示動畫animateTo實現文本偏移。

工程結構&模塊類型

marquee                                         // har類型
|---model
|   |---Constants.ets                           // 數據模型層-常量
|   |---DataSource.ets                          // 模型層-懶載入數據源
|   |---DataType.ets                            // 數據模型層-數據類型
|   |---MockData.ets                            // 數據模型層-模擬數據
|---view
|   |---Marquee.ets                             // 視圖層-應用主頁面

模塊依賴

本實例依賴common模塊來實現日誌的列印、資源 的調用。

參考資料

顯示動畫animateTo

數據懶載入LazyForEach


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 介紹 本示例介紹使用vibrator.startVibration方法實現手機振動效果,用animateTo顯示動畫實現點擊後的抖動動畫。 效果圖預覽 使用說明 載入完成後顯示登錄界面,未勾選協議時點擊一鍵登錄按鈕會觸發手機振動效果和提示文本的抖動動畫。 實現思路 創建一個函數startVibrat ...
  • 前言 彈簧曲線動畫是一種模擬彈簧運動的動畫效果,通過改變彈簧的拉伸或壓縮來表現不同的運動狀態。以下是製作彈簧曲線動畫的步驟: 創建一個彈簧的模型,可以使用圓形或者曲線來代表彈簧的形狀。 將彈簧固定在一個點上,這個點可以是屏幕中心或其他位置。 定義一個目標位置,彈簧將會朝向這個位置進行拉伸或壓縮。 ...
  • 介紹 在ArkTS中調用相機拍照和錄像,以及如何使用媒體庫介面進行媒體文件的增、刪、改、查操作。本示例用到了 許可權管理能力 相機模塊能力介面 圖片處理介面 音視頻相關媒體業務能力介面 媒體庫管理介面 設備信息能力介面 文件存儲管理能力介面 彈窗能力介面 效果預覽 使用說明 1.啟動應用,在許可權彈窗中 ...
  • 介紹 本示例介紹如何使用Text組件實現驗證碼場景,並禁用對內容的選中、複製、游標。 效果圖預覽 使用說明 單擊組件可彈出輸入法 在進行驗證碼輸入時,無法對中間單個數字進行更改,無法選中輸入內容,無游標 實現思路 因為要禁用複製、選中等功能,這裡使用了Text組件,而不是TextInput ForE ...
  • 介紹 本示例通過模擬下載場景介紹如何將Native的進度信息實時同步到ArkTS側。 效果圖預覽 使用說明 點擊“Start Download“按鈕後,Native側啟動子線程模擬下載任務 Native側啟動子線程模擬下載,並通過Arkts的回調函數將進度信息實時傳遞到Arkts側 實現思路 前端進 ...
  • 前言 轉場動畫是一種在電影、視頻和演示文稿中使用的動畫效果,用於平滑地切換不同的場景或幻燈片。轉場動畫可以增加視覺吸引力,改善觀眾的觀看體驗。 常見的轉場動畫包括淡入淡出、滑動、旋轉、放大縮小等效果。這些動畫效果可以在場景之間創建無縫的過渡,使觀眾感到自然流暢。 在電影中,轉場動畫通常用於切換不 ...
  • 介紹 翻頁動效是應用開發中常見的動效場景,常見的有書籍翻頁,日曆翻頁等。本例將介紹如何通過ArkUI提供的顯示動畫介面animateTo實現翻頁的效果。 效果圖預覽 使用說明 本例通過setInterval函數每秒調用一次翻頁動畫,實現連續翻頁效果。 實現思路 如圖,左右兩側分別代表打開書籍的左右兩 ...
  • 介紹 本示例介紹使用第三方庫的PullToRefresh組件實現列表的下拉刷新數據和上滑載入後續數據。 效果圖預覽 使用說明 進入頁面,下拉列表觸發刷新數據事件,等待數據刷新完成。 上滑列表到底部,觸發載入更多數據事件,等待數據載入完成。 實現思路 使用第三方庫pullToRefresh組件,將列表 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...