性色αv/久草社区/日本大肚子孕妇ⅹxx激情/荔枝成视频片在线播放 - chinese性老太bbw

您當前的位置:快訊網 > 財經

華為大佬解析開源鴻蒙OpenHarmony3.1關鍵特性畫布,教你如何完

2022-02-12 12:34 來源:IT之家 作者:牧曉 閱讀量:9506 

,華為技術有限公司的江英杰為大家揭曉了關于開源鴻蒙 OpenHarmony 3.1 Beta 版中的一個關鍵特性,也就是ArkUI 開發框架中的 canvas 畫布。

華為大佬解析開源鴻蒙OpenHarmony3.1關鍵特性畫布,教你如何完

據介紹,canvas 是 ArkUI 開發框架里的畫布組件,常用于自定義繪制圖形因為其輕量,靈活,高效等優點,被廣泛應用于 UI 界面開發中本期,我們將為大家介紹 ArkUI 開發框架中 canvas 組件的使用

canvas 介紹

1.1 什么是 canvas。目前,已有400家應用服務合作伙伴,1700家硬件合作伙伴,130萬開發者參與了鴻蒙系統生態建設。

本站了解到,在 Web 瀏覽器中,canvas 是一個可自定義 width,height 的矩形畫布,畫布左上角為坐標原點,以像素為單位,水平向右為 x 軸,垂直向下為 y 軸,畫布內所有元素都基于原點進行定位。。

如下圖所示,我們可以通過 lt,canvasgt, 標簽,創建了一個 width= 1500px,height=900px 的空白畫布,我們還需要畫筆才能繪制圖形canvas 采用輕量的逐像素渲染機制,以 JS 為畫筆直接控制畫布像素,從而實現圖形繪制

1.2 Canvas 的畫筆

canvas 本身雖不具備繪制能力,但是提供了獲取畫筆的方法開發者可通過 getContext 方法獲取 CanvasRenderingContext2D 對象完成 2D 圖像繪制,或通過 getContext 方法獲取 WebGLRenderingContext 對象完成 3D 圖像繪制

除此之外,開發者還可以通過獲取 OffscreenCanvasRenderingContext2D 對象進行離屏繪制,繪制方法同上當繪制的圖形比較復雜時,頻繁地刪除與重繪會消耗很多性能

這時,開發者可以根據自身的需求靈活選取離屏渲染的方式,首先通過創建 OffscreenCanvas 對象作為一個緩沖區,然后將內容繪制在 OffscreenCanvas 上,最后再將 OffscreenCanvas 繪制到主畫布上,以提高畫布性能,確保繪圖的質量。

canvas 基礎繪制方法

通過上節對 canvas 組件的基本介紹,相信大家對 canvas 組件已經有了一定的認識,下面我們將為大家實際演示 canvas 組件在 ArkUI 開發框架中的使用方法ArkUI 開發框架參考了 Web 瀏覽器中 canvas 的設計,并在類 Web 開發范式及聲明式開發范式兩種開發范式中進行提供,接下來我們將分別介紹這兩種開發范式中 canvas 的繪制方法

2.1 類 Web 開發范式中 canvas 的繪制方法

類 Web 開發范式,使用 HML 標簽文件進行布局搭建,CSS 文件進行樣式描述,并通過 JS 語言進行邏輯處理目前,JS 語言的 canvas 繪圖功能已經基本上完善,下面我們將通過兩個示例,展示基于 JS 語言的 canvas 組件基礎使用方法

2.1.1 矩形填充

CanvasRenderingContext2D 對象提供了 fillRect 方法,用于繪制一個填充的矩形如下圖所示,在畫布內繪制了一個黑色的填充矩形,x 與 y 指定了在 canvas 畫布上所繪制的矩形的左上角的坐標,width 和 height 則設置了矩形的尺寸

示例代碼如下:

//創建一個width=1500px,height=900px的畫布lt,!——xxx.hml——gt,lt,divgt,lt,canvasref="canvas"gt,lt,/canvasgt,lt,/divgt,

//xxx.jsexportdefaultonShowconstel=this.$refs.canvas,//獲取2D繪制對象constctx=el.getContext,//設置填充為黑色ctx.fillStyle='#000000',//設置填充矩形的坐標及尺寸ctx.fillRect,

2.1.2 縮放與陰影

