在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

鴻蒙原生繪圖API:從基礎到高階的繪制之旅(基礎版)

陳姚豐 ? 來源:jf_83680738 ? 作者:jf_83680738 ? 2025-03-16 15:58 ? 次閱讀
theme: hydrogen

大家好,歡迎來到莓創IT技術分享頻道,我是陳楊。由于經常有小伙伴一直給我反饋說莓創圖表(mccharts)數據多的時候經常卡頓,很無奈之前做動畫的時候沒考慮ArkTs的性能瓶頸,導致現在又要重構開發。于是我重新翻閱文檔,看看有沒有新的方式來解決。在翻閱官網文檔的時候,無意間看到這句話。

發現了@ohos.graphics.drawing模塊性能竟然比canvas好,所以最近我有時間都在學習這個API的功能,準備將莓創圖表(mccharts)進行性能升級,打造更加完美的圖表組件庫。這次我也給大家好好分享一下這個API,給大家準備了三篇,寫的不好請見諒。

一、導入模塊(@ohos.graphics.drawing)

要使用這個繪圖模塊,第一步得把它導入到咱們的代碼里。在代碼里加上這行:

import { drawing } from '@kit.ArkGraphics2D';

這樣,咱們就可以使用模塊里的各種功能啦。

二、繪制基本圖形

(一)繪制矩形

鴻蒙繪圖里,繪制矩形有兩種常用方法,都在Canvas類里。
第一種方法是drawRect(rect: common2D.Rect): void。這里的rect參數是一個common2D.Rect類型的對象,它就像是矩形的“定位器”和“尺碼表”,通過設置left(左邊的位置)、right(右邊的位置)、top(上邊的位置)和bottom(下邊的位置),能精確確定矩形在畫布上的位置和大小。來看個例子:

import { common2D, drawing } from '@kit.ArkGraphics2D';
class DrawingRenderNode {
    draw(context) {
        const canvas = context.canvas;
        const rect = { left: 50, right: 150, top: 50, bottom: 150 };
        canvas.drawRect(rect);
    }
}

從API version 12開始,又多了一個更方便的方法drawRect(left: number, top: number, right: number, bottom: number): void。這個方法直接傳入矩形四個角的坐標就行,代碼寫起來更簡潔,而且性能還更好呢!比如:

canvas.drawRect(50, 50, 150, 150);

(二)繪制圓形

繪制圓形就用drawCircle(x: number, y: number, radius: number): void這個方法。xy代表圓心在畫布上的坐標,就像給圓心定個“家”,radius就是圓的半徑啦,而且半徑得是大于0的正數,不然就畫不出圓咯。舉個例子:

canvas.drawCircle(100, 100, 30);

這行代碼就是在坐標(100, 100)的地方畫一個半徑為30的圓。想象一下,就像在畫布上找到了一個中心點,然后以這個點為中心,用半徑為30的“畫筆”轉一圈,一個圓就畫好啦。

三、設置顏色和混合模式

(一)繪制顏色

給圖形上色可以用drawColor方法,它有兩種形式。
第一種drawColor(color: common2D.Color, blendMode?: BlendMode): void,這里的colorARGB格式的顏色,ARGB分別代表透明度(Alpha)、紅色(Red)、綠色(Green)、藍色(Blue)。blendMode是顏色混合模式,默認是SRC_OVER。比如咱們想畫個紅色的圖形,代碼可以這樣寫:

import { common2D, drawing } from '@kit.ArkGraphics2D';
canvas.drawColor({ alpha: 255, red: 255, green: 0, blue: 0 }, drawing.BlendMode.SRC_OVER);

從API version 12開始,又有了一個更簡單直接的方法drawColor(alpha: number, red: number, green: number, blue: number, blendMode?: BlendMode): void。直接把顏色通道的值傳進去就行,用起來更方便,性能也更好。像這樣:

canvas.drawColor(255, 255, 0, 0, drawing.BlendMode.SRC_OVER);

(二)顏色混合模式

顏色混合模式就像是給圖形顏色玩“魔法組合”,BlendMode枚舉里有好多有趣的模式可以選擇。比如說CLEAR模式,用了它,繪制區域就會變得全透明,就好像圖形隱身了一樣。看代碼:

canvas.drawColor({ alpha: 255, red: 255, green: 0, blue: 0 }, drawing.BlendMode.CLEAR);

而默認的SRC_OVER模式,是在目標像素的上面繪制源像素,而且還會考慮源像素的透明度,這樣顏色疊加起來就會有不一樣的效果,讓圖形看起來更有層次感。

四、案例:繪制一個多彩的界面

咱們來綜合運用這些知識,畫一個簡單的多彩界面,不過顯示比較麻煩。假設要畫一個藍色的矩形,再在上面畫一個紅色的圓形,代碼可以這么寫:

import { UIContext, NodeController, FrameNode, RenderNode, DrawContext } from '@kit.ArkUI';
import { common2D, drawing } from '@kit.ArkGraphics2D';

