色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

鴻蒙ArkTS開(kāi)始實(shí)例:【canvas實(shí)現(xiàn)簽名板功能】

jf_46214456 ? 來(lái)源:jf_46214456 ? 作者:jf_46214456 ? 2024-04-08 10:10 ? 次閱讀

使用ArkTS中的canvas實(shí)現(xiàn)簽名板的功能,canvas畫布大家都很熟悉,我們會(huì)用它經(jīng)常實(shí)現(xiàn)一些畫板或者圖表、表格之類的功能。canvas簽名板是我在開(kāi)發(fā)APP過(guò)程中實(shí)現(xiàn)的一個(gè)功能,開(kāi)發(fā)過(guò)程中也是遇到比較多的問(wèn)題。我會(huì)按照以下幾點(diǎn)來(lái)講解開(kāi)發(fā)整個(gè)過(guò)程:

一、屏幕旋轉(zhuǎn)

實(shí)現(xiàn)簽名板的第一個(gè)功能就是旋轉(zhuǎn)屏幕。旋轉(zhuǎn)屏幕在各種框架中都有不一樣的方式,比如:

  • 在H5端,我們一般是使用CSS中的transform屬性中的rotate()方法來(lái)強(qiáng)制將網(wǎng)頁(yè)橫屏,然后實(shí)現(xiàn)一系列功能
  • 在嵌套第三方APP中,我們一般是調(diào)用對(duì)應(yīng)的SDK提供的方法,即可實(shí)現(xiàn)旋轉(zhuǎn)屏幕
  • .....

實(shí)現(xiàn)方式還有很多,各有千秋,相信HarmonyOS也會(huì)提供對(duì)應(yīng)API方法來(lái)設(shè)置旋轉(zhuǎn)屏幕。

而我自己則是在頁(yè)面內(nèi)通過(guò) Window 對(duì)象的 setPreferredOrientation() 方法實(shí)現(xiàn)橫豎屏切換。以下是我實(shí)現(xiàn)的完整代碼:

// 在EntryAbility.ts中獲取窗口實(shí)例并賦值給全局變量,如此所有頁(yè)面都可以通過(guò)全局// 變量去修改窗口信息,不需要重新獲取
import UIAbility from '@ohos.app.ability.UIAbility';
import window from '@ohos.window';
export default class EntryAbility extends UIAbility {
  onWindowStageCreate(windowStage: window.WindowStage) {
    windowStage.getMainWindow((err, data) = > {
      if (err.code) {
        console.error('獲取失敗' + JSON.stringify(err));
        return;
      }
      console.info('獲取主窗口的實(shí)例:' + JSON.stringify(data));
      globalThis.windowClass = data // 賦值給全局變量windowClass
    });
  }
}

// 在具體頁(yè)面中的使用
import window from '@ohos.window';
@Entry
@Componentstruct SignatureBoard {

  onPageShow() {
// 獲取旋轉(zhuǎn)的方向,具體可以查看對(duì)應(yīng)文檔
    let orientation = window.Orientation.LANDSCAPE_INVERTED;
    try {
      // 設(shè)置屏幕旋轉(zhuǎn)
      globalThis.windowClass.setPreferredOrientation(orientation, (err) = > {});
    } catch (exception) {
      console.error('設(shè)置失敗: ' + JSON.stringify(exception));
    }
  }
}

此次開(kāi)發(fā)文檔參考[qr23.cn/AKFP8k]

搜狗高速瀏覽器截圖20240326151547.png

二、canvas畫布

鴻蒙開(kāi)發(fā)文檔或者添加+mau123789是v直接領(lǐng)

解決了屏幕旋轉(zhuǎn)問(wèn)題,接下來(lái)實(shí)現(xiàn)簽名功能。因?yàn)樵谥熬鸵呀?jīng)開(kāi)發(fā)過(guò),只要將對(duì)應(yīng)的語(yǔ)法轉(zhuǎn)成ArkTS的語(yǔ)法就好。以下是代碼解析:

2.1 按照官方文檔使用canvas組件

@Entry@Component
struct SignatureBoard {
  private settings: RenderingContextSettings = new RenderingContextSettings(true)
  private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)

  build() {
    Column() {
      Canvas(this.context)
        .width('100%')
        .height('100%')
        .backgroundColor('#fff')
        .onReady(() = > {
        })
    }
    .width('100%')
    .height('100%')
  }
}

2.2 設(shè)置畫筆的屬性以及綁定手勢(shì)功能。

