100行代碼實現HarmonyOS“畫圖”應用,eTS開發走起!

来源:https://www.cnblogs.com/HarmonyOSDev/archive/2022/03/30/16077014.html
-Advertisement-
Play Games

本期我們給大家帶來的是“畫圖”應用開發者Rick的分享,希望能給你的HarmonyOS開發之旅帶來啟發~ ...


本期我們給大家帶來的是“畫圖”應用開發者Rick的分享,希望能給你的HarmonyOS開發之旅帶來啟發~

 

介紹


2021年的華為開發者大會(HDC2021)上,HarmonyOS 發佈了新一代的聲明式UI框架——方舟開發框架(ArkUI)。ArkUI框架引入了基於TS擴展的聲明式開發範式,讓開發變得更加簡潔、高效! 

 

已經有很多開發者在使用eTS(extended TypeScript)語言,基於聲明式開發範式開發應用了。本期我們要介紹的就是eTS開發先行者Rick的分享——100行代碼實現“畫圖”應用,帶大家一起領略eTS語言的簡潔之美~ 

 

一、實現效果


100行代碼實現的“畫圖”應用是怎樣的?我們先來看看實現效果吧:

 

圖1 實現效果

 

“畫圖”應用除了實現必須的畫圖功能外,還能夠設置畫筆的顏色和大小,且提供了撤銷功能,可謂短小而精美了。你心動了嗎?是否也想試試?趕緊跟隨Rick的開發過程,也來嘗試一下吧! 

 

二、開發過程


1. 安裝DevEco Studio


eTS開發需安裝DevEco Studio V3.0.0.601 Beta1或更高版本。

 

DevEco Studio下載地址:https://developer.harmonyos.com/cn/develop/deveco-studio/

 

2. 創建eTS工程


(1) 打開DevEco Studio,在菜單欄選擇“File > New > New Project”。 

 

(2) 選擇工程模板“Empty Ability”,然後點擊Next。

 

圖2 選擇工程模板

 

(3) 工程配置時,註意將“Language”配置為“eTS”。

 

圖3 工程配置

 

(4) 最後點擊Finish,DevEco Studio就會自動創建一個eTS工程。 

 

3. 代碼實現


工程創建完成後,可以看到文件目錄結構如圖4所示。其中,“ets”為代碼實現目錄,聲明式UI實現的佈局及邏輯代碼都放在這個目錄裡面。 

 

圖4 文件目錄結構

 

本次“畫圖”應用的代碼都放在“entry/src/main/ets/default/pages/index.ets”文件中。

 

完整的實現代碼可從華為開發者論壇獲取:

https://developer.huawei.com/consumer/cn/forum/topic/0203718600132550166?fid=0101587866109860105&pid=0303718600132550762

 

下麵為大家介紹兩段關鍵代碼:

 

(1) 畫圖功能實現代碼

 

// 畫布
  @Builder Canvas() {
    ForEach(this.pathInfoArray, (pathInfo) => OnePath({ pathInfo: pathInfo })) // 遍歷構建所有畫圖路徑
    Stack() // 覆蓋層,用於接收觸摸事件,實現畫圖
      .width('100%')
      .height('100%')
      .onTouch((event: TouchEvent) => {
        switch (event.type) {
          case TouchType.Down: // 按下時,新建一條畫圖路徑
            this.pathInfoArray.push(new PathInfo(`M${event.touches[0].x} ${event.touches[0].y}`, this.paintSize, this.paintColor))
            break
          case TouchType.Move: // 移動或抬起時,補充畫圖路徑信息
          case TouchType.Up:
            this.pathInfoArray[this.pathInfoArray.length-1].commands += `L${event.touches[0].x} ${event.touches[0].y}`
            break
        }
      })
  }

 

以上代碼通過Canvas組件定義畫布,再通過onTouch組件監聽觸摸事件實現了畫圖功能。 

 

(2) “設置畫筆”的界面和功能實現代碼

 

// 設置畫筆組件
  @Builder SetPaint() {
    Panel(this.showSetPaint) {
      Column({ space: 30 }) {
        Row() {
          Text('畫圖效果:')
          Path()
            .width(200)
            .height(50)
            .backgroundColor(Color.White)
            .fillOpacity(0) // 不填充,只要stroke
            .commands(`M${vp2px(10)} ${vp2px(10)} S${vp2px(100)} ${vp2px(70)} ${vp2px(190)} ${vp2px(10)}`) // stroke路徑,弧線
            .strokeWidth(this.paintSize) // stroke寬度
            .stroke(this.paintColor) // stroke顏色
        }


        Row() {
          Text('畫筆大小:')
          Slider({ value: this.paintSize, min: this.PAINT_SIZE_MIN, max: this.PAINT_SIZE_MAX })
            .onChange((value) => this.paintSize = value) // 改變畫筆大小
            .width(200)
        }


        Row() {
          Text('畫筆顏色:')
          ForEach(this.COLORS, color => {
            Stack() {
              Stack()
                .width(color == this.paintColor ? 26 : 20) // 若是當前畫筆顏色,則放大一點顯示
                .height(color == this.paintColor ? 26 : 20)
                .backgroundColor(color)
                .onClick(() => this.paintColor = color) // 點擊改變畫筆顏色
            }
            .width(32)
            .height(32)
          })
        }
      }.width('100%').margin({ top: 30 })
    }.onChange((value: any) => {
      if (value.mode == 'mini') { // 最小顯示狀態時隱藏,不隱藏會阻擋觸摸事件
        this.showSetPaint = false
      }
    })
  }


