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

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

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

3天內不再提示

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

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

家人們,還記得上次一起探索的鴻蒙繪圖API基礎用法嗎?上手是不是特別容易!今天,咱們就接著深入,開啟進階版的學習,解鎖更多復雜又炫酷的繪圖技能,讓你的鴻蒙應用界面直接“出圈”!

我將結合實際開發場景,豐富繪制路徑、圓角矩形、繪制圖片、畫筆與畫刷、裁剪區域設置這幾個方面的案例,讓示例更具實操性和參考價值。

一、復雜圖形繪制

(一)路徑繪制

當繪制不規則圖形,比如獨特的圖標、創意的裝飾元素時,Path類就成了得力助手,它能幫我們創建并操控各種復雜路徑。這些路徑可以由直線、弧線、貝塞爾曲線等組合而成。

創建路徑對象很簡單:

let path = new drawing.Path();

接著設置路徑起始點:

path.moveTo(10, 10);

然后添加線段:

path.lineTo(100, 100);

繪制弧線也不難:

path.arcTo(100, 100, 200, 200, 0, 90);

除了弧線,還能使用二階貝塞爾曲線(quadTo)和三階貝塞爾曲線(cubicTo) 。

案例:繪制一個五角星
五角星的繪制需要結合直線和貝塞爾曲線,利用Path類的相關方法,通過精確計算每個頂點的坐標來實現。

let path = new drawing.Path();
// 五角星的半徑
const radius = 100;
// 計算五角星頂點坐標的輔助函數
function calculateVertex(angle) {
    return {
        x: Math.sin(angle) * radius + 200,
        y: -Math.cos(angle) * radius + 200
    };
}
// 五角星的內角角度
const angles = [
    0,
    Math.PI * 2 / 5,
    Math.PI * 4 / 5,
    Math.PI * 6 / 5,
    Math.PI * 8 / 5
];
// 移動到第一個頂點
path.moveTo(calculateVertex(angles[0]).x, calculateVertex(angles[0]).y);
for (let i = 1; i < 5; i++) {
    const vertex = calculateVertex(angles[i]);
    path.lineTo(vertex.x, vertex.y);
}
// 閉合路徑
path.close();
// 附加畫筆并繪制路徑
let pen = new drawing.Pen();
pen.setStrokeWidth(4);
pen.setColor({ alpha: 255, red: 255, green: 0, blue: 0 });
canvas.attachPen(pen);
canvas.drawPath(path);
canvas.detachPen();

在這個案例中,通過數學計算得到五角星每個頂點的坐標,利用moveTolineTo方法依次連接各個頂點,最后使用close方法閉合路徑,實現五角星的繪制。

(二)圓角矩形繪制

在追求界面美觀與柔和的設計中,圓角矩形很常用。使用drawRoundRect方法可以實現:

drawRoundRect(roundRect: RoundRect): void

其中,RoundRect對象包含了矩形的位置、大小以及圓角半徑信息。

案例:繪制一個卡片式布局
在很多應用中,卡片式布局很常見,使用圓角矩形可以輕松實現。

import { common2D, drawing } from '@kit.ArkGraphics2D';
// 卡片的位置和大小
let rect = { left: 50, top: 50, right: 250, bottom: 150 };
// 圓角半徑
let roundRect = new drawing.RoundRect(rect, 15, 15);
// 附加畫刷設置背景顏色
let brush = new drawing.Brush();
brush.setColor({ alpha: 255, red: 240, green: 240, blue: 240 });
canvas.attachBrush(brush);
canvas.drawRoundRect(roundRect);
canvas.detachBrush();
// 附加畫筆繪制邊框
let pen = new drawing.Pen();
pen.setStrokeWidth(2);
pen.setColor({ alpha: 255, red: 128, green: 128, blue: 128 });
canvas.attachPen(pen);
canvas.drawRoundRect(roundRect);
canvas.detachPen();

在這個案例中,先定義了卡片的位置、大小和圓角半徑,創建RoundRect對象。然后分別使用畫刷設置背景顏色,使用畫筆繪制邊框,實現了一個簡單的卡片式布局。

二、圖像繪制

(一)繪制圖片