在js中我們基本都是使用鼠標(biāo)事件來(lái)實(shí)現(xiàn)的,而在ArkTS中是通過(guò)手勢(shì)方法來(lái)監(jiān)聽(tīng)手指在屏幕上的操作,有很多種,大家需要用到的可以去查看對(duì)應(yīng)的文檔。

build() {
    Column() {
      Canvas(this.context)
        .width('100%')
        .height('100%')
        .backgroundColor('#fff')
        .onReady(() = > {
          this.context.lineWidth = 3; // 設(shè)置畫筆的粗細(xì)
          this.context.strokeStyle = "#000"; // 設(shè)置畫筆的顏色
          // 還可以設(shè)置很多,根據(jù)自己業(yè)務(wù)需要
        })
        .gesture(
          PanGesture(this.panOption)
            .onActionStart((event: any) = > {
               // 手指按下的時(shí)候
            })
            .onActionUpdate((event: any) = > {
               // 手指移動(dòng)的時(shí)候
            })
            .onActionEnd(() = > {
               // 手指離開(kāi)的時(shí)候
            })
        )
  }

2.3 我們實(shí)現(xiàn)的手勢(shì)的綁定,那么就可以實(shí)現(xiàn)手指在屏幕上滑動(dòng)之后畫布就繪畫出對(duì)應(yīng)的軌跡路線了,這里將會(huì)使用到一些畫布的功能。

@Entry
@Componentstruct SignatureBoard {
  private lastX: number = 0;
  private lastY: number = 0;
  private isDown: Boolean = false;
  private panOption: PanGestureOptions = new PanGestureOptions({ direction: PanDirection.All, distance: 1 })
  private settings: RenderingContextSettings = new RenderingContextSettings(true)
  private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)

  draw(startX, startY, endX, endY) {
    // 起點(diǎn)
    this.context.moveTo(startX, startY);
    // 終點(diǎn)
    this.context.lineTo(endX, endY);
    // 調(diào)用 stroke,即可看到繪制的線條
    this.context.stroke();
  }
  build() {
    Column() {
      Canvas(this.context)
        .width('100%')
        .height('100%')
        .backgroundColor('#fff')
        .onReady(() = > {
          this.context.lineWidth = 3;
          this.context.strokeStyle = "#000";
        })
        .gesture(
          PanGesture(this.panOption)
            .onActionStart((event: any) = > {
              this.isDown = true;
              // 按下時(shí)的點(diǎn)作為起點(diǎn)
              this.lastX = event.localX;
              this.lastY = event.localY;
              // 創(chuàng)建一個(gè)新的路徑
              this.context.beginPath();
            })
            .onActionUpdate((event: any) = > {
              // 沒(méi)有按下就不管
              if (!this.isDown) return;
              const offsetX = event.localX
              const offsetY = event.localY
              // 調(diào)用繪制方法
              this.draw(this.lastX, this.lastY, offsetX, offsetY);
              // 把當(dāng)前移動(dòng)時(shí)的坐標(biāo)作為下一次的繪制路徑的起點(diǎn)
              this.lastX = offsetX;
              this.lastY = offsetY;
            })
            .onActionEnd(() = > {
              this.isDown = false;
              // 關(guān)閉路徑
              this.context.closePath();
            })
        )
    }
    .width('100%')
    .height('100%')
  }
}