CanvasRenderingContext2D 對象提供了 scale 方法,參數 x 表示橫軸方向上縮放倍數,y 表示縱軸方向上縮放的倍數,值得注意的是縮放過程中定位也會被縮放如下圖所示,是將上個示例中的填充矩形通過 scale 縮放,并通過 shadowBlur 方法加上陰影后的效果

示例代碼如下:

//xxx.jsexportdefaultonShowconstel=this.$refs.canvas,constctx=el.getContext,//設置繪制陰影的模糊級別ctx.shadowBlur=80,ctx.shadowColor='rgb',ctx.fillStyle='rgb',//xScaleto200%,yScaleto150%ctx.scale,ctx.fillRect,

2.2 聲明式開發范式中 canvas 的繪制方法

聲明式開發范式,采用 TS 語言并進行聲明式 UI 語法擴展,從組件,動效和狀態管理三個維度提供了 UI 繪制能力,目前已經提供了 canvas 組件繪制能力,但功能仍在完善中下面我們將通過兩個示例展示聲明式開發范式中 canvas 組件的基礎使用方法

擴展的 TS 語言采用更接近自然語義的編程方式,讓開發者可以直觀地描述 UI 界面,示例代碼如下:

2.2.2 點擊創建線性漸變

如下圖所示,是一個線性漸變效果基于 canvas 擴展了一個 Button 組件,通過點擊Click按鈕,觸發 onClick 方法,并通過調用 createLinearGradient 方法,繪制出了一個線性漸變色

示例代碼如下:

EntryComponentstructGradientExampleprivatesettings:RenderingContextSettings=newRenderingContextSettings,privatecontext:RenderingContext=newRenderingContext,privategra:CanvasGradient=newCanvasGradient,buildColumn//創建一個畫布Canvas.width.height.backgroundColorColumn//設置按鈕的樣式Button.width.height.backgroundColor.onClickgrad.addColorStop,grad.addColorStop,grad.addColorStop,this.context.fillStyle=grad,this.context.fillRect,).alignItems(HorizontalAlign.center)飛機大戰小游戲繪制實踐

如下圖所示,是一款飛機大戰小游戲,通過控制戰機的移動摧毀敵機如何使用 ArkUI 開發框架提供的 canvas 組件輕松實現這個經典懷舊的小游戲

privateimgList:Arraylt,stringgt,=,

letimg:ImageBitmap=newImageBitmap/"+this.imgList(數組下標)),this.ctx.drawImage(img,150/*x坐標*/,150/*y坐標*/,600/*寬*/,600/*高*/)

this.ctx.drawImage,this.ctx.drawImage(this.bg,0,this.bgY—480),this.bgY++480amp,amp,(this.bgY=0),

5. 在頁面每隔 120s 出現一排子彈,之后減小或增大軸的坐標達到子彈射出效果。

leti=0,setInterval=gt,this.ctx.drawImage(this.bulImg1,image.x–10–(i*10),image.x+(i*10))this.ctx.drawImage(this.bulimg2,this.bulImg1,image.x–(i*10),iimage.x+(i*10))this.ctx.drawImage(this.bulimg3,image.x+10+(i*10),image.x+(i*10))i++,,120)

event.touches(0).localX,varoffsetY=event.localY||event.touches(0).localY,varw=this.heroImg(0).width,h=this.heroImg(0).height,varnx=offsetX—w/2,ny=offsetY—h/2,nxlt,20—w/2nx=20—w/2:nxgt,(this.windowWidth—w/2—20)nx=(this.windowWidth—w/2—20):0,nylt,0ny=0:nygt,(this.windowHeight—h/2)

注:本示例引用了部分開源資源,感興趣的開發者可參考此開源資源,結合文中的實現思路補全代碼。

以上就是本期全部內容,期待廣大開發者能通過 canvas 組件繪制出精美的圖形,更多 canvas 組件的詳細使用方法,請參考文檔進行學習:

。本文地址:http://www.dayishuiji.com/finance/21235.html - 轉載請保留原文鏈接。
免責聲明:本文轉載上述內容出于傳遞更多信息之目的,不代表本網的觀點和立場,故本網對其真實性不負責,也不構成任何其他建議;本網站圖片,文字之類版權申明,因為網站可以由注冊用戶自行上傳圖片或文字,本網站無法鑒別所上傳圖片或文字的知識版權,如果侵犯,請及時通知我們,本網站將在第一時間及時刪除。

熱門推薦
返回頂部