在應用開發中,在畫布上繪制圖片很常見。drawImage系列方法可以滿足需求:

drawImage(pixelmap: image.PixelMap, left: number, top: number, samplingOptions?: SamplingOptions): void

pixelmap是要繪制的圖片對象,lefttop指定圖片在畫布上的位置,samplingOptions用于設置采樣選項(API version 12+支持)。

從API version 12開始,新增了更靈活的方法。drawImageRect可以將圖片繪制到指定區域:

drawImageRect(pixelmap: image.PixelMap, dstRect: common2D.Rect, samplingOptions?: SamplingOptions): void

drawImageRectWithSrc則能將圖片的指定區域繪制到畫布的指定區域:

drawImageRectWithSrc(pixelmap: image.PixelMap, srcRect: common2D.Rect, dstRect: common2D.Rect, samplingOptions?: SamplingOptions, constraint?: SrcRectConstraint): void

案例:制作一個圖片畫廊
假設我們要制作一個簡單的圖片畫廊,展示三張圖片,并且對其中一張圖片進行局部放大展示。

import { image, drawing, common2D } from '@kit.ArkUI';
// 加載三張圖片
Promise.all([
    image.createPixelMap(/* 圖片1數據 */),
    image.createPixelMap(/* 圖片2數據 */),
    image.createPixelMap(/* 圖片3數據 */)
]).then(([pixelMap1, pixelMap2, pixelMap3]) = > {
    // 繪制第一張圖片
    canvas.drawImage(pixelMap1, 20, 20);
    // 繪制第二張圖片
    canvas.drawImage(pixelMap2, 150, 20);
    // 繪制第三張圖片,并對其局部放大展示
    const srcRect = { left: 50, top: 50, right: 150, bottom: 150 };
    const dstRect = { left: 280, top: 20, right: 400, bottom: 140 };
    canvas.drawImageRectWithSrc(pixelMap3, srcRect, dstRect);
});

在這個案例中,使用Promise.all同時加載三張圖片,然后分別使用drawImagedrawImageRectWithSrc方法將圖片繪制到畫布上,實現了一個簡單的圖片畫廊效果,并且對第三張圖片進行了局部放大展示。

三、繪制狀態與屬性設置

(一)畫筆與畫刷

在繪制圖形時,Pen類和Brush類能幫我們設置線條和填充屬性,讓圖形更具個性。

Pen類可以設置線條顏色、寬度、是否抗鋸齒等。

let pen = new drawing.Pen();
pen.setStrokeWidth(5);
pen.setColor({ alpha: 255, red: 255, green: 0, blue: 0 });
pen.setAntiAlias(true);
canvas.attachPen(pen);
// 繪制圖形
canvas.drawRect(10, 10, 110, 110);
canvas.detachPen();

Brush類用于設置填充屬性,比如填充顏色。

let brush = new drawing.Brush();
brush.setColor({ alpha: 255, red: 0, green: 255, blue: 0 });
canvas.attachBrush(brush);
// 繪制圖形
canvas.drawCircle(100, 100, 50);
canvas.detachBrush();

案例:繪制一個立體按鈕
通過畫筆和畫刷的配合,可以繪制出具有立體感的按鈕。

// 繪制按鈕背景
let brush = new drawing.Brush();
brush.setColor({ alpha: 255, red: 100, green: 100, blue: 255 });
canvas.attachBrush(brush);
let rect = { left: 100, top: 100, right: 200, bottom: 150 };
canvas.drawRoundRect(new drawing.RoundRect(rect, 10, 10));
canvas.detachBrush();
// 繪制按鈕邊框,模擬立體效果
let pen = new drawing.Pen();
pen.setStrokeWidth(2);
// 上邊框和左邊框顏色較淺
pen.setColor({ alpha: 255, red: 200, green: 200, blue: 255 });
canvas.attachPen(pen);
canvas.drawLine(100, 100, 200, 100);
canvas.drawLine(100, 100, 100, 150);
canvas.detachPen();
// 下邊框和右邊框顏色較深
pen.setColor({ alpha: 255, red: 50, green: 50, blue: 150 });
canvas.attachPen(pen);
canvas.drawLine(100, 150, 200, 150);
canvas.drawLine(200, 100, 200, 150);
canvas.detachPen();

