自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

HarmonyOS煙花特效組件開發(fā)

開發(fā) OpenHarmony
之前看到“粒子消散”的特效組件,于是就產(chǎn)生想法(自己也弄個(gè)特效組件應(yīng)該挺有意思的)。這個(gè)煙花特效可以添加到游戲勝利的界面中,可能還有其他應(yīng)用場景哈哈~。

[[431264]]

想了解更多內(nèi)容,請?jiān)L問:

51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)

https://harmonyos.51cto.com

前言

之前看到“粒子消散”的特效組件,于是就產(chǎn)生想法(自己也弄個(gè)特效組件應(yīng)該挺有意思的)。這個(gè)煙花特效可以添加到游戲勝利的界面中,可能還有其他應(yīng)用場景哈哈~。這也算是我做的第一個(gè)組件原創(chuàng)demo啦。

概述

效果圖如下:

有三種模式可以選擇,一種是圖案只有五角星,一種是圖案只有三角形,還有一種是圖案既有五角星又有三角星。顏色有10種,還有背景音樂(自己DIY的煙花音效)!話不多說,開整!

正文

1.創(chuàng)建一個(gè)空白的工程

DevEco Studio下載安裝成功后,打開DevEco Studio,點(diǎn)擊左上角的File,點(diǎn)擊New,再選擇New Project,選擇Empty Ability,然后點(diǎn)擊Next,給項(xiàng)目命名Framework,選擇設(shè)備類型Phone,選擇語言類型JS最后點(diǎn)擊Finish。

代碼刪除的部分

在entry>src>main>js>default>pages.index>index.hml 文件里把以下代碼刪掉

  1. <text class="title"
  2.         {{ $t('strings.hello') }} {{ title }} 
  3.     </text> 

 在entry>src>main>js>default>pages.index>index.js 文件里把以下代碼刪掉

  1. title:" " 
  2.    onInit() { 
  3.         this.title = this.$t('strings.world'); 
  4.     } 

 在entry>src>main>js>default>pages.index>index.css 文件里把container部分以下的代碼刪掉

2.布局設(shè)計(jì)

index.hml

該組件是畫布組件,畫布的大小是整個(gè)屏幕,而按鈕是顯示畫布上方的,所以要添加個(gè)棧組件,依次放入畫布組件和按鈕組件。代碼如下👇,注意這里畫布組件添加了觸摸事件touchstartfunc,下文會講解這步。

  1. <stack class="stack"
  2.       <canvas class="canvas " ref="canvas " @touchstart='touchstartfunc' ></canvas> 
  3.       <input type="button" class="STAR"  value="五角星" onclick="click_star"/> 
  4.       <input type="button" class="TRIANGLE"  value="三角形" onclick="click_triangle"/> 
  5.       <input type="button" class="MIX"  value="混合" onclick="click_mix"/> 
  6.   </stack> 

index.css

