HarmonyOS 如何实现手写签字功能,包括回退、保存等信息?

HarmonyOS 如何实现手写签字功能,包括回退、保存等信息?

HarmonyOS
9天前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
Excelsior_abit

参考demo:

@Entry 
@Component 
struct Demo3 { 
  context: CanvasRenderingContext2D = new CanvasRenderingContext2D(new RenderingContextSettings(true)) 
  //签字区域 
  guessContext: CanvasRenderingContext2D = new CanvasRenderingContext2D(new RenderingContextSettings(true)) 
  //自动生成图片画布 
  drawIng: boolean = false 
  lastX: number = 0 
  lastY: number = 0 
  gLastX: number = 0 
  gLastY: number = 0 
  pointList: PointClass[] = [] 
  timer: number = -1 
  @State imgStr: string = "" 
  drawLine(x: number, y: number) { 
    this.context.moveTo(this.lastX, this.lastY) 
    // 先将线移动到上一个点 
    this.context.lineTo(x, y) 
    this.lastX = x 
    // 将当前内容的x记录 
    this.lastY = y 
    // 将当前的y记录 
    this.context.stroke() 
  } 
  drawGuess() { 
    if (this.pointList.length && this.timer === -1) { 
      this.timer = setInterval(() => { 
        if (this.pointList.length === 0) { 
          clearInterval(this.timer) 
          this.timer = -1 
          return 
        } 
        let pt1: PointClass = this.pointList.shift() as PointClass 
        this.guessLine(pt1) 
      }, 100) 
    } 
  } 
  guessLine(p: PointClass) { 
    if (p.reset) { 
      this.guessContext.closePath() 
      this.guessContext.beginPath() 
      this.gLastX = p.x 
      this.gLastY = p.y 
    } else { 
      this.guessContext.moveTo(this.gLastX, this.gLastY) 
      // 先将线移动到上一个点 
      this.guessContext.lineTo(p.x, p.y) 
      this.gLastX = p.x 
      // 将当前内容的x记录 
      this.gLastY = p.y 
      // 将当前的y记录 
      this.guessContext.stroke() 
    } 
  } 
  transFile() { 
  } 
  build() { 
    Scroll() { 
      Column({ space: 20 }) { 
        Canvas(this.context) 
          .width(360) 
          .height(300) 
          .backgroundColor(Color.Grey) 
          .onTouch((event: TouchEvent) => { 
            if (event.type === TouchType.Down) { 
              this.lastX = event.touches[0].x 
              this.lastY = event.touches[0].y 
              this.drawIng = true 
              this.context.beginPath() 
              this.pointList.push({ x: this.lastX, y: this.lastY, reset: true }) 
            } 
            if (event.type === TouchType.Move) { 
              if (this.drawIng) { 
                this.pointList.push({ x: event.touches[0].x, y: event.touches[0].y, reset: false }) 
                this.drawLine(event.touches[0].x, event.touches[0].y) 
              } 
            } 
            if (event.type === TouchType.Up) { 
              this.drawIng = false 
              this.context.closePath() 
            } 
            // 开始模仿 
            this.drawGuess() 
          } 
          ) 
          .onReady(() => { 
            this.context.lineWidth = 4 
            this.context.strokeStyle = "blue" 
          }) 
        Canvas(this.guessContext) 
          .width(360) 
          .height(300) 
          .backgroundColor(Color.Red) 
          .onReady(() => { 
            this.guessContext.lineWidth = 4 
            this.guessContext.strokeStyle = "#fff" 
          }) 
        Row({ space: 20 }) { 
          Button("清屏") 
            .onClick(() => { 
              this.context.clearRect(0, 0, 360, 300) 
              this.guessContext.clearRect(0, 0, 360, 300) 
              this.pointList = [] 
            }) 
          Button("存储图片") 
            .onClick(() => { 
              this.imgStr = this.context.toDataURL("image/jpeg") 
              console.info('图片开始存储'+this.imgStr) 
            }) 
        } 
 
        if (this.imgStr) { 
          Image(this.imgStr).width(360).height(300) 
        } 
      } 
    } 
  } 
} 
class PointClass { 
  x: number = 0 
  y: number = 0 
  reset?: boolean = false 
}
分享
微博
QQ
微信
回复
8天前
相关问题
HarmonyOS 如何获取信号强度信息
387浏览 • 1回复 待解决
怎么实现保存网络图片到相册功能
234浏览 • 1回复 待解决
如何查询设备的SDK版本信息
2272浏览 • 1回复 待解决
SignalInformation怎么获取LAC CID信息
7731浏览 • 1回复 待解决
如何获取App版本号,版本名信息
3772浏览 • 1回复 待解决
HarmonyOS 分享功能如何实现
130浏览 • 1回复 待解决
求告知如何接入手写服务
447浏览 • 1回复 待解决
屏幕作业区域控制视频快进或回退
632浏览 • 1回复 待解决
Web组件的Cookie信息保存在哪里?
421浏览 • 1回复 待解决
HarmonyOS如何实现头像选择功能
461浏览 • 1回复 待解决
HarmonyOS如何拦截Alt+F4实现文件保存
505浏览 • 1回复 待解决
HarmonyOS 如何实现手势密码功能
402浏览 • 1回复 待解决
HarmonyOS如何实现粘贴板功能
293浏览 • 1回复 待解决
HarmonyOS 如何实现语音助手的功能
177浏览 • 1回复 待解决