Android中的实时数据可视化

时间:2012-05-08 12:02:20

标签: android data-visualization

我正在制作一个音频vu表,我希望得到类似下图所示的图像,并实时显示音频幅度。

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

我的第一个想法是为每个矩形设置一个View背景色,并根据幅度显示/隐藏它。

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

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

谢谢你

enter image description here

1 个答案:

答案 0 :(得分: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;
        }
    }
}