以上代碼通過Panel、Column和Row等容器組件實現了“設置畫筆”界面的佈局。

 

此界麵包含三個部分:畫筆顏色、畫筆大小和畫圖效果。代碼中,通過Stack組件展示畫筆的顏色,通過Slider組件調整畫筆大小,通過Path組件繪製弧線來展示畫圖效果。最終實現效果如圖5所示。 

 

圖5 “設置畫筆”界面

 

至此,“畫圖”應用就開發完成啦!感興趣的小伙伴也可以去嘗試開發哦~ 

 

三、學習資源


使用eTS語言開發,僅用短短100行左右的代碼就實現了“畫圖”應用的界面和功能。這正是eTS語言的魅力所在——簡潔、高效!感興趣的小伙伴也趕緊加入我們,開啟你的eTS開發之旅吧~ 

 

我們為大家彙總了以下eTS開發的學習資源,強烈建議收藏哦! 

 

聲明式語法:

https://developer.harmonyos.com/cn/docs/documentation/doc-guides/ts-general-ui-concepts-0000001215268053

 

組件說明:

https://developer.harmonyos.com/cn/docs/documentation/doc-references/ts-universal-events-touch-0000001158261221

 

歡迎更多開發者與我們共用開發成果,分享技術解讀與經驗心得!

 

 


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

-Advertisement-
Play Games
更多相關文章
  • 一:安裝依賴軟體Erlang 安裝包otp_src_22.3.tar.gz,下載到部署伺服器tar -zxvf解壓 mv otp_src_22.3 ./erlang變更文件夾名字 可能需要安裝的依賴包 yum -y install make gcc gcc-c++ kernel-devel m4 n ...
  • 高速緩衝 概念 高速緩衝區是記憶體中的一塊記憶體,在塊設備與內核其它程式之間起著一個橋梁作用。內核程式如果需要訪問塊設備中的數據,都需要經過高速緩衝區來間接的操作。 高速緩衝區結構 高速緩衝區被劃分為1k大小的緩衝塊,與磁碟塊大小一致。高速緩衝區主要包含兩部分內容,緩衝塊頭結構(buffer_head, ...
  • 鏡像下載、功能變數名稱解析、時間同步請點擊 阿裡雲開源鏡像站 一、clearos介紹 ClearOS是一個基於CentOS和Red Hat Enterprise Linux的簡單,開源,價格合理的Linux操作系統。 它設計用於中小型企業作為伺服器或網路網關。 二、clearos安裝 下載地址:develo ...
  • 鏡像下載、功能變數名稱解析、時間同步請點擊 阿裡雲開源鏡像站 1. Tomcat 介紹 Apache Tomcat 是由 Apache Software Foundation(ASF)開發的一個開源 Java WEB 應用伺服器。 由於 Tomcat 是由 Java 語言實現的,因此需要運行在 Java 虛 ...
  • 一、 RDD創建 從本地文件系統中載入數據創建RDD sc:SparkContext(shell自動創建) 本地文件系統中載入數據創建RDD Spark採用textFile()方法來從文件系統中載入數據創建RDD 該方法把文件的URI作為參數,這個URI可以是: 本地文件系統的地址 或者是分散式文件 ...
  • 在寫sql語句的時候,數據類型是避不可少的一個環節,以下是我在學習的過程中總結的數據類型,僅供參考: 數值類型 類型 有符號(signed)範圍 無符號(unsigned)範圍 描述 tinyint (-128,127) (0,255) 小整數值 smallint (-32768,32767) (0 ...
  • 位元組跳動數據湖團隊在實時數倉構建寬表的業務場景中,探索實踐出的一種基於 Hudi Payload 的合併機制提出的全新解決方案。 位元組跳動數據湖團隊在實時數倉構建寬表的業務場景中,探索實踐出的一種基於 Hudi Payload 的合併機制提出的全新解決方案。 該方案在存儲層提供對多流數據的關聯能力, ...
  • ##數據分析 ###數據清洗:缺失值處理、1刪除記錄 2數據插補 3不處理 ###數據在https://book.tipdm.org/jc/219 中的資源包中數據和代碼chapter4\demo\data\catering_sale.xls ###常見插補方法 ####插值法-拉格朗日插值法 根據 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...