绘制语音消息,仿聊天软件,语音消息的绘制。

仿聊天软件,语音消息的绘制。

HarmonyOS
2024-05-23 23:42:15
浏览
收藏 0
回答 1
回答 1
按赞同
/
按时间
xbibi

使用的核心API

Canvas

核心代码解释

const CANVAS_POS_X1: number = 0; 
const CANVAS_POS_Y1: number = 0; 
const CANVAS_POS_X2: number = 119; 
const CANVAS_POS_Y2: number = 18; 
const START_POS_X: number = 117; 
const OFFSET_X: number = 4.5; 
const RECT_WIDTH: number = 1.5; 
const TWO: number = 2; 
  
@Entry 
@Component 
struct Index { 
  @State message: string = 'Hello World'; 
  @State volumeList: number[] = new Array(27).fill(0); 
  canvasTimer: number = -1; 
  renderingContextSettings: RenderingContextSettings = new RenderingContextSettings(true); 
  canvasRenderingContext2D: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.renderingContextSettings); 
  
  build() { 
    Row() { 
      Canvas(this.canvasRenderingContext2D) 
        .width(CANVAS_POS_X2) 
        .height(18) 
        .backgroundColor(Color.White) 
        .onReady(() => { 
          this.canvasRenderingContext2D.strokeStyle = 
          getContext().resourceManager.getColorSync($r('sys.color.ohos_id_color_text_primary_contrary')); 
          this.canvasRenderingContext2D.lineWidth = RECT_WIDTH; 
          this.canvasRenderingContext2D.lineCap = 'round'; 
          this.refreshVolumeList(); 
        }) 
  
    } 
    .backgroundColor('#4d5e55') 
    .justifyContent(FlexAlign.Center) 
    .alignItems(VerticalAlign.Center) 
    .width('100%') 
    .height(80) 
  } 
  
  refreshVolumeList() { 
    this.canvasTimer = setInterval(() => { 
      this.volumeList.shift(); 
      this.volumeList.push(8  + 10 * Math.random()); 
      this.draw(); 
    }, 70); 
  } 
  
  draw() { 
    this.canvasRenderingContext2D.clearRect(CANVAS_POS_X1, CANVAS_POS_Y1, CANVAS_POS_X2, CANVAS_POS_Y2); 
    for (let index = 0; index < this.volumeList.length; index++) { 
      const element = this.volumeList[index]; 
      if(element === 0) {      continue;    } 
      const posX = START_POS_X - (OFFSET_X * index); 
      const posY = (18 - element) / TWO; 
      this.canvasRenderingContext2D.beginPath(); 
      this.canvasRenderingContext2D.moveTo(posX, posY); 
      this.canvasRenderingContext2D.lineTo(posX, posY + element); 
      this.canvasRenderingContext2D.stroke(); 
    } 
  } 
  
  aboutToAppear() { 
    clearInterval(this.canvasTimer) 
  } 
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.

注明适配的版本信息

IDE版本:4.1.3.500

SDK版本:4.1.5.6

实现效果

分享
微博
QQ
微信
回复
2024-05-24 23:29:36


相关问题
HarmonyOS 如何实现语音助手功能?
794浏览 • 1回复 待解决
文本转语音方法有哪些?
777浏览 • 1回复 待解决
ArkTS语言支持语音识别吗?
1609浏览 • 1回复 待解决
HarmonyOS 语音播放问题
461浏览 • 1回复 待解决
HarmonyOS 语音识别报错
584浏览 • 1回复 待解决
HarmonyOS 语音识别SDK
502浏览 • 1回复 待解决
HarmonyOS 绘制圆滑折线或绘制曲线
398浏览 • 1回复 待解决
HarmonyOS 如何实现语音转成文字
455浏览 • 1回复 待解决
HarmonyOS 实时语音转文本
394浏览 • 1回复 待解决
HarmonyOS 关于语音发送功能
512浏览 • 1回复 待解决
Sqlite sql 语音支持问题
622浏览 • 0回复 待解决
HarmonyOS 识别手机录制语音失败
645浏览 • 1回复 待解决
HarmonyOS是否有采集语音能力
861浏览 • 1回复 待解决