国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

鴻蒙開發(fā)-UI-圖形-繪制自定義圖形

這篇具有很好參考價(jià)值的文章主要介紹了鴻蒙開發(fā)-UI-圖形-繪制自定義圖形。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

鴻蒙開發(fā)-UI-組件

鴻蒙開發(fā)-UI-組件2

鴻蒙開發(fā)-UI-組件3

鴻蒙開發(fā)-UI-氣泡/菜單

鴻蒙開發(fā)-UI-頁面路由

鴻蒙開發(fā)-UI-組件導(dǎo)航-Navigation

鴻蒙開發(fā)-UI-組件導(dǎo)航-Tabs

鴻蒙開發(fā)-UI-圖形-圖片

鴻蒙開發(fā)-UI-圖形-繪制幾何圖形

文章目錄

前言

一、使用畫布組件繪制自定義圖形

1.初始化畫布組件

3.畫布組件常用方法

1.基礎(chǔ)形狀繪制

2.文本繪制

3.繪制圖片和圖像像素信息處理

4.其他方法

二、場景示例

1.繪制基礎(chǔ)圖形

2.繪制不規(guī)則圖形

3.繪制圖片和圖像像素信息處理

總結(jié)


前言

上文學(xué)習(xí)了鴻蒙開發(fā)UI顯示圖形關(guān)于幾何圖形繪制的相關(guān)知識,了解了相關(guān)圖形繪制組件以及兩種繪制方式,同時(shí)學(xué)習(xí)了形狀視口來做圖形的縮放效果,本文將學(xué)習(xí)使用畫布繪制自定義圖形

一、使用畫布組件繪制自定義圖形

Canvas提供畫布組件,用于自定義繪制圖形

CanvasRenderingContext2D對象和OffscreenCanvasRenderingContext2D對象在Canvas組件上進(jìn)行繪制,繪制對象可以是基礎(chǔ)形狀、文本、圖片等,有三種形式在畫布繪制自定義圖形

1. 使用CanvasRenderingContext2D對象在Canvas畫布上繪制

2. 離屏繪制,將需要繪制的內(nèi)容先繪制在緩存區(qū),再將其轉(zhuǎn)換成圖片繪制到Canvas上,首先通過transferToImageBitmap方法將離屏畫布最近渲染的圖像創(chuàng)建為一個(gè)ImageBitmap對象,然后通過CanvasRenderingContext2D對象的transferFromImageBitmap方法顯示給定的ImageBitmap對象,使用案例參考場景示例中第三個(gè)繪制圖片和圖像像素信息處理

3.在Canvas上加載Lottie動(dòng)畫時(shí),需要先下載Lottie

1.初始化畫布組件

onReady(event: () =>?void)是Canvas組件初始化完成時(shí)的事件回調(diào)

調(diào)用該事件后,可獲取Canvas組件的確定寬高,進(jìn)一步使用CanvasRenderingContext2D對象和OffscreenCanvasRenderingContext2D對象調(diào)用相關(guān)API進(jìn)行圖形繪制

Canvas(this.context)
  .width('100%')
  .height('100%')
  .backgroundColor('#F5DC62')
  .onReady(() => {
    this.context.fillStyle = '#0097D4';
    this.context.fillRect(50, 50, 100, 100);
  })

2.畫布組件繪制方式

Canvas組件生命周期接口onReady()調(diào)用之后,開發(fā)者繪制有兩種方式

1.通過CanvasRenderingContext2D對象和OffscreenCanvasRenderingContext2D對象直接調(diào)用相關(guān)API進(jìn)行繪制

//用來配置CanvasRenderingContext2D對象和OffscreenCanvasRenderingContext2D對象的參數(shù),包括是否開啟抗鋸齒。true表明開啟抗鋸齒
  private settings: RenderingContextSettings = new RenderingContextSettings(true)
  private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)

Canvas(this.context)
  .width('100%')
  .height('100%')
  .backgroundColor('#F5DC62')
  .onReady(() =>{
    this.context.beginPath();
    this.context.moveTo(50, 50);
    this.context.lineTo(280, 160);
    this.context.stroke();
   })

