前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【干货】Android利用SurfaceView结合科大讯飞修改语音实别UI

【干货】Android利用SurfaceView结合科大讯飞修改语音实别UI

作者头像
Vaccae
发布2019-07-25 10:54:29
1.2K0
发布2019-07-25 10:54:29
举报
文章被收录于专栏:微卡智享微卡智享

前言

最近刚换了三星的Note9,深度体验了一下Bixby的语音功能,觉得挺不错的,而且上周的人工智能大会上,分布屏幕两边的分别是科大讯飞和腾讯提供的服务:讯飞听见和腾讯同传。两者的表现也都是让人眼前一亮。

我在自己的E码通中已经集成的讯飞语音识别《集成科大讯飞语音识别查找货品信息》,里面用的是讯飞语音识别的默认控件,如图

另一篇文章《Android集成科大讯飞SDK实现语音识别》里面也有用到了SurfaceView,但是就没做过介绍,正好今天要以公司的产品里面实现语音实别,正好修改一下识别的UI,就用到了SurfaceView。

SurfaceView简介

SurfaceView本身是一个View,符合一切View的特性,需要通过Canvas画布绘制。可以在另一个线程中更新界面,不会阻碍界面的交互。

SurfaceView 绘图效率较高,用于界面更新频繁的程序,如相机预览。一些游戏的动画效果也一般用SurfaceView来实现。

实现效果

我们这次想实现的效果是说上去的话能够直接显示在弹出的语音实别框里,如下图

整个视频是操作的演示效果

https://v.qq.com/x/page/i1349c7nts8.html

代码演示

语音实别的这块实现主要还是看《Android集成科大讯飞SDK实现语音识别》文章里的介绍吧,我们这次的代码主要是看SurfaceView


(1)创建SurfaceView

创建自定义的SurfaceView继承自SurfaceView,并实现两个接口:SurfaceHolder.Callback代码如下:

通过实现这个接口,就需要在自定义的SurfaceView中实现接口的方法,对于SurfaceHolder.Callback方法,需要实现如下方法,其实就是SurfaceView的生命周期:

上面的DrawText是我们的核心方法,一会儿再介绍


(2)初始化SurfaceView

在自定义的SurfaceView的构造方法中,需要对SurfaceView进行初始化,包括SurfaceHolder的初始化、如支持透明度,防止被其它控件遮挡。代码如下:


(3)使用SurfaceView

通过SurfaceHolder对象的lockCanvans()方法,我们可以获取当前的Canvas绘图对象。接下来的操作就和自定义View中的绘图操作一样了。需要注意的是这里获取到的Canvas对象还是继续上次的Canvas对象,而不是一个新的对象。因此,之前的绘图操作都会被保留,如果需要擦除,则可以在绘制前,通过定义一个Paint,然后drawPaint()方法来进行清屏操作。

核心方法DrawText

上面这段可以看到,我们先通过SurfaceHolder对象的lockCanvans()获取到canvas,然后利用了一个Paint进行了一次清屏操作,防止上次字符重叠,接下来就是用的TextPaint进行文字的绘制。

到这里我们的SurfaceView就已经定义好了。


调用SurfaceView

我们新建一个IattextActivity

然后对应的布局文件里面加入我们的TextSurfaceview和一个ImageView

效果如下:


调用SurfaceView


整个Activity的代码


-END-

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-10-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 微卡智享 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
语音识别
腾讯云语音识别(Automatic Speech Recognition,ASR)是将语音转化成文字的PaaS产品,为企业提供精准而极具性价比的识别服务。被微信、王者荣耀、腾讯视频等大量业务使用,适用于录音质检、会议实时转写、语音输入法等多个场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档