我正在编写一个应用程序,需要获得麦克风级别才能创建声级计。我发现了这个:Android Media Player Decibel Reading。我仍然需要创建一个仪表来显示当前水平,100%的交易。所以一个条形图越高越好它就会变得更红。只需获取显示级别的代码就很棒。
在上面的链接中有一种获取当前分贝读数的方法,但是它似乎需要在一个单独的线程中运行并不断更新它。我正在读VU表,但不知道从哪里开始。
提前致谢!
答案 0 :(得分:2)
好的,我假设您正在使用您在问题中链接的代码。
因此,根据振幅值,此仪表必须随时改变其大小和颜色。
要绘制形状,请扩展View类并覆盖onDraw方法,如下所示
float x,y; //CONSTANTS FOR WHERE YOU WANT YOUR BAR TO BE
float baseWidth; // This is the width of one block.
//Number of blocks together will be your rectangle
float nwidth; //This is the number of blocks varying according to amplitude
float height; //CONSTANT HEIGHT
Paint color=new Paint();
//For drawing meter
public void onDraw(Canvas c){
changeColorAndSize();
Rect rect = new Rect(x, y, x + (baseWidth*nwidth), y + height);
shapeDrawable.setBounds(rect);
shapeDrawable.getPaint().set(paint);
shapeDrawable.draw(canvas);
}
public void changeColorAndSize(){
double amp=getAmplitude();
nWidth=amp;
paint.setARGB (a, r*(Integer.parseInt(amp)), g, b);
//This will change the redness of the bar. a,g and b will have to be set by you
}
public double getAmplitude() {
if (mRecorder != null)
return (mRecorder.getMaxAmplitude());
else
return 0;
}
要使电表每隔'x'秒更换一次,您必须重复拨打postInvalidate()
OR
使用动画,然后从您的视图中调用startAnimation()
。