2.先單獨(dú)定義path2d對象構(gòu)造理想的路徑,再通過調(diào)用CanvasRenderingContext2D對象和OffscreenCanvasRenderingContext2D對象的stroke接口或者fill接口進(jìn)行繪制

//用來配置CanvasRenderingContext2D對象和OffscreenCanvasRenderingContext2D對象的參數(shù),包括是否開啟抗鋸齒。true表明開啟抗鋸齒
  private settings: RenderingContextSettings = new RenderingContextSettings(true)
  private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)

Canvas(this.context)
  .width('100%')
  .height('100%')
  .backgroundColor('#F5DC62')
  .onReady(() =>{
     let region = new Path2D();
     region.arc(100, 75, 50, 0, 6.28);
     this.context.stroke(region);
  })

3.畫布組件常用方法

1.基礎(chǔ)形狀繪制

可以通過arc(繪制弧線路徑)、?ellipse(繪制一個(gè)橢圓)、rect(創(chuàng)建矩形路徑)等接口繪制基礎(chǔ)形狀

Canvas(this.context)
  .width('100%')
  .height('100%')
  .backgroundColor('#F5DC62')
  .onReady(() =>{
     //繪制矩形
     this.context.beginPath();
     this.context.rect(100, 50, 100, 100);
     this.context.stroke();
     //繪制圓形
     this.context.beginPath();
     this.context.arc(150, 250, 50, 0, 6.28);
     this.context.stroke();
     //繪制橢圓
     this.context.beginPath();
     this.context.ellipse(150, 450, 50, 100, Math.PI * 0.25, Math.PI * 0, Math.PI * 2);
     this.context.stroke();
  })

2.文本繪制

可以通過fillText(繪制填充類文本)、strokeText(繪制描邊類文本)等接口進(jìn)行文本繪制

Canvas(this.context)
  .width('100%')
  .height('100%')
  .backgroundColor('#F5DC62')
  .onReady(() =>{
     //繪制填充類文本
     this.context.font = '50px sans-serif';
     this.context.fillText("Hello World!", 50, 100);
     //繪制描邊類文本
     this.context.font = '55px sans-serif';
     this.context.strokeText("Hello World!", 50, 150);
  })

3.繪制圖片和圖像像素信息處理

通過drawImage(圖像繪制)、putImageData(使用ImageData數(shù)據(jù)填充新的矩形區(qū)域)等接口繪制圖片

通過createImageData(創(chuàng)建新的ImageData 對象)、getPixelMap(以當(dāng)前canvas指定區(qū)域內(nèi)的像素創(chuàng)建PixelMap對象)、getImageData(以當(dāng)前canvas指定區(qū)域內(nèi)的像素創(chuàng)建ImageData對象)等接口進(jìn)行圖像像素信息處理

4.其他方法

漸變(CanvasGradient對象)相關(guān)的方法:createLinearGradient(創(chuàng)建一個(gè)線性漸變色)、createRadialGradient(創(chuàng)建一個(gè)徑向漸變色)等

Canvas(this.context)
  .width('100%')
  .height('100%')
  .backgroundColor('#F5DC62')
  .onReady(() =>{
     //創(chuàng)建一個(gè)徑向漸變色的CanvasGradient對象
     let grad = this.context.createRadialGradient(200,200,50, 200,200,200)
     //為CanvasGradient對象設(shè)置漸變斷點(diǎn)值,包括偏移和顏色
     grad.addColorStop(0.0, '#E87361');
     grad.addColorStop(0.5, '#FFFFF0');
     grad.addColorStop(1.0, '#BDDB69');
     //用CanvasGradient對象填充矩形
     this.context.fillStyle = grad;
     this.context.fillRect(0, 0, 400, 400);
  })

二、場景示例

1.繪制基礎(chǔ)圖形

