2012-05-08 45 views
3

我正在研究音频vu计,我希望得到如下图所示的图像,并实时显示音频幅度。Android中的实时数据可视化

我知道如何获得每个通道的音频幅度,但我不知道如何做足够快的彩色矩形显示。

我的第一个想法是有一个View与每个矩形的背景颜色和显示/根据幅度隐藏它。

有人试过吗?每隔50或100毫秒显示一次振幅是否足够快?

实现该目标的最快方法是什么?

感谢您

enter image description here

回答

2

所以,你想你有长方形和改变自己的知名度,让尽可能多的看法? 不要这样做。这将是你的布局里面一团糟。相反,使自定义视图并重写onDraw()。在onDraw中,您使用canvas.drawRect()绘制矩形。这种方式可以轻松实现每秒30-60帧。 这是一个简单而不完整的例子,但应该让你走上正确的轨道。

private class AmplitudeView extends View { 

    private int mWidth; 
    private int mHeight; 
    private Paint mRectPaint; 

    public AmplitudeView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     mRectPaint = new Paint() { 
      { 
       setStyle(Style.FILL); 
      } 
     }; 
    } 

    @Override 
    protected void onSizeChanged(int w, int h, int oldw, int oldh) { 
     super.onSizeChanged(w, h, oldw, oldh); 
     mWidth = w; 
     mHeight = h; 
    } 

    @Override 
    protected void onDraw(Canvas canvas) { 
     int numRects = 10; 
     int red = 255; 
     int green = 0; 
     int incr = 255/numRects; 
     for (int i = 0; i< numRects;i++){ 
      //TODO calculate color based on amplitude 
      mRectPaint.setColor(Color.argb(0xff, red, green, 0)); 
      //TODO calculate rectangle 
      canvas.drawRect(r, mRectPaint); 
      red-=incr; 
      green+=incr; 
     } 
    } 
}