我正在编写一个应用程序,该应用程序需要获得麦克风电平才能创建声级计。我发现了这个:Android 媒体播放器分贝读数。我仍然需要创建一个仪表来显示当前的水平,100% 的交易。例如,一个条形越高,它就会越红。只需获取代码以显示关卡就很棒。
在上面的链接中,有一种获取当前分贝读数的方法,但它似乎是我可能需要在单独的线程中运行并不断更新它的东西。我正在读 VU 表,但不知道从哪里开始。
提前致谢!
我正在编写一个应用程序,该应用程序需要获得麦克风电平才能创建声级计。我发现了这个:Android 媒体播放器分贝读数。我仍然需要创建一个仪表来显示当前的水平,100% 的交易。例如,一个条形越高,它就会越红。只需获取代码以显示关卡就很棒。
在上面的链接中,有一种获取当前分贝读数的方法,但它似乎是我可能需要在单独的线程中运行并不断更新它的东西。我正在读 VU 表,但不知道从哪里开始。
提前致谢!
好的,我假设您使用问题中链接到的代码。
因此,该仪表必须根据幅度值动态更改其大小和颜色。
要绘制形状,请扩展 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()
重复调用
或者
使用动画,并startAnimation()
从您的视图中调用它。