給畫布組件和按鈕組件設(shè)置屬性,代碼如下👇

  1. .canvas{ 
  2.     width:100%; 
  3.     height: 100%; 
  4.     background-color:black; 
  5. .STAR{ 
  6.     width: 80px; 
  7.     height: 38px; 
  8.     font-size: 20px; 
  9.     background-color:blue; 
  10.     border-color: blue; 
  11.     text-color: aquamarine; 
  12.     top:660px; 
  13.     left: 40px; 
  14. .TRIANGLE{ 
  15.     width: 80px; 
  16.     height: 38px; 
  17.     font-size: 20px; 
  18.     background-color:blue; 
  19.     border-color: blue; 
  20.     text-color: aquamarine; 
  21.     top:660px; 
  22.     left: 150px; 
  23. .MIX{ 
  24.     width: 80px; 
  25.     height: 38px; 
  26.     font-size: 20px; 
  27.     background-color:blue; 
  28.     border-color: blue; 
  29.     text-color: aquamarine; 
  30.     top:660px; 
  31.     left: 260px; 

此時(shí)打開模擬器,你就能得到上面效果圖左1圖,接下來做功能實(shí)現(xiàn)部分。

3.繪制圖案

五角星

函數(shù) draw_star 傳的參數(shù)分別是煙花釋放的圓心坐標(biāo),圖案的顏色,圖案移動的斜率,圖案是否填充顏色。定義的變量中,x和y是圖案中心的坐標(biāo),根據(jù)時(shí)間推移(會設(shè)定定時(shí)器,下文會講)move_times增加,圖案會沿著傳進(jìn)來的斜率方向作直線移動,以達(dá)到煙花綻放的效果。變量a-h都是為了便于繪制五角星的圖案而設(shè)的公式參數(shù)值,全局變量r_star是五角星的邊長,最后根據(jù)公式去繪制單個(gè)五角星圖案

index.js

先在export default上方定義變量

  1. var ctx; 
  2. var move_times=1; 
  3. var r_star = 5; 
  4. var r_triangle=14;      

 然后在export default下方添加代碼:

  1. onShow() { 
  2.        ctx = this.$refs.canvas.getContext('2d'); 
  3.    }, 
  4.  
  5. draw_Star(x_1,y_1,color,x_2,y_2,fill) { 
  6.        let x = x_1 + move_times * x_2; 
  7.        let y = y_1 + move_times * y_2; 
  8.        let a = r_star * Math.sin(Math.PI / 10); 
  9.        let b = r_star * Math.cos(Math.PI / 10); 
  10.        let c = (r_star + a) * Math.tan(Math.PI / 10); 
  11.        let d = (r_star + a) * Math.tan(Math.PI / 5) - c; 
  12.        let e = r_star * Math.sin(Math.PI / 5); 
  13.        let f = r_star * Math.cos(Math.PI / 5); 
  14.        let g = (r_star + 2 * a) * Math.cos(2 * Math.PI / 5); 
  15.        let h = (r_star + 2 * a) * Math.sin(2 * Math.PI / 5); 
  16.  
  17.        ctx.lineWidth=1; 
  18.        ctx.beginPath(); 
  19.        ctx.moveTo(x - r_star - a, y - c); 
  20.        ctx.lineTo(x - a, y - c); 
  21.        ctx.lineTo(x, y - b - c); 
  22.        ctx.lineTo(x + a, y - c); 
  23.        ctx.lineTo(x + a + r_star, y - c); 
  24.        ctx.lineTo(x + a + r_star - f, y + e - c); 
  25.        ctx.lineTo(x + a + g, y + h - c); 
  26.        ctx.lineTo(x, y + d); 
  27.        ctx.lineTo(x - a - g, y + h - c); 
  28.        ctx.lineTo(x - a - r_star + f, y + e - c); 
  29.        ctx.closePath(); 
  30.        ctx.stroke(); 
  31.        move_times=move_times+1; 
  32.    }, 

三角星

同樣, draw_triangle 是繪制單個(gè)三角形并沿設(shè)定斜率移動的函數(shù),函數(shù)的參數(shù)類型及作用與五角星的一致。全局變量r_triangle為三角形的邊長,代碼如下👇

  1. draw_Triangle(x_1,y_1,color,x_2,y_2,fill){ 
  2.        let x = x_1 + move_times * x_2; 
  3.        let y = y_1 + move_times * y_2; 
  4.        ctx.lineWidth=1; 
  5.        ctx.beginPath(); 
  6.        ctx.moveTo(x-r_triangle/2, y + Math.sqrt(3)*r_triangle/6); 
  7.        ctx.lineTo(x, y - Math.sqrt(3)*r_triangle/3); 
  8.        ctx.lineTo(x+r_triangle/2, y + Math.sqrt(3)*r_triangle/6); 
  9.        ctx.closePath(); 
  10.        ctx.stroke(); 
  11.  
  12.        move_times=move_times+1; 
  13.    }, 

圖案的美化

設(shè)置了10種顏色的顏色字典,通過繪制圖案函數(shù)draw中的參數(shù) color 去控制顏色(黑色是作保護(hù)作用),顏色可通過單獨(dú)設(shè)置數(shù)字1-10來選擇,也可以通過隨機(jī)數(shù)(1~10)去隨機(jī)變化顏色。顏色填充也是如此,1為不填充,2為填充,也可隨機(jī)產(chǎn)生1或2來隨機(jī)變化是否填充顏色。

  1. var drawcolors=[0,1,2,3,4,5,6,7,8,9,10]; 
  2. const COLORS={ 
  3.     "0":'black'
  4.     "1":"#FF2E10"
  5.     "2":"#FB8D15"
  6.     "3":"#F4ED1C"
  7.     "4":"#C5F31D"
  8.     "5":"#51F11F"
  9.     "6":"#18F8F8"
  10.     "7":"#1166FF"
  11.     "8":"#9833DD"
  12.     "9":"#FC14EB"
  13.     "10":"#C64A6A" 

draw函數(shù)中,在ctx.lineWidth下方,在ctx.beginPath上方添加代碼:

  1. ctx.strokeStyle = COLORS[drawcolors[color].toString()]; 

 在ctx.stroke下方添加代碼

  1. if(fill==2) { 
  2.             ctx.fillStyle = COLORS[drawcolors[color].toString()]; 
  3.             ctx.fill(); 
  4.         }; 

draw開頭的函數(shù)是繪制單個(gè)圖案,接下來的Draw函數(shù)是繪制8個(gè)或10個(gè)圖案圍成圓形向外同速率擴(kuò)展的圖像,run開頭的函數(shù)是被循環(huán)的函數(shù)

4.繪制煙花

煙花的布局

綻放的煙花的形狀是一個(gè)圓形,火花為單個(gè)圖案。我設(shè)計(jì)了兩種煙花綻放數(shù)量,一種是一個(gè)圓中有8個(gè)圖案的,一種是一個(gè)圓中有10個(gè)圖案的,它們的斜率都通過數(shù)學(xué)公式定義好了(如下的全局變量所示),單個(gè)圖案沿斜率方向每次移動的距離為全局變量R的數(shù)值。

  1. var R = 0.25; 
  2. var s= R*Math.cos(Math.PI/5); 
  3. var t= R*Math.sin(Math.PI/5); 
  4. var v= R*Math.cos(Math.PI/2.5); 
  5. var w= R*Math.sin(Math.PI/2.5); 
  1. Draw_Star_8(click_x,click_y){ 
  2.        this.draw_Star(click_x,click_y,1,-R,0,Math.floor(Math.random()*2 + 1)); 
  3.        this.draw_Star(click_x,click_y,2,-R/Math.sqrt(2),-R/Math.sqrt(2),Math.floor(Math.random()*2 + 1)); 
  4.        this.draw_Star(click_x,click_y,3,0,-R,Math.floor(Math.random()*2 + 1)); 
  5.        this.draw_Star(click_x,click_y,4,R/Math.sqrt(2),-R/Math.sqrt(2),Math.floor(Math.random()*2 + 1)); 
  6.        this.draw_Star(click_x,click_y,5,R,0,Math.floor(Math.random()*2 + 1)); 
  7.        this.draw_Star(click_x,click_y,6,R/Math.sqrt(2),R/Math.sqrt(2),Math.floor(Math.random()*2 + 1)); 
  8.        this.draw_Star(click_x,click_y,7,0,R,Math.floor(Math.random()*2 + 1)); 
  9.        this.draw_Star(click_x,click_y,8,-R/Math.sqrt(2),R/Math.sqrt(2),Math.floor(Math.random()*2 + 1)); 
  10.    }, 
  11.  
  12.    Draw_Star_10(click_x,click_y,fill){ 
  13.        this.draw_Star(click_x,click_y,Math.floor(Math.random()*10 + 1),-R,0,fill); 
  14.        this.draw_Star(click_x,click_y,Math.floor(Math.random()*10 + 1),-s,-t,fill); 
  15.        this.draw_Star(click_x,click_y,Math.floor(Math.random()*10 + 1),-v,-w,fill); 
  16.        this.draw_Star(click_x,click_y,Math.floor(Math.random()*10 + 1),v,-w,fill); 
  17.        this.draw_Star(click_x,click_y,Math.floor(Math.random()*10 + 1),s,-t,fill); 
  18.        this.draw_Star(click_x,click_y,Math.floor(Math.random()*10 + 1),R,0,fill); 
  19.        this.draw_Star(click_x,click_y,Math.floor(Math.random()*10 + 1),s,t,fill); 
  20.        this.draw_Star(click_x,click_y,Math.floor(Math.random()*10 + 1),v,w,fill); 
  21.        this.draw_Star(click_x,click_y,Math.floor(Math.random()*10 + 1),-v,w,fill); 
  22.        this.draw_Star(click_x,click_y,Math.floor(Math.random()*10 + 1),-s,t,fill); 
  23.    }, 
  24.  
  25.     Draw_Triangle_8(click_x,click_y,fill){ 
  26.        this.draw_Triangle(click_x,click_y,Math.floor(Math.random()*10 + 1),-R,             0,              fill); 
  27.        this.draw_Triangle(click_x,click_y,Math.floor(Math.random()*10 + 1),-R/Math.sqrt(2),-R/Math.sqrt(2),fill); 
  28.        this.draw_Triangle(click_x,click_y,Math.floor(Math.random()*10 + 1), 0,            -R,              fill); 
  29.        this.draw_Triangle(click_x,click_y,Math.floor(Math.random()*10 + 1), R/Math.sqrt(2),-R/Math.sqrt(2),fill); 
  30.        this.draw_Triangle(click_x,click_y,Math.floor(Math.random()*10 + 1), R,             0,              fill); 
  31.        this.draw_Triangle(click_x,click_y,Math.floor(Math.random()*10 + 1), R/Math.sqrt(2),R/Math.sqrt(2), fill); 
  32.        this.draw_Triangle(click_x,click_y,Math.floor(Math.random()*10 + 1), 0,             R,              fill); 
  33.        this.draw_Triangle(click_x,click_y,Math.floor(Math.random()*10 + 1),-R/Math.sqrt(2),R/Math.sqrt(2), fill); 
  34.    }, 
  35.  
  36.    Draw_Triangle_10(click_x,click_y){ 
  37.        this.draw_Triangle(click_x,click_y,1,-R,0, Math.floor(Math.random()*2 + 1)); 
  38.        this.draw_Triangle(click_x,click_y,2,-s,-t,Math.floor(Math.random()*2 + 1)); 
  39.        this.draw_Triangle(click_x,click_y,3,-v,-w,Math.floor(Math.random()*2 + 1)); 
  40.        this.draw_Triangle(click_x,click_y,4,v,-w, Math.floor(Math.random()*2 + 1)); 
  41.        this.draw_Triangle(click_x,click_y,5,s,-t, Math.floor(Math.random()*2 + 1)); 
  42.        this.draw_Triangle(click_x,click_y,6,R,0,  Math.floor(Math.random()*2 + 1)); 
  43.        this.draw_Triangle(click_x,click_y,7,s,t,  Math.floor(Math.random()*2 + 1)); 
  44.        this.draw_Triangle(click_x,click_y,8,v,w,  Math.floor(Math.random()*2 + 1)); 
  45.        this.draw_Triangle(click_x,click_y,9,-v,w, Math.floor(Math.random()*2 + 1)); 
  46.        this.draw_Triangle(click_x,click_y,10,-s,t,Math.floor(Math.random()*2 + 1)); 
  47.    }, 

火花的移動

上述提過一個(gè)movetimes,火花的移動無非就是坐標(biāo)的變化,通過設(shè)置一個(gè)定時(shí)器,循環(huán)繪制圖案就能實(shí)現(xiàn)移動的效果,先構(gòu)造一個(gè)被循環(huán)的函數(shù)run_star(舉五角星的實(shí)例,三角形同理;位置,美化等的參數(shù)隨意),代碼如下

  1. run_star(){ 
  2.      this.Draw_Star_10(200,300,1); 
  3.      this.Draw_Star_10(150,200,2); 
  4.      this.Draw_Star_8(300,218); 
  5.      this.Draw_Star_8(110,380); 
  6.   }, 

 然后添加定時(shí)器

  1. var timer_star=null;                    
  2. var timer_triangle=null;                 
  3. var timer_mix=null

 點(diǎn)擊按鈕“五角星”時(shí)會釋放圖案為五角星的煙花

  1. click_star(){ 
  2.        timer_star=setInterval(this.run_star,120); 
  3.    }, 

此時(shí),打開模擬器,你會看到圖案移動了,但上一個(gè)圖案沒有清除

#星光計(jì)劃1.0# 【木棉花】:煙花特效組件開發(fā)-鴻蒙HarmonyOS技術(shù)社區(qū)

所以要給被循環(huán)的函數(shù)添加一個(gè)清空操作(為了保護(hù)清空函數(shù),要先在清空前加點(diǎn)東西),在this.Draw函數(shù)之前添加以下代碼:

  1. this.draw_Star(0,0,0,0,0,0); 
  2.   ctx.clearRect(0,0,400,800); 

煙花的結(jié)束

按上述步驟下來,會發(fā)現(xiàn)煙花的圓形越來越大,最終出界。

為了實(shí)現(xiàn)煙花的結(jié)束,可以根據(jù)movetimes的增加次數(shù)來控制煙花綻放范圍的大小。通過透明度的遞減,最終透明度減為0,圖案消失

  1. var o = 1;    

 在draw函數(shù)里的開頭位置添加以下代碼:

  1. if ((move_times >= 230 && move_times <= 330)) { 
  2.           o = o - 0.01; 
  3.           ctx.globalAlpha = o; 
  4.       }; 

 煙花的循環(huán)綻放

在draw函數(shù)里的開頭位置添加以下代碼:

  1. if(move_times==342){ 
  2.            o=1; 
  3.            ctx.globalAlpha = o; 
  4.            move_times=1; 
  5.        }; 

 同理可以設(shè)置“三角形”和“混合”的被循環(huán)函數(shù)

  1. run_triangle(){ 
  2.         this.draw_Triangle(0,0,0,0,0,0); 
  3.         ctx.clearRect(0,0,400,800); 
  4.         this.Draw_Triangle_8(200,300,1); 
  5.         this.Draw_Triangle_8(150,200,2); 
  6.         this.Draw_Triangle_10(300,218); 
  7.         this.Draw_Triangle_10(110,380); 
  8.     }, 
  9.  
  10.  run_mix(){ 
  11.         this.draw_Triangle(0,0,0,0,0,0); 
  12.         ctx.clearRect(0,0,400,800); 
  13.         this.Draw_Triangle_8(200,300,1); 
  14.         this.Draw_Star_10(150,200,2); 
  15.         this.Draw_Triangle_10(300,218); 
  16.         this.Draw_Star_8(110,380); 
  17.     }, 

5.點(diǎn)擊處綻放煙花

先獲取點(diǎn)擊處相對于畫布組件左上角的坐標(biāo),然后作為新煙花綻放的圓心坐標(biāo)傳參,這里的click_b1,click_b2下文會講解

  1. var timer_click=null
  1. run_touch(){ 
  2.         if(click_b2==true) { 
  3.             this.draw_Star(x, y, 0, 0, 0);     
  4.             ctx.clearRect(0, 0, 400, 800); 
  5.             this.Draw_Star_10(x, y, 1); 
  6.         } 
  7.     }, 
  8.  
  9.     touchstartfunc(msg) { 
  10.         click_b1==true
  11.         x=msg.touches[0].globalX; 
  12.         y=msg.touches[0].globalY; 
  13.         if(click_b1==true){ 
  14.         timer_click=setInterval(this.run_touch,120); 
  15.             click_b1=false
  16.             timer_click=null
  17.         } 
  18.     }, 

6.煙花圖案的切換

通過設(shè)定布爾型變量來控制點(diǎn)擊另一個(gè)按鈕時(shí),清空上一個(gè)按鈕運(yùn)行的定時(shí)器。

  1. var star_b=true;                     
  2. var mix_b=true
  3. var triangle_b=true;                
  4. var click_b1=true
  5. var click_b2=true
  1. click_star(){ 
  2.         click_b2=false
  3.         clearInterval(timer_triangle); 
  4.         timer_triangle=null
  5.         clearInterval(timer_mix); 
  6.         timer_mix=null
  7.         ctx.clearRect(0,0,400,800); 
  8.         if(star_b==true){ 
  9.         timer_star=setInterval(this.run_star,120); 
  10.         star_b=false
  11.         } 
  12.         triangle_b=true
  13.         mix_b=true
  14.     }, 
  15.  
  16.     click_triangle(){ 
  17.         click_b2=false
  18.         clearInterval(timer_star); 
  19.         timer_star=null
  20.         clearInterval(timer_mix); 
  21.         timer_mix=null
  22.         ctx.clearRect(0,0,400,800); 
  23.         if(triangle_b==true){ 
  24.             timer_triangle=setInterval(this.run_triangle,120); 
  25.             triangle_b=false
  26.         } 
  27.         star_b=true
  28.         mix_b=true
  29.     }, 
  30.  
  31.     click_mix(){ 
  32.         click_b2=false
  33.         clearInterval(timer_star); 
  34.         timer_star=null
  35.         clearInterval(timer_triangle); 
  36.         timer_triangle=null
  37.         ctx.clearRect(0,0,400,800); 
  38.         if(mix_b==true){ 
  39.             timer_mix=setInterval(this.run_mix,120); 
  40.             mix_b=false
  41.         } 
  42.         star_b=true
  43.         triangle_b=true
  44.     }, 

7.背景音樂的添加

js模板中添加音頻可以去看我之前的文章。

index.hml

  1. <video id='videoId' 
  2.          src='/common/flr_5_1.mp3' 
  3.          autoplay='true' 
  4.          controls="false" 
  5.          onfinish='finishCallback'></video> 

index.js

  1. var video_b =true;    

在src/common/下加入音頻文件。

  1. finishCallback:function(){ 
  2.        if(video_b==true){ 
  3.            this.$element('videoId').start(); 
  4.        } 
  5.    }, 

別忘了生命周期的設(shè)置,在應(yīng)用啟動時(shí)自動播放音頻,在應(yīng)用隱藏的時(shí)候暫停播放音頻并清空所有定時(shí)器,在應(yīng)用銷毀時(shí)清空所有定時(shí)器,停止播放音頻。

  1. onShow() { 
  2.      ctx = this.$refs.canvas.getContext('2d'); 
  3.      this.$element('videoId').start(); 
  4.  }, 
  5.  
  6.  onHide(){ 
  7.  clearInterval(timer_star); 
  8.  timer_star=null
  9.  clearInterval(timer_triangle); 
  10.  timer_triangle=null
  11.  clearInterval(timer_mix); 
  12.  timer_mix=null
  13.  clearInterval(timer_click); 
  14.  timer_click=null
  15.  video_b=false
  16.  this.$element('videoId').pause(); 
  17.  }, 
  18.  
  19.  onDestroy(){ 
  20.      clearInterval(timer_star); 
  21.      timer_star=null
  22.      clearInterval(timer_triangle); 
  23.      timer_triangle=null
  24.      clearInterval(timer_mix); 
  25.      timer_mix=null
  26.      clearInterval(timer_click); 
  27.      timer_click=null
  28.      video_b=false
  29.      this.$element('videoId').pause(); 
  30.  }, 

結(jié)語

以上就是我這次的小分享啦❀❀!自己的第一個(gè)demo開發(fā),略微粗糙。

文章相關(guān)附件可以點(diǎn)擊下面的原文鏈接前往下載:

https://harmonyos.51cto.com/resource/1376

想了解更多內(nèi)容,請?jiān)L問:

51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)

https://harmonyos.51cto.com

【編輯推薦】

 

責(zé)任編輯:jianghua 來源: 鴻蒙社區(qū)
相關(guān)推薦

2016-09-19 21:37:58

vue特效組件Web

2021-05-06 10:46:40

JS代碼文字煙花

2022-06-30 13:56:05

Rating鴻蒙

2021-02-23 15:24:51

騰訊組件開源

2012-06-13 15:21:26

jQuery

2021-06-28 14:48:03

鴻蒙HarmonyOS應(yīng)用

2021-01-18 09:52:20

鴻蒙HarmonyOS開發(fā)

2021-02-04 09:45:19

鴻蒙HarmonyOS應(yīng)用開發(fā)

2021-01-12 12:04:40

鴻蒙HarmonyOS應(yīng)用開發(fā)

2021-01-21 13:21:18

鴻蒙HarmonyOSPhotoview組件

2021-01-20 09:54:56

鴻蒙HarmonyOS開發(fā)

2021-01-11 11:36:23

鴻蒙HarmonyOSApp開發(fā)

2022-01-26 18:46:46

Canvas煙花粒子特效

2021-02-20 12:34:53

鴻蒙HarmonyOS應(yīng)用開發(fā)

2021-09-29 10:15:00

鴻蒙HarmonyOS應(yīng)用

2013-05-21 13:55:51

Android游戲開發(fā)圖像漸變特效

2019-07-22 10:42:11

React組件前端

2021-04-23 16:08:08

鴻蒙HarmonyOS應(yīng)用

2010-07-30 13:40:59

Flex開發(fā)

2021-07-27 11:39:40

鴻蒙HarmonyOS應(yīng)用
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號