@Entry
@Component
struct ClearRect {
//step1: 定義CanvasRenderingContext2D對象參數(shù)并創(chuàng)建一個(gè)對象用于繪圖,
 private settings: RenderingContextSettings = new RenderingContextSettings(true);
 private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings);

 
  build() {
    Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
      Canvas(this.context)
        .width('100%')
        .height('100%')
        .backgroundColor('#F5DC62')
        .onReady(() =>{
//step2:Canvas組件初始化后,回調(diào)函數(shù)中繪制圖形,設(shè)定填充樣式,填充顏色設(shè)為藍(lán)色
          this.context.fillStyle = '#0097D4';
//step3:以(50, 50)為左上頂點(diǎn),畫一個(gè)寬高200的矩形,該矩形填充顏色為step2設(shè)置顏色
          this.context.fillRect(50,50,200,200);
//setp4:以(70, 70)為左上頂點(diǎn),清除寬150高100的區(qū)域
          this.context.clearRect(70,70,150,100);
      })
    }
    .width('100%')
    .height('100%')
  }
}

UI渲染

鴻蒙系統(tǒng)怎么 寫出 橢圓外框和內(nèi)框,鴻蒙開發(fā),harmonyos,ui,華為

2.繪制不規(guī)則圖形

@Entry
@Component
struct Path2d {
//step1:創(chuàng)建CanvasRenderingContext2D對象用戶繪制圖形
  private settings: RenderingContextSettings = new RenderingContextSettings(true);
  private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings);

  build() {
    Row() {
      Column() {
        Canvas(this.context)
          .width('100%')
          .height('100%')
          .backgroundColor('#F5DC62')
          .onReady(() =>{
//step2:使用Path2D的接口構(gòu)造一個(gè)五邊形
            let path = new Path2D();
            path.moveTo(150, 50);
            path.lineTo(50, 150);
            path.lineTo(100, 250);
            path.lineTo(200, 250);
            path.lineTo(250, 150);
            path.closePath();
//step3:設(shè)定填充色為藍(lán)色
            this.context.fillStyle = '#0097D4';
//step4:使用step3設(shè)置的填充方式,將Path2D描述的五邊形繪制在canvas組件內(nèi)部
            this.context.fill(path);
          })
      }
      .width('100%')
    }
    .height('100%')
  }
}

UI渲染

鴻蒙系統(tǒng)怎么 寫出 橢圓外框和內(nèi)框,鴻蒙開發(fā),harmonyos,ui,華為

3.繪制圖片和圖像像素信息處理

@Entry
@Component
struct GetImageData {
//step1:定義CanvasRenderingContext2D對象和OffscreenCanvasRenderingContext2D對象
 private settings: RenderingContextSettings = new RenderingContextSettings(true)
 private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
 private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings)
//step2:定義接收離屏繪制的圖像對象,用于繪制到canvas組件上
 private img:ImageBitmap = new ImageBitmap("/common/images/1234.png")
 
  build() {
    Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
      Canvas(this.context)
        .width('100%')
        .height('100%')
        .backgroundColor('#F5DC62')
        .onReady(() =>{
//step3:調(diào)用drawImage接口將圖片畫在(0,0)為起點(diǎn),寬高130的區(qū)域
          this.offContext.drawImage(this.img,0,0,130,130);
//step4:調(diào)用getImageData接口,獲得canvas組件區(qū)域中,(50,50)為起點(diǎn),寬高130范圍內(nèi)的繪制內(nèi)容
          let imagedata = this.offContext.getImageData(50,50,130,130);
//step5:調(diào)用putImageData接口將得到的ImageData畫在起點(diǎn)為(150, 150)的區(qū)域中
          this.offContext.putImageData(imagedata,150,150);
//step6:將離屏繪制的內(nèi)容畫到canvas組件上
          let image = this.offContext.transferToImageBitmap();
          this.context.transferFromImageBitmap(image);
        })
    }
    .width('100%')
    .height('100%')
  }
}

?UI渲染

鴻蒙系統(tǒng)怎么 寫出 橢圓外框和內(nèi)框,鴻蒙開發(fā),harmonyos,ui,華為

總結(jié)

本文詳細(xì)學(xué)習(xí)了鴻蒙開發(fā)UI使用畫布繪制自定義圖形的相關(guān)知識,了解畫布繪制的三種方式,同時(shí)學(xué)習(xí)了畫布組件的常用用法,以及如何繪制規(guī)則、不規(guī)則圖形、圖片圖像等,下文將學(xué)習(xí)鴻蒙開發(fā)UI動(dòng)畫文章來源地址http://www.zghlxwxcb.cn/news/detail-852613.html

