精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

2020征文-TV10分鐘鴻蒙應用實戰開發:鴻蒙手繪板 (含源代碼)

開發
文章由鴻蒙社區產出,想要了解更多內容請前往:51CTO和華為官方戰略合作共建的鴻蒙技術社區https://harmonyos.51cto.com/#zz

[[358401]]

想了解更多內容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區

https://harmonyos.51cto.com/#zz

前言:


今天是鴻蒙的手機beta發布活動,很榮幸受邀來到現場,一會兒可以給大家上個靚照~。

[[358402]]

本篇旨在通過實踐一些樣例,讓開發者們快速提高腎上腺素,歡樂的加入鴻蒙應用開發之旅。整篇就是一個完整的實操樣例,我也盡量在一片中把內容都講清楚。

基礎的一些知識點,可以訪問我另一個系列:《鴻蒙OS應用開發實踐》

正文

(一)創建項目

1.創建一個新的TV項目:


2.創建一個新的Java類:


命名為Draw:


這個作為我們的繪畫的核心組件,所以我們讓他繼承Component,方便后面的調用。需要注意的是,這里導入包名的時候,我們選擇第一個:ohos.agp.components包。


完成后,依然會報錯,提示我們需要創建構造函數:


同樣默認會有很多構造方法,我們選擇第一個(單個參數)即可。


(二)實現繪畫工具

這樣一個基礎的組件類就創建好了,接著我們構思下一畫板工具里需要哪些元素:


畫筆:用于畫出各種點和線。

畫板:用于展現我們到底花了什么,它是內容的載體。

所以,根據以上這些元素,在接下來我們需要在代碼里定義和創建一些內容:

  1. Path mPath = new Path(); 
  2.  
  3. Paint mPaint; 
  4.  
  5. Point mPrePoint = new Point(); 
  6.  
  7. Point mPreCtrlPoint = new Point(); 

  • Canvas : 畫布的意思,屬于渲染組件,一般用于渲染各種界面元素,這里需要 import ohos.agp.render.Canvas;包
  • Path : 路徑的意思,也屬于渲染組件,用于描述繪制的路徑。需要import ohos.agp.render.Path;
  • Paint : 表示繪制,屬于渲染組件,用于一些繪制操作,需要import ohos.agp.render.Paint;
  • Point : 表示一個點,通常由二維坐標(x,y)組成,需要import ohos.agp.utils.Point;

所以上面的代碼,我們先定義了一些等待使用的工具變量。

現在我們缺少了一個東西,那就是如何交互?一般的,繪圖這樣的,我們要么鼠標,要么觸屏,要么就是電子繪筆等。這里我們使用鴻蒙觸摸組件來實現。

在代碼中去實現Component.TouchEventListener方法:


實現onTouchEvent()方法:


onTouchEvent包含兩個參數:Component表示當前接收的組件,TouchEvent表示當前的觸摸事件。


通過getAction實例方法可以獲取TouchEvent的狀態:

  • TouchEvent.PRIMARY_POINT_DOWN : 按下狀態
  • TouchEvent.PRIMARY_POINT_UP :點按狀態抬起
  • TouchEvent.POINT_MOVE: 點按拖動

我們需要在按下的時候開始記錄點的位置,拖動的時候記錄下整個軌跡,而抬起的時候則不做任何事情。