// 1. 自定義RenderNode
export class MyRenderNode extends RenderNode {
  async draw(context: DrawContext) {
    const canvas = context.canvas;
        // 繪制藍色矩形
        const blueRect = { left: 30, right: 130, top: 30, bottom: 130 };
        canvas.drawColor({ alpha: 255, red: 0, green: 0, blue: 255 }, drawing.BlendMode.SRC);
        canvas.drawRect(blueRect);
        // 繪制紅色圓形
        canvas.drawColor({ alpha: 255, red: 255, green: 0, blue: 0 }, drawing.BlendMode.SRC);
        canvas.drawCircle(80, 80, 30);
  }
}

// 2. 自定義NodeController
export class MyNodeController extends NodeController {
  private rootNode: FrameNode | null = null;
  myRenderNode = new MyRenderNode();

  makeNode(uiContext: UIContext): FrameNode {
    this.rootNode = new FrameNode(uiContext);
    if (this.rootNode === null) {
      return this.rootNode
    }

    const renderNode = this.rootNode.getRenderNode();
    if (renderNode !== null) {
      this.myRenderNode.backgroundColor = 0xffffffff;
      this.myRenderNode.frame = { x: 0, y: 0, width: 4800, height: 4800 };
      this.myRenderNode.pivot = { x: 0.2, y: 0.8 }
      this.myRenderNode.scale = { x: 1, y: 1 }
      renderNode.appendChild(this.myRenderNode);
      renderNode.clipToFrame = true
    }
    return this.rootNode;
  }
}

@Entry
@Component
struct RenderTest {
  @State message: string = 'hello'
  build() {
    Row() {
      Column() {
        // 4. 將自定義NodeController進行顯示
        NodeContainer(new MyNodeController())
          .width('100%')
      }
      .width('100%')
      .height('80%')
    }
    .height('100%')
  }
}

在這段代碼里,先設置顏色為藍色,用SRC混合模式填充矩形區域,再繪制藍色矩形。接著設置顏色為紅色,同樣用SRC混合模式,然后繪制紅色圓形。運行這段代碼,就能看到一個藍色矩形上面有個紅色圓形的界面啦。

今天咱們學習了鴻蒙繪圖@ohos.graphics.drawing模塊的基礎用法,包括導入模塊、繪制基本圖形、設置顏色和混合模式,還做了一個小案例。掌握了這些基礎,后面咱們就能繼續探索進階和高階的繪圖技巧,畫出更厲害的圖形啦!趕緊動手試試吧,要是遇到問題,多調試調試代碼,或者去官方文檔里找找答案。加油,期待大家畫出超酷的圖形!

也可以加入我們鴻蒙技術交流群,開發鴻蒙原生應用過程有啥問題都可以在群溝通,互相幫助,一起進步。

在開發鴻蒙原生應用的時候,需要用到圖表組件的也可以嘗試使用我們封裝的。圖表的官網地址:[meichuangit.net.cn/]

審核編輯 黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • API
    API
    +關注

    關注

    2

    文章

    1545

    瀏覽量

    63195
  • 鴻蒙
    +關注

    關注

    57

    文章

    2464

    瀏覽量

    43569