以上就是我們實(shí)現(xiàn)簽名板的完整思路以及代碼了,有幾個(gè)需要注意的點(diǎn)是:

  1. new PanGestureOptions實(shí)例的時(shí)候需要把distance設(shè)置小一點(diǎn),值越小靈敏度就越高
  2. PanGesture的回調(diào)方法中event參數(shù),官方默認(rèn)給的屬性類型為GestureEvent。但是我在編輯器源碼中查看該屬性沒(méi)有我們定義我們想要的localX、localY,但是實(shí)際是有返回的,如果直接用編輯器會(huì)報(bào)錯(cuò)。所以需要將event定為any類型,這樣就可以獲取且不報(bào)錯(cuò)了。

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Canvas
    +關(guān)注

    關(guān)注

    0

    文章

    16

    瀏覽量

    10981
  • 鴻蒙
    +關(guān)注

    關(guān)注

    57

    文章

    2339

    瀏覽量

    42805
  • HarmonyOS
    +關(guān)注

    關(guān)注

    79

    文章

    1973

    瀏覽量

    30143
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    使用ArkTS中的canvas實(shí)現(xiàn)簽名功能

    作為一名web前端開(kāi)發(fā)者,還在持續(xù)自學(xué)HarmonyOS,學(xué)習(xí)過(guò)程中我會(huì)分享自己做的一些工具,包括開(kāi)發(fā)難點(diǎn)與解決方案,希望對(duì)各位HarmonyOS開(kāi)發(fā)者有所啟發(fā)。
    的頭像 發(fā)表于 12-20 09:46 ?751次閱讀

    鴻蒙OS開(kāi)發(fā)實(shí)戰(zhàn):【ArkTS 實(shí)現(xiàn)MQTT協(xié)議(2)】

    1. 協(xié)議傳輸通道僅為TCPSocket 2. 基于HarmonyOS SDK API 9開(kāi)發(fā) 3. 開(kāi)發(fā)語(yǔ)言:ArkTS,TypeScript
    的頭像 發(fā)表于 04-01 14:48 ?1529次閱讀
    <b class='flag-5'>鴻蒙</b>OS開(kāi)發(fā)實(shí)戰(zhàn):【<b class='flag-5'>ArkTS</b> <b class='flag-5'>實(shí)現(xiàn)</b>MQTT協(xié)議(2)】

    鴻蒙ArkTS的起源和簡(jiǎn)介

    ArkTS也會(huì)結(jié)合應(yīng)用開(kāi)發(fā)及運(yùn)行的其他方面需求持續(xù)演進(jìn): 更完善的類型系統(tǒng) 我們已經(jīng)設(shè)計(jì)并實(shí)現(xiàn)了專門運(yùn)行時(shí),利用ArkTS的類型輸入,在程序執(zhí)行一開(kāi)始就獲得較高的運(yùn)行性能(不像其它傳
    發(fā)表于 01-16 16:23

    鴻蒙語(yǔ)言ArkTS(更好的生產(chǎn)力與性能)

    ArkTS鴻蒙生態(tài)的應(yīng)用開(kāi)發(fā)語(yǔ)言 ArkTS提供了聲明式UI范式、狀態(tài)管理支持等相應(yīng)的能力,讓開(kāi)發(fā)者可以以更簡(jiǎn)潔、更自然的方式開(kāi)發(fā)應(yīng)用。 同時(shí),它在保持TypeScript(簡(jiǎn)稱TS)基本語(yǔ)法
    發(fā)表于 02-17 15:56

    鴻蒙實(shí)戰(zhàn)項(xiàng)目開(kāi)發(fā):【短信服務(wù)】

    ||---SmsModel.ets// 封裝短信類 具體實(shí)現(xiàn) 發(fā)送短信功能在SmsModel中 : /* * Copyright (c) 2022 Huawei Device Co., Ltd.
    發(fā)表于 03-03 21:29

    鴻蒙Flutter實(shí)戰(zhàn):06-使用ArkTs開(kāi)發(fā)Flutter鴻蒙插件

    # 使用 ArkTs 開(kāi)發(fā) Flutter 鴻蒙平臺(tái)插件 本文講述如何開(kāi)發(fā)一個(gè) Flutter 鴻蒙插件,如何實(shí)現(xiàn) Flutter 與鴻蒙
    發(fā)表于 10-22 21:56

    使用canvas畫隨機(jī)運(yùn)動(dòng)小球的教程

    ,可以先創(chuàng)建一個(gè)構(gòu)造函數(shù);給構(gòu)造函數(shù)添加對(duì)應(yīng)的屬性和方法;實(shí)例化出多個(gè)對(duì)象,并且保存在數(shù)組中;遍歷每個(gè)對(duì)象,實(shí)現(xiàn)畫圓;間隔修改每個(gè)球的x,y值。先準(zhǔn)備畫布確定對(duì)應(yīng)的寬高:<canvas
    發(fā)表于 03-23 10:44

    如何使用鴻蒙canvas.drawPictur()繪制一張資源圖片?

    安卓中使用canvas.drawBitmap(); 發(fā)現(xiàn)鴻蒙中有個(gè)canvas.drawPictur()方法,但是不知道如何構(gòu)建參數(shù),達(dá)到引用資源圖片的目的。 或者我調(diào)用的繪制圖片方法不對(duì),求指教???
    發(fā)表于 05-07 11:51

    請(qǐng)問(wèn)鴻蒙自定義控件中如何刷新canvas

      自定義控件通過(guò)addDrawTask在DrawTask中使用canvas進(jìn)行繪制,需要實(shí)現(xiàn)一個(gè)動(dòng)畫效果,需要刷新一下canvas,不知道通過(guò)哪個(gè)方法進(jìn)行刷新
    發(fā)表于 05-31 16:16

    HarmonyOS/OpenHarmony應(yīng)用開(kāi)發(fā)-ArkTS畫布組件Canvas

    提供畫布組件,用于自定義繪制圖形。該組件從API Version 8開(kāi)始支持。后續(xù)版本如有新增內(nèi)容,則采用上角標(biāo)單獨(dú)標(biāo)記該內(nèi)容的起始版本。子組件,不支持。接口: Canvas(context
    發(fā)表于 02-27 09:49

    手把手教你使用ArkTS中的canvas實(shí)現(xiàn)簽名功能

    問(wèn)題,接下來(lái)實(shí)現(xiàn)簽名功能。因?yàn)樵谥熬鸵呀?jīng)開(kāi)發(fā)過(guò),只要將對(duì)應(yīng)的語(yǔ)法轉(zhuǎn)成 ArkTS 的語(yǔ)法就好。以下是代碼解析:2.1 按照官方文檔使用 canva
    發(fā)表于 12-20 10:33

    如何通過(guò)Canvas組件實(shí)現(xiàn)涂鴉功能

    新增的功能可以幫助開(kāi)發(fā)者開(kāi)發(fā)出更流暢、更美觀的應(yīng)用。本篇文章將為大家分享如何通過(guò)Canvas組件實(shí)現(xiàn)涂鴉功能,用戶可以選擇空白畫布或者簡(jiǎn)筆圖進(jìn)行自由繪畫。
    的頭像 發(fā)表于 09-20 16:31 ?2596次閱讀

    鴻蒙應(yīng)用實(shí)例代碼

    鴻蒙應(yīng)用實(shí)例代碼,僅供參考。
    發(fā)表于 09-27 14:56 ?12次下載

    鴻蒙開(kāi)發(fā)之ArkTS基礎(chǔ)知識(shí)

    一、ArkTS簡(jiǎn)介 ArkTS是HarmonyOS優(yōu)選的主力應(yīng)用開(kāi)發(fā)語(yǔ)言。它在TypeScript(簡(jiǎn)稱TS)的基礎(chǔ)上,匹配了鴻蒙的ArkUI框架,擴(kuò)展了聲明式UI、狀態(tài)管理等相應(yīng)的能力,讓開(kāi)發(fā)者以
    的頭像 發(fā)表于 01-24 16:44 ?2237次閱讀
    <b class='flag-5'>鴻蒙</b>開(kāi)發(fā)之<b class='flag-5'>ArkTS</b>基礎(chǔ)知識(shí)

    鴻蒙OS開(kāi)發(fā)實(shí)例:【ArkTS類庫(kù)多線程@Concurrent裝飾器校驗(yàn)并發(fā)函數(shù)】

    在使用TaskPool時(shí),執(zhí)行的并發(fā)函數(shù)需要使用該裝飾器修飾,否則無(wú)法通過(guò)相關(guān)校驗(yàn)。從API version 9開(kāi)始,該裝飾器支持在ArkTS卡片中使用。
    的頭像 發(fā)表于 04-02 14:45 ?667次閱讀
    <b class='flag-5'>鴻蒙</b>OS開(kāi)發(fā)<b class='flag-5'>實(shí)例</b>:【<b class='flag-5'>ArkTS</b>類庫(kù)多線程@Concurrent裝飾器校驗(yàn)并發(fā)函數(shù)】
    主站蜘蛛池模板: 视频成人永久免费下载| 黃色带三级a级| 再深点灬舒服灬太大了在线视频| 色狠狠xx| 日本经典片免费看| 欧美黑人巨大xxxxx| 蜜桃色欲AV久久无码精品| 久久中文字幕人妻熟AV女蜜柚M| 极品内射少妇精品无码视频| 国产最新进精品视频| 国产免费人成在线视频有码| 国产激情精品久久久久久碰| 国产AV高清怡春院| 姑娘视频日本在线播放| 国产精品JK白丝AV网站| 国产精品视频第一区二区三区| 国产精品久久久久一区二区三区| 国产精品欧美亚洲| 国产呻吟久久久久久久92| 国产又黄又硬又粗| 精品国产乱码久久久久久上海公司| 娇妻被朋友玩得呻吟在线电影| 久久精品视频免费| 久久免费看少妇高潮A片JA| 另类专区hy777| 女人的选择hd| 色拍拍噜噜噜啦啦新网站| 无码国产成人777爽死在线观看| 亚洲高清国产拍精品影院| 亚洲视频成人| 2018久久视频在线视频观看| u15女少天堂写真| 俄罗斯女人与马Z00Z视频| 国产精品久久久久久久伊一| 狠狠躁日日躁人人爽| 老师你奶真大下面水真多| 欧美人成在线观看ccc36| 偷拍精品视频一区二区三区| 亚洲国产精品自在自线观看| 伊人影院蕉久| TUBE19UP老师学生|