3

我正在编写一个应用程序,该应用程序需要获得麦克风电平才能创建声级计。我发现了这个:Android 媒体播放器分贝读数。我仍然需要创建一个仪表来显示当前的水平,100% 的交易。例如,一个条形越高,它就会越红。只需获取代码以显示关卡就很棒。

在上面的链接中,有一种获取当前分贝读数的方法,但它似乎是我可能需要在单独的线程中运行并不断更新它的东西。我正在读 VU 表,但不知道从哪里开始。

提前致谢!

4

1 回答 1

4

好的,我假设您使用问题中链接到的代码。

因此,该仪表必须根据幅度值动态更改其大小和颜色。

要绘制形状,请扩展 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()从您的视图中调用它。

于 2012-12-06T06:24:29.683 回答