收藏 人收藏

    評論

    相關推薦

    米哈游啟動鴻蒙原生應用開發,給程序員帶來了什么信息?

    首先,不止米哈與鴻蒙合作原生應用開發。在這之前還有其他互聯網大廠已經與鴻蒙開發合作。HarmonyOS NEXT系統也在積極籌備中,已有400多家合作伙伴加入,全面啟動了鴻蒙
    發表于 01-07 22:25

    鴻蒙Harmony是如何影響Android工程師的呢?

    官宣開始進行鴻蒙原生應用的研發之旅。迄今為止,已有超過 400 家合作伙伴投身其中,共同投入鴻蒙原生
    發表于 01-14 22:14

    HarmonyOS SDK,助力開發者打造煥然一新的鴻蒙原生應用

    鴻蒙生態千帆啟航儀式于 1 月 18 日正式啟動。 2019 年 HarmonyOS 正式發布 2020 年“沒有人能夠熄滅漫天星光”,今天,滿天星光終匯成璀璨星河,HarmonyOS NEXT
    發表于 01-19 10:31

    深圳市24年,實現鴻蒙原生應用數占全國總量10%以上

    、游戲等各個細分領域和場景。 此前華為終端云總裁朱勇剛也曾透露:“預計今年年終,將有5000 款應用完成原生鴻蒙開發,未來的星辰大海是支持50萬款應用。 《深圳市支持開源鴻蒙
    發表于 03-04 21:42

    實錘!騰訊終于擁抱鴻蒙生態,微信鴻蒙原生版本即將上線

    大家都知道, 目前已知純血鴻蒙星河版next將于今年6月份開啟Bate版本的測試 ,也就是說原生鴻蒙系統快上線了。 而目前對于鴻蒙生態的發展,大家最關心的恐怕只有騰訊系的微信和QQ是否
    發表于 04-30 21:14

    鴻蒙原生開發手記:01-元服務開發

    簡介 元服務是鴻蒙中的一種輕量應用形態,無需下載,直接運行。類似于微信小程序,但與小程序不同的是,元服務更加輕量。 元服務使用原生開發,是系統級提供的,無論易用性、性能、體驗上,都要比小程序好
    發表于 11-14 17:28

    鴻蒙原生頁面高性能解決方案上線OpenHarmony社區 助力打造高性能原生應用

    NEXT的原生頁面高性能解決方案,頁面滑動、跳轉及應用冷啟動等關鍵環節,為開發者提供全面的支持。目前,這些解決方案均已上線OpenHarmony開源社區,可在OpenHarmony三方庫中心倉進行搜索,歡迎開發者多多使用和共建,打造更極致性能的
    發表于 01-02 18:00

    鴻蒙原生應用開發也可以使用DeepSeek了

    和無私奉獻的辛勤工作,才讓我們能夠輕松地將強大的DeepSeek模型集成鴻蒙原生應用的開發環境中,為開發效率的提升提供了強大的技術支持,向他們的這種精神和奉獻致敬! 下載鏈接:http
    發表于 02-20 18:06

    繪圖API函數

    繪圖API函數 一、 實驗目的學習使用嵌入式系統的繪圖API 函數。理解繪圖設備上下文(DC)在多任務操作系統中的作用。會使用繪
    發表于 12-25 23:56 ?2085次閱讀
    <b class='flag-5'>繪圖</b>的<b class='flag-5'>API</b>函數

    串口屏LUA教程7-繪圖API使用說明

    串口屏LUA教程7-繪圖API使用說明
    發表于 04-29 13:12 ?13次下載

    京東與華為鴻蒙合作 京東啟動鴻蒙原生應用開發

     1月10日,華為和京東宣布正式合作,共同推動鴻蒙原生應用的開發,進一步完善鴻蒙生態系統。
    的頭像 發表于 01-11 16:22 ?1130次閱讀

    使用 Taro 開發鴻蒙原生應用 —— 快速上手,鴻蒙應用開發指南

    隨著鴻蒙系統的不斷完善,許多應用廠商都希望將自己的應用移植鴻蒙平臺上。最近,Taro 發布了 v4.0.0-beta.x 版本,支持使用 Taro 快速開發鴻蒙
    的頭像 發表于 02-02 16:09 ?1159次閱讀
    使用 Taro 開發<b class='flag-5'>鴻蒙</b><b class='flag-5'>原生</b>應用 —— 快速上手,<b class='flag-5'>鴻蒙</b>應用開發指南

    哪吒汽車APP啟動鴻蒙原生應用開發

    哪吒汽車正式簽約,啟動鴻蒙原生應用開發;在5月17日,在上海市經濟和信息化委員會指導的“千帆競發啟航 共筑鴻蒙生態——HDD上海站·鴻蒙原生
    的頭像 發表于 05-18 09:48 ?1352次閱讀

    華為所有新手機將搭載鴻蒙 余承東:2025年起華為新品將全部搭載原生鴻蒙系統

    鴻蒙兩個選擇,但是2015年華為新品將全部搭載原生鴻蒙。 Mate70 / Pro / Pro+ 及 Mate X6 系列旗艦手機支持到手即可升級
    的頭像 發表于 11-27 15:42 ?3694次閱讀

    鴻蒙原生繪圖API基礎高階繪制之旅(進階版)

    theme: hydrogen 家人們,還記得上次一起探索的鴻蒙繪圖API基礎用法嗎?上手是不是特別容易!今天,咱們就接著深入,開啟進階版的學習,解鎖更多復雜又炫酷的繪圖技能,讓你的
    的頭像 發表于 03-16 15:57 ?290次閱讀
    主站蜘蛛池模板: 久久久久久久综合狠狠综合 | 欧美黑人性色黄在线视频 | 美女牲交视频一级毛片 | 视频一区二区在线 | 午夜嘿嘿| 久久综合九色综合98一99久久99久 | 日本在线视频一区二区 | 免费观看一级特黄三大片视频 | 国产香蕉视频在线播放 | 99r8这里精品热视频免费看 | 日韩国产片 | 女主播扒开内衣让粉丝看个够 | 好大好猛好爽好深视频免费 | 中国videos偷窥| 黄色三级录像 | 在线你懂的 | 在线观看亚洲人成网站 | 四虎国产精品永免费 | 中国免费黄色片 | 免费看欧美一级特黄α大片 | 在线天堂中文在线资源网 | 成 人色 网 站 欧美大片在线观看 | 国产精品美女久久久久网站 | 激情五月婷婷综合网 | 男人j进女人j的一进一出视频 | 成人三级影院 | 国产午夜视频在永久在线观看 | 分分操免费视频在线观看 | 性夜黄a爽爽免费视频国产 羞羞答答xxdd影院欧美 | 久久国产精品99久久久久久牛牛 | 国产一级做a爱免费视频 | 日本护士撒尿 | 亚洲午夜精品久久久久久成年 | 国产免费高清福利拍拍拍 | 夜夜操夜夜操 | 色偷偷综合网 | xxx黄色片| 免费看的一级毛片 | 色婷婷综合在线 | 日韩精品视频免费观看 | 日本三区四区免费高清不卡 |