到了這里,關(guān)于鴻蒙開發(fā)-UI-圖形-繪制自定義圖形的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 鴻蒙開發(fā)(五)鴻蒙UI開發(fā)概覽

    鴻蒙開發(fā)(五)鴻蒙UI開發(fā)概覽

    ? ? 從用戶角度來講,一個(gè)軟件擁有好看的UI,那是錦上添花的事情。再精確的算法,再厲害的策略,最終都得通過UI展現(xiàn)給用戶并且跟用戶交互。那么,本篇一起學(xué)習(xí)下鴻蒙開發(fā)UI基礎(chǔ)知識,認(rèn)識下各種基本控件以及使用方式。 目錄 一、UI開發(fā)概述 ?1、初識ArkTS語言 2、基本

    2024年01月19日
    瀏覽(15)
  • 【Harmony OS】【ArkUI】ets開發(fā) 圖形與動(dòng)畫繪制

    【ArkUI 】ets 開發(fā)? 圖形與動(dòng)畫繪制 前言:之前我們已經(jīng)完成了Harmony ArkUI? 使用ets 方式實(shí)現(xiàn)基礎(chǔ)的頁面布局和數(shù)據(jù)連接的學(xué)習(xí),這次我們在原有的基礎(chǔ)上進(jìn)行一些圖片和動(dòng)畫的繪制學(xué)習(xí)。本篇是以HarmonyOS 官網(wǎng)的基于TS 擴(kuò)展的聲明式開發(fā)范式文檔,繪圖和動(dòng)畫為基礎(chǔ)進(jìn)行編寫

    2024年02月16日
    瀏覽(14)
  • 鴻蒙開發(fā)-UI-組件

    鴻蒙開發(fā)-UI-組件

    鴻蒙開發(fā)-序言 鴻蒙開發(fā)-工具 鴻蒙開發(fā)-初體驗(yàn) 鴻蒙開發(fā)-運(yùn)行機(jī)制 鴻蒙開發(fā)-運(yùn)行機(jī)制-Stage模型 鴻蒙開發(fā)-UI 文章目錄 前言 一、自定義組件 1.自定義組件基本結(jié)構(gòu) 2.自定義組件參數(shù) 3.build()函數(shù) 4.自定義組件的通用樣式 二、頁面和自定義組件生命周期 1.頁面 2.組件生命周期

    2024年01月17日
    瀏覽(56)
  • 鴻蒙開發(fā)-UI-渲染控制

    鴻蒙開發(fā)-UI-渲染控制

    鴻蒙開發(fā)-序言 鴻蒙開發(fā)-工具 鴻蒙開發(fā)-初體驗(yàn) 鴻蒙開發(fā)-運(yùn)行機(jī)制 鴻蒙開發(fā)-運(yùn)行機(jī)制-Stage模型 鴻蒙開發(fā)-UI 鴻蒙開發(fā)-UI-組件 鴻蒙開發(fā)-UI-組件-狀態(tài)管理 鴻蒙開發(fā)-UI-應(yīng)用-狀態(tài)管理 文章目錄 前言 一、渲染控制概述 二、條件渲染 1.使用規(guī)則 2.更新機(jī)制 ?三、循環(huán)渲染 1.接口描

    2024年02月22日
    瀏覽(12)
  • 鴻蒙開發(fā)-UI-布局

    鴻蒙開發(fā)-UI-布局

    鴻蒙開發(fā)-序言 鴻蒙開發(fā)-工具 鴻蒙開發(fā)-初體驗(yàn) 鴻蒙開發(fā)-運(yùn)行機(jī)制 鴻蒙開發(fā)-運(yùn)行機(jī)制-Stage模型 鴻蒙開發(fā)-UI 鴻蒙開發(fā)-UI-組件 鴻蒙開發(fā)-UI-組件-狀態(tài)管理 鴻蒙開發(fā)-UI-應(yīng)用-狀態(tài)管理 鴻蒙開發(fā)-UI-渲染控制 文章目錄 前言 一、布局概述 1.布局結(jié)構(gòu) 2.布局元素組成 3.布局分類 4.布

    2024年01月16日
    瀏覽(20)
  • Compose 自定義 - 數(shù)據(jù)轉(zhuǎn)UI的三階段(組合、布局、繪制)

    Compose 自定義 - 數(shù)據(jù)轉(zhuǎn)UI的三階段(組合、布局、繪制)

    Compose 通過三個(gè)階段把數(shù)據(jù)轉(zhuǎn)化為UI:組合(要顯示什么)、布局(要顯示在哪里)、繪制(如何渲染)。 組合階段 Compisition 界面首次渲染時(shí)會將可組合函數(shù)轉(zhuǎn)化為一個(gè)個(gè)布局節(jié)點(diǎn) Layout Node, 使用多叉樹的數(shù)據(jù)結(jié)構(gòu)構(gòu)建一個(gè)UI樹。 布局階段 Layout 多叉樹中父節(jié)點(diǎn)會測量他們的子

    2024年02月20日
    瀏覽(25)
  • 鴻蒙開發(fā)-HarmonyOS UI架構(gòu)

    鴻蒙開發(fā)-HarmonyOS UI架構(gòu)

    當(dāng)我們新建一個(gè)工程之后,首先會進(jìn)入Index頁。我們先簡單的做一個(gè)文章列表的顯示 這樣,我們只要把 articles 里面填充數(shù)據(jù),就能正常顯示一個(gè)列表了。 可以看到上面的代碼里是沒有數(shù)據(jù)的,只有一個(gè)空數(shù)組。我們想要從網(wǎng)絡(luò)獲取數(shù)據(jù)。那么,數(shù)據(jù)怎么來呢?最簡單粗暴的

    2024年02月19日
    瀏覽(20)
  • 鴻蒙開發(fā)-UI-布局-線性布局

    鴻蒙開發(fā)-UI-布局-線性布局

    鴻蒙開發(fā)-序言 鴻蒙開發(fā)-工具 鴻蒙開發(fā)-初體驗(yàn) 鴻蒙開發(fā)-運(yùn)行機(jī)制 鴻蒙開發(fā)-運(yùn)行機(jī)制-Stage模型 鴻蒙開發(fā)-UI 鴻蒙開發(fā)-UI-組件 鴻蒙開發(fā)-UI-組件-狀態(tài)管理 鴻蒙開發(fā)-UI-應(yīng)用-狀態(tài)管理 鴻蒙開發(fā)-UI-渲染控制 鴻蒙開發(fā)-UI-布局 文章目錄 前言 一、基本概念 二、布局子元素 1.子元素

    2024年01月18日
    瀏覽(24)
  • 鴻蒙開發(fā)-UI-布局-柵格布局

    鴻蒙開發(fā)-UI-布局-柵格布局

    鴻蒙開發(fā)-UI-布局 鴻蒙開發(fā)-UI-布局-線性布局 鴻蒙開發(fā)-UI-布局-層疊布局 鴻蒙開發(fā)-UI-布局-彈性布局 鴻蒙開發(fā)-UI-布局-相對布局 文章目錄 前言 一、基本概念 二、格柵容器組件 1.柵格系統(tǒng)斷點(diǎn) 2.布局的總列數(shù) 3.排列方向 4.子組件間距 三、格柵容器子組件 1.span 2.offset 3.order 四、

    2024年02月20日
    瀏覽(21)
  • 【pyqt5】【多線程】【matplotlib】解決子線程上運(yùn)行的matplotlib無法在主線程上的UI界面上繪制圖形的問題

    【pyqt5】【多線程】【matplotlib】解決子線程上運(yùn)行的matplotlib無法在主線程上的UI界面上繪制圖形的問題

    在使用PyQt5為一個(gè)項(xiàng)目寫UI界面的時(shí)候,我試圖把matplotlib繪制的圖像展示在UI界面的窗口中,但matplotlib是運(yùn)行在一個(gè)子線程中的,這導(dǎo)致它出現(xiàn)了如下警告: UserWarning: Starting a Matplotlib GUI outside of the main thread will likely fail. 并且我無法使用 matplotlib.backends.backend_qt5agg 下的 Figur

    2024年02月08日
    瀏覽(31)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包