所以,在onTouchEvent事件函數中,我們的代碼這樣寫:

  1. switch (touchEvent.getAction()) { 
  2.  
  3. case TouchEvent.PRIMARY_POINT_DOWN: { 
  4.  
  5. MmiPoint point = touchEvent.getPointerPosition(touchEvent.getIndex()); 
  6.  
  7. mPath.moveTo(point.getX(), point.getY()); 
  8.  
  9. mPrePoint.position[0] = point.getX(); 
  10.  
  11. mPrePoint.position[1] = point.getY(); 
  12.  
  13. mPreCtrlPoint.position[0] = point.getX(); 
  14.  
  15. mPreCtrlPoint.position[1] = point.getY(); 
  16.  
  17. return true
  18.  
  19.  
  20. case TouchEvent.PRIMARY_POINT_UP: 
  21.  
  22. break; 
  23.  
  24. case TouchEvent.POINT_MOVE: { 
  25.  
  26. break; 
  27.  

 MmiPoint :表示是人機交互接口的一個Point,這里用來接收點擊事件的點,需要import ohos.multimodalinput.event.MmiPoint;

然后在點擊下去的這一下,指定路徑mPath的moveTo目標為當前事件點擊獲得的點。

同時也設置了兩個預制緩存點的坐標為當前點擊的點。

抬起的操作,我們這里暫時不做處理。

直接來處理下移動分支下的操作:

  1. case TouchEvent.POINT_MOVE: { 
  2.  
  3. MmiPoint point = touchEvent.getPointerPosition(touchEvent.getIndex()); 
  4.  
  5. Point currCtrlPoint = new Point((point.getX() + mPrePoint.position[0]) / 2, 
  6.  
  7. (point.getY() + mPrePoint.position[1]) / 2); 
  8.  
  9. mPath.cubicTo(mPrePoint, mPreCtrlPoint, currCtrlPoint); 
  10.  
  11. mPreCtrlPoint.position[0] = currCtrlPoint.position[0]; 
  12.  
  13. mPreCtrlPoint.position[1] = currCtrlPoint.position[1]; 
  14.  
  15. mPrePoint.position[0] = point.getX(); 
  16.  
  17. mPrePoint.position[1] = point.getY(); 
  18.  
  19. invalidate(); 
  20.  
  21. break; 

 > 解析

同樣用MmiPoint來接收點擊輸入,然后先說下mPath.cubicTo:使用path的cubicTo方法來實現三次貝塞爾曲線,就是說兩個點之間的線有兩個控制點。這樣可以讓曲線更加的平滑,它需要輸入三個點的參數,所以,我們之前定義了兩個Point變量,這里就需要用上了,整體上的原理就是,先把點擊獲得第一個點傳入到曲線函數中,然后計算當前點擊的位置加上第一個點的二分之一偏移量來細化得到一個更小的值來作為第三個參數,而第二個參數,我們讓緩存的另一個點直接接收當前點擊的點的值,然后傳入到第二個參數中,最后又更新當前位置給第一個點,這樣第一個點傳入(舊的點),加上拖動后的當前點(新點),在當前點的二分偏移量的點,構成了三點傳給了曲線函數,最后重新更新舊的點,讓舊點變成一個新的位置,再次拖動的時候,就全部有了新的值,形成一個閉環。

invalidate()函數表示申請重新繪制(刷新UI)。

至此,我們就完成了點繪制(畫筆)的計算方法。

下一步,我們要實現讓畫筆的這些點和線呈現到畫板(Canvas)上:


追加實現Component.DrawTask的方法:

然后根據提示實現onDraw方法

在onDraw方法中添加如下實現:

  1. canvas.drawPath(mPath, mPaint); 

 

使用canvas的實例方法drawPath來將畫筆和路徑傳入實現繪制。

到這里還沒完,我們還需要做一些初始化的工作,我們寫一個Init函數:

  1. private void Init() 
  2.  
  3.  
  4. mPaint = new Paint(); 
  5.  
  6. mPaint.setColor(Color.WHITE); 
  7.  
  8. mPaint.setStrokeWidth(5f); 
  9.  
  10. mPaint.setStyle(Paint.Style.STROKE_STYLE); 
  11.  
  12. addDrawTask(this::onDraw); 
  13.  
  14. setTouchEventListener(this::onTouchEvent); 
  15.  

 這里將畫筆實例化,并設置顏色、粗細及樣式。然后添加繪制任務addDrawTask、設置點擊事件的監聽setTouchEventListener,這倆函數分別是畫布和事件監聽內置的函數,并非自定義的。

最后,我們需要在Draw的構造函數中調用這個 Init()方法,這樣就可以在使用new創建這個Draw組件實例時自動初始化。

(三)調用工具

最后時調用我們寫的這個繪畫工具。

回到slice目錄,并打開MainAbilitySlice文件


定義各一個方向布局:

  1. private DirectionalLayout directionalLayout = new DirectionalLayout(this); 

在onStart方法中,創建一個布局配置,并將配置指定給方向布局:

  1. LayoutConfig config = new LayoutConfig(LayoutConfig.MATCH_PARENT, LayoutConfig.MATCH_PARENT); 
  2.  
  3. directionalLayout.setLayoutConfig(config); 

 接著創建剛才寫好的Draw組件,需要添加import com.qibiao.drawdemo.Draw;

  1. Draw draw = new Draw(this); 

設置布局配置

  1. draw.setLayoutConfig(config); 

創建背景元素(這里設置為黑色,黑板嚒~)

  1. ShapeElement element = new ShapeElement(); 
  2.  
  3. element.setRgbColor(new RgbColor(0, 0, 0)); 

 設置背景元素

  1. draw.setBackground(element); 

將組件添加到布局中

  1. directionalLayout.addComponent(draw); 

設置UI內容:

  1. super.setUIContent(directionalLayout); 

完整代碼如下:

(四)運行效果

運行一個TV的遠程模擬器,然后run:

手寫一個:你好,鴻蒙

[[358405]]

看起來還不錯(別在意細節~)。

不過,還不夠完美,我們再給他弄個擦除的功能。

回到Draw

添加一個重置的方法:


然后再到MainAbilitySlice中添加一個按鈕,并調用clear方法:


再次運行已經支持擦除。

(五)完整代碼

ok,本篇已經務必盡量精簡了,最后放上代碼鏈接(已開源):

https://gitee.com/doufx/draw-component

©著作權歸作者和HarmonyOS技術社區共同所有,如需轉載,請注明出處,否則將追究法律責任。

想了解更多內容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區

https://harmonyos.51cto.com/#zz

 

責任編輯:jianghua 來源: 鴻蒙社區
相關推薦

2020-12-09 11:53:24

鴻蒙開發HelloWord

2021-01-11 11:04:49

鴻蒙HarmonyOS應用開發

2020-12-29 09:59:01

鴻蒙HarmonyOS智能家居

2020-12-16 10:05:48

鴻蒙開發板Onenet平臺

2020-12-28 11:19:06

鴻蒙HarmonyOSPage Abilit

2020-12-04 12:42:59

組件鴻蒙Text

2020-12-15 11:57:49

Hi3861 HarmonyOS開發板

2020-12-23 11:45:27

鴻蒙HarmonyOSTextField組件

2021-04-30 16:23:58

WebRTC實時音頻

2021-07-15 06:43:11

Bash調試腳本

2020-12-07 12:34:33

開發板鴻蒙hello world

2023-11-27 13:54:00

kubernetes高可用

2013-09-13 14:08:01

2012-06-28 10:26:51

Silverlight

2022-07-13 15:31:29

手繪板canvas鴻蒙

2021-04-23 09:50:41

topLinux命令

2014-08-08 09:30:04

android scrollview

2020-10-13 18:22:58

DevOps工具開發

2019-07-19 14:06:48

APP代碼打包

2019-08-19 09:10:14

人工智能深度學習技術
點贊
收藏

51CTO技術棧公眾號

精品久久久久久久久久| www.色综合.com| 久久精品中文字幕| 亚洲色偷偷色噜噜狠狠99网| 九色porny自拍视频在线播放| 在线欧美福利| 日韩av在线免费观看一区| 免费在线观看亚洲视频| av福利精品| 成人小视频在线| 国产精品电影观看| 久草免费在线观看视频| 欧美日韩色图| 亚洲精品一区二区三区蜜桃下载| 国产美女视频免费| 免费黄网站在线观看| 狠狠色丁香久久婷婷综| 97精品国产aⅴ7777| 国产美女久久久久久| 日韩在线你懂的| 欧美一区二区在线看| 青青青在线播放| 天天干在线视频论坛| 亚洲国产电影在线观看| 国内精品视频在线播放| 国产精品久久久久久免费| 一区二区三区国产盗摄| 久久综合免费视频| 影音先锋男人在线| 亚洲福利网站| 亚洲黄色免费三级| 91欧美一区二区三区| 日本一道高清亚洲日美韩| 精品成人久久av| 欧美国产视频一区| 免费av毛片在线看| 中文字幕 久热精品 视频在线| 国产精品一区久久| 日韩 国产 欧美| 一本色道久久综合一区 | 亚洲精品无amm毛片| 日韩av一区二区三区四区| 2019亚洲男人天堂| 日本熟妇色xxxxx日本免费看| 激情小说亚洲色图| 日韩欧美区一区二| 亚洲精品mv在线观看| 成人亚洲免费| 欧美偷拍一区二区| 午夜激情在线观看视频| 二区三区不卡| 调教+趴+乳夹+国产+精品| 成人在线免费观看视频网站| www免费视频观看在线| 国产精品视频麻豆| 日韩欧美视频一区二区三区四区| 99热在线只有精品| 精品在线播放免费| 亚洲精品欧美日韩专区| 一区二区三区日| 黄色资源网久久资源365| 成人免费高清完整版在线观看| 日韩欧美国产亚洲| 99国产成+人+综合+亚洲欧美| 亚洲午夜未删减在线观看 | 国产精品一区在线| 91深夜福利视频| 国产精品老熟女视频一区二区| 99香蕉国产精品偷在线观看 | 国产精选在线观看91| 国产福利免费视频| 丁香婷婷综合网| 久久久久久a亚洲欧洲aⅴ| 日韩电影网址| 欧美精彩视频一区二区三区| 香蕉视频在线网址| 丁香高清在线观看完整电影视频| 中文字幕亚洲一区二区va在线| 国产欧美日韩综合精品二区| 欧美 日韩 人妻 高清 中文| 91免费在线播放| 深夜福利成人| 91网在线看| 精品欧美aⅴ在线网站| 午夜dv内射一区二区| 日韩三级成人| 亚洲精品第一国产综合精品| 精品人妻中文无码av在线| 亚洲影视一区| 欧美一级视频免费在线观看| 中文字幕在线观看第二页| 国产精品夜夜爽| 精品蜜桃一区二区三区| 99精品老司机免费视频| 一区二区免费看| 久久美女福利视频| 成人黄色理论片| 亚洲精品久久久久| 国内毛片毛片毛片毛片毛片| 韩国在线一区| 国产精品偷伦免费视频观看的| 啪啪小视频网站| 国产经典欧美精品| 蜜桃成人在线| 中中文字幕av在线| 日韩欧美在线字幕| 免费看的av网站| 欧美日韩中字| 97免费在线视频| 国产精品久久久久久免费免熟| 精品在线你懂的| 欧美高清性xxxxhdvideosex| av网站在线看| 欧美天天综合网| yy6080午夜| 亚洲女同一区| 国产精品免费一区豆花| 深夜福利视频网站| 亚洲人一二三区| 亚洲不卡视频在线| 久9re热视频这里只有精品| 久久精品视频播放| 欧美在线视频精品| 久久久蜜桃精品| 亚洲人精品午夜射精日韩 | 日韩欧美国产高清91| 久久久久亚洲av无码麻豆| av一区二区在线播放| 97超碰国产精品女人人人爽 | 精品1区2区3区| 五级黄高潮片90分钟视频| 中出一区二区| 成人激情视频免费在线| 高清福利在线观看| 色婷婷综合五月| 风间由美一二三区av片| 亚洲高清不卡| 成人自拍视频网站| 欧美人与禽猛交乱配| 日韩欧美久久久| 欧美人妻一区二区| 国产精品99久久久久久久vr | 国产裸体视频网站| 国产精品久久久久久| 国产精品久久二区| 高清在线观看av| 欧美色精品在线视频| www.日本高清视频| 美女视频一区在线观看| 亚洲激情啪啪| 国产精品3区| 久久夜色精品国产| av网站在线观看免费| 亚洲欧美激情视频在线观看一区二区三区 | 伊人成人222| 亚洲精品tv久久久久久久久久| 久久久久久网站| 亚洲乱码国产乱码精品精软件| 久久亚区不卡日本| 久久9精品区-无套内射无码| 久久99视频| 日韩**中文字幕毛片| 黄色在线小视频| 欧美在线免费观看亚洲| 日韩欧美视频免费观看| 精彩视频一区二区| 男人天堂手机在线视频| 欧美巨大xxxx| 国产成一区二区| av资源种子在线观看| 欧美日韩国产高清一区二区三区| 熟女人妻在线视频| 久久免费黄色| 一本一生久久a久久精品综合蜜 | 欧美~级网站不卡| 7777奇米亚洲综合久久| 91www在线| 国产一区二区黄| 国产www免费观看| 亚洲综合免费观看高清完整版 | 久久99九九99精品| 亚洲美女自拍偷拍| 日韩三级网址| 欧洲精品久久久| 老司机精品影院| 亚洲第一偷拍网| 最近中文字幕在线观看| 亚洲精品国产成人久久av盗摄| 不卡的av中文字幕| 欧美性色综合| 日本午夜精品电影| 亚洲日本va中文字幕| 国产91免费观看| 污污网站在线看| 一区二区三区国产视频| www.激情五月.com| 日本道色综合久久| 国产精选第一页| 国产精品麻豆网站| 亚洲精品中文字幕在线播放| 日本成人在线一区| 亚洲人精品午夜射精日韩| 99re久久最新地址获取| 久久综合精品一区| 美女精品视频在线| 国产精品久久视频| 日本在线播放一二三区| 欧美乱人伦中文字幕在线| 九九在线视频| 亚洲国产精彩中文乱码av在线播放| 538精品在线视频| 国产剧情一区二区| 欧美成人黑人猛交| 亚洲欧洲日本mm| 亚洲午夜精品一区二区三区| 在线观看欧美理论a影院| 成人性色av| 亚洲欧洲专区| 国产福利精品av综合导导航| 99thz桃花论族在线播放| 久久精品一偷一偷国产| www 日韩| 亚洲天堂网站在线观看视频| 日韩在线观看视频网站| 欧美一区二区三区公司| 中文字幕+乱码+中文乱码www| 综合av第一页| a级在线免费观看| 99久久婷婷国产综合精品电影| 爱福利视频一区二区| 亚洲经典三级| 国产av人人夜夜澡人人爽麻豆| 天堂99x99es久久精品免费| 99高清视频有精品视频| 日韩在线精品强乱中文字幕| 国产主播喷水一区二区| 欧美国产日韩电影| 日韩免费中文字幕| 免费观看欧美大片| 啪一啪鲁一鲁2019在线视频| 久热在线观看视频| 91av在线视频观看| 天堂中文在线播放| 日本一欧美一欧美一亚洲视频| 在线观看麻豆蜜桃| 在线亚洲男人天堂| 国产视频福利在线| 国产一区二区三区视频在线观看| 国产精品伦一区二区三区| 欧美日韩一二区| 亚洲熟妇无码久久精品| 欧美日韩一区二区三区免费看| 激情综合网五月天| 亚洲免费毛片网站| 久久久精品99| 午夜久久久影院| 国产又大又黄视频| 日本韩国精品在线| 中文区中文字幕免费看| 欧美日韩在线播放三区四区| 91精品人妻一区二区三区果冻| 欧美日韩另类字幕中文| 亚洲天堂男人av| 欧美日韩在线一区二区| 97精品人妻一区二区三区| 欧美一区中文字幕| 亚洲经典一区二区三区| 亚洲国产精品成人va在线观看| 一级做a爱片久久毛片| 欧美丰满少妇xxxbbb| 国产情侣在线播放| 亚洲成人网av| 国产免费av在线| 欧美精品在线免费| 欧亚av在线| 国产日韩在线视频| 亚洲欧洲国产精品一区| 欧美18视频| 亚洲国产精品91| 777777av| 麻豆成人免费电影| 免费观看污网站| 国产午夜精品理论片a级大结局| 一区二区三区少妇| 中文久久乱码一区二区| 精品人妻在线播放| 日韩欧美成人网| 国产精品乱码一区二区| 日韩风俗一区 二区| av女优在线| 午夜精品一区二区三区视频免费看| 丝袜中文在线| 国产成人精品视频| 亚洲一区二区三区日本久久九| 91亚洲一区精品| 亚洲人成网站77777在线观看| 久久久久久久久久久一区| 经典一区二区| 青青在线视频免费观看| 视频在线观看一区| 亚洲美女精品视频| 中文字幕av一区二区三区| 黄色小说在线观看视频| 欧美日韩国产三级| 色吊丝在线永久观看最新版本| 亚洲成年人在线播放| 91最新在线| 亚洲91精品在线| 色婷婷成人网| 欧美一进一出视频| 精品91久久久久| 在线免费看v片| 国产欧美日本一区视频| 精品成人久久久| 日韩精品在线一区二区| 日本高清中文字幕在线| 国产福利视频一区| 亚洲精品动态| 久久久久久久久久久99| 国产一级精品在线| 福利视频第一页| 一本久久a久久精品亚洲| 欧美性受xxxx狂喷水| 不卡伊人av在线播放| 精品福利在线| 日韩影片在线播放| 久久一区中文字幕| 星空大象在线观看免费播放| 亚洲欧美偷拍另类a∨色屁股| 激情综合网五月婷婷| 日韩欧美中文一区| 欧美jizzhd69巨大| 国产日韩欧美夫妻视频在线观看| 美女精品久久| 天天成人综合网| 国内成人自拍视频| 我要看黄色一级片| 欧美一区二区免费| a视频在线免费看| 91免费在线视频| 久久精品亚洲人成影院| 色综合五月婷婷| 亚洲精品乱码久久久久久久久| 男人天堂2024| 日韩精品视频免费在线观看| cao在线视频| 久久国产日韩欧美| 国产一区二区三区的电影 | 国产青草视频在线观看| 久久国产福利国产秒拍| a一级免费视频| 欧美一区二区三区在线视频| 午夜在线激情影院| 国产精品欧美久久| 一本色道久久综合亚洲精品不| 性生活免费在线观看| 国产精品久久网站| 国产精品丝袜黑色高跟鞋| 欧美成人精品三级在线观看 | 一二三区不卡| 免费看的av网站| 午夜欧美视频在线观看| 裸体xxxx视频在线| 国产精品人成电影| 亚洲免费二区| 久久免费精品国产| 亚洲va韩国va欧美va精品| 四虎精品在永久在线观看| 日韩免费在线免费观看| 97精品中文字幕| 亚洲AV成人精品| 都市激情亚洲色图| 永久免费av片在线观看全网站| 2020久久国产精品| 美女毛片一区二区三区四区| 久草福利视频在线| 亚洲欧美一区二区不卡| 污视频软件在线观看| 国产精品久久久久久久7电影| 亚洲美女久久| 亚洲天堂网2018| 亚洲国产aⅴ天堂久久| 国产小视频免费在线观看| 92看片淫黄大片欧美看国产片| 第一sis亚洲原创| 三日本三级少妇三级99| 午夜精品久久久久久久蜜桃app| 99久久精品无免国产免费| 欧美尺度大的性做爰视频| 美国成人xxx| 小明看看成人免费视频| 精品magnet| 国产在线1区| 欧美在线视频一区二区三区| 国产一区视频网站| 毛片在线免费视频| 久久国产精彩视频| 精品国产91久久久久久浪潮蜜月| 日本激情视频在线| 亚洲大片免费看|