????????這是一個基于HarmonyOS做的一個手寫板應用,只需要簡單的幾十行代碼,就可以實現如下手寫功能以及清空畫布功能。
一、先上效果圖:
二、上代碼
@Entry
@Component
struct Index {//手寫路徑@State pathCommands: string = '';build() {Column() {//清空畫布按鈕Button("清空").onClick(() => {//將路徑置空this.pathCommands = '';})Flex() {//如果路徑不為空,那么展示path路徑,// stokeWidth(5)表示畫筆寬度為5,// fill('none')表示填充為空白,// stroke(Color.Blue)表示畫筆為藍色if (this.pathCommands != '') {Path().commands(this.pathCommands).strokeWidth(5).fill('none').stroke(Color.Blue)}}.onTouch((event: TouchEvent) => {//響應手勢觸摸操作this.onTouchEvent(event)}).width('100%').height('100%')}}onTouchEvent(event: TouchEvent) {//手指按下和移動時的位置轉換成像素位置let x = vp2px(event.touches[0].x);let y = vp2px(event.touches[0].y);switch (event.type) {//手指按下case TouchType.Down://眺到(x,y)點this.pathCommands += 'M' + x + ' ' + y;break;//畫線到(x,y)點case TouchType.Move:this.pathCommands += 'L' + x + ' ' + y;break;default:break;}}
}
在這個代碼中,我們構建了一個手勢繪圖應用。以下是關鍵部分的解釋:
-
@Entry和@Component注解: 這兩個注解用于標識這個類是一個入口點并且是一個組件。在HarmonyOS中,這是定義頁面的標準方式。
-
@State注解: 在HarmonyOS中,@State注解同樣用于聲明狀態。在這里,我們聲明了一個字符串類型的
pathCommands
,用于存儲手勢繪制的路徑。 -
build()函數:這個函數定義了HarmonyOS頁面的結構,包括清空按鈕和用于展示繪圖路徑的組件。
-
onTouchEvent函數: 這個函數處理觸摸事件,根據手指按下和移動的位置,將相應的繪制命令添加到路徑中,實現了手勢繪制的功能。