讯飞语音测评的简单demo演示
样式如下图所示:
标题
一、自定义语音动态视图SpeeceVoiceView
package com.example.speechevaluation.view;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.PixelFormat;
import android.graphics.RectF;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import com.example.speechevaluation.QZXTools;
import com.example.speechevaluation.R;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
* @author qzx
* @time 2018/10/23 14:10
*/
public class SpeechVoiceView extends SurfaceView implements SurfaceHolder.Callback, Runnable {
private Context mContext;
private SurfaceHolder mSurfaceHolder;
private Paint mPaint;
private Canvas mCanvas;
private ExecutorService executorService;
private boolean isDestroy = false;
private static final int INTERVER_TIME = 100;//30毫秒
private boolean isRecording = false;
private boolean isParsing = false;
private int curVolume;
private int circle_radius = 120;
private static final int RectRadius = 20;
private static final int RectDivide = 10;
private static final int RectHeight = 40;
private RectF rectF;
/**
* 设置解析情况
*/
public void setParsing(boolean parsing) {
isParsing = parsing;
}
/**
* 设置音量情况
*/
public void setCurVolume(int curVolume) {
this.curVolume = curVolume;
}
public SpeechVoiceView(Context context) {
this(context, null);
}
public SpeechVoiceView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public SpeechVoiceView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
mContext = context;
init();
}
private void init() {
mSurfaceHolder = getHolder();
mSurfaceHolder.addCallback(this);
/*消除黑色的背景*/
setZOrderOnTop(true);
//this.setEGLConfigChooser(8, 8, 8, 8, 16, 0);
mSurfaceHolder.setFormat(PixelFormat.TRANSLUCENT);
/*消除黑色的背景*/
setFocusable(true);
setFocusableInTouchMode(true);
mPaint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.FILTER_BITMAP_FLAG);
mPaint.setStyle(Paint.Style.FILL_AND_STROKE);
mPaint.setColor(Color.TRANSPARENT);
rectF = new RectF();
executorService = Executors.newSingleThreadExecutor();
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
isDestroy = false;
executorService.execute(this);
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
isDestroy = true;
}
@Override
public void run() {
while (!isDestroy) {
// curVolume = (int) (Math.random() * 15);
// QZXTools.logE("zbv", "curVolume=" + curVolume, null);
//控制刷新的帧数
long startTime = System.currentTimeMillis();
draw();
long endTime = System.currentTimeMillis();
if ((endTime - startTime) < INTERVER_TIME) {
try {