在這個案例中,先使用畫刷繪制按鈕的背景,然后通過畫筆分別設置不同顏色繪制邊框,模擬出立體效果。

(二)裁剪區域設置

有時候,我們只想在畫布的特定區域進行繪制,clipRect方法可以實現:

canvas.clipRect({ left: 50, top: 50, right: 150, bottom: 150 }, drawing.ClipOp.DIFFERENCE, true);

第一個參數指定裁剪區域的矩形,第二個參數是裁剪操作類型,ClipOp.DIFFERENCE表示取差集,即只保留畫布上不在裁剪區域內的部分;第三個參數表示是否反轉裁剪區域。

案例:制作一個圖片蒙版效果
通過設置裁剪區域,可以制作圖片蒙版效果。

import { image, drawing, common2D } from '@kit.ArkUI';
image.createPixelMap(/* 圖片數據 */).then((pixelMap) = > {
    // 設置裁剪區域為圓形
    const circleRect = { left: 100, top: 100, right: 200, bottom: 200 };
    const circlePath = new drawing.Path();
    circlePath.addCircle(150, 150, 50);
    canvas.clipPath(circlePath, drawing.ClipOp.INTERSECT);
    // 繪制圖片
    canvas.drawImage(pixelMap, 0, 0);
    // 清除裁剪區域
    canvas.restore();
});

在這個案例中,先創建一個圓形路徑,使用clipPath方法設置裁剪區域為圓形,然后繪制圖片,這樣圖片就只會顯示在圓形區域內,實現了圖片蒙版效果。最后使用restore方法清除裁剪區域,以便后續正常繪制。

家人們,到這里,鴻蒙繪圖API的進階內容就學完啦!是不是感覺自己離大神又近了一步?趕緊動手實踐,把這些知識運用到實際開發中。要是遇到問題,別擔心,去官方文檔里找找答案,或者和技術交流群里的小伙伴們一起討論。下一次,咱們將挑戰高階版,一起探索更高級的繪圖技巧,期待與大家共同進步!

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

如果你對案例還有其他修改意見,比如增減特定場景案例、調整代碼注釋等,歡迎隨時提出。

審核編輯 黃宇

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

    關注

    2

    文章

    1562

    瀏覽量

    63518
  • 鴻蒙
    +關注

    關注

    59

    文章

    2508

    瀏覽量

    43768
收藏 人收藏

    評論

    相關推薦
    熱點推薦

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

    首先,不止米哈與鴻蒙合作原生應用開發。在這之前還有其他互聯網大廠已經與鴻蒙開發合作。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

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

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

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

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

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

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

    Kuikly鴻蒙版正式開源 —— 揭秘卓越性能適配之旅

    為Kotlin Native增加鴻蒙平臺的互操作文件,對接系統API,同時調整運行時中涉及架構、平臺的判斷等邏輯,使其實現對鴻蒙平臺的支持。 完成初步適配后,通過Kotlin官方的
    發表于 06-04 16:46

    繪圖API函數

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

    《MATLAB進階》程序與數據資料下載

    《MATLAB進階》程序與數據
    發表于 01-13 10:09 ?18次下載

    Docs倉 開啟OpenHarmony社區達人進階之旅

    OpenHarmony 社區貢獻進階之旅》。她:文檔的作用、好文檔的三個特性、文檔貢獻的形式、文檔 PR 的類別、OpenHarmony社區文檔類型等 6 個方面為大家詳細介紹
    的頭像 發表于 06-30 15:17 ?1128次閱讀

    【C語言進階】C語言指針的高階用法

    【C語言進階】C語言指針的高階用法
    的頭像 發表于 08-31 13:24 ?2690次閱讀

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

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

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

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

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

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

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

    ArkTs的性能瓶頸,導致現在又要重構開發。于是我重新翻閱文檔,看看有沒有新的方式來解決。在翻閱官網文檔的時候,無意間看到這句話。 發現了 @ohos.graphics.drawing 模塊性能竟然比canvas好,所以最近我有時間都在學習這個API的功能,準備將莓創圖表(mccharts)進行性能升級,打造
    的頭像 發表于 03-16 15:58 ?426次閱讀