Android中的实时数据可视化

Android中的实时数据可视化,android,data-visualization,Android,Data Visualization,我正在研究一个音频vu计,我想得到如下所示的图像,实时显示音频振幅 我知道如何获得每个通道的音频振幅,但我不确定如何快速显示彩色矩形 我的第一个想法是为每个矩形创建一个背景色的视图,并根据振幅显示/隐藏它 有人试过吗?它是否足够快,可以每50或100毫秒显示一次振幅 实现这一目标的最快方法是什么 谢谢 所以您希望创建尽可能多的矩形视图并更改其可见性? 不要那样做。这将是一个混乱的内部布局。而是创建自定义视图并覆盖onDraw()。在onDraw中,使用canvas.drawRect()绘制矩形。

我正在研究一个音频vu计,我想得到如下所示的图像,实时显示音频振幅

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

我的第一个想法是为每个矩形创建一个背景色的
视图,并根据振幅显示/隐藏它

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

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

谢谢


所以您希望创建尽可能多的矩形视图并更改其可见性? 不要那样做。这将是一个混乱的内部布局。而是创建自定义视图并覆盖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;
        }
    }
}
私有类AmplicateView扩展视图{
私人英特姆维兹;
私营机构;
私人涂料;
公共振幅视图(上下文、属性集属性){
超级(上下文,attrs);
mRectPaint=新油漆(){
{
设置样式(样式填充);
}
};
}
@凌驾
已更改尺寸的受保护空心(整数w、整数h、整数oldw、整数oldh){
super.onSizeChanged(w,h,oldw,oldh);
mWidth=w;
mHeight=h;
}
@凌驾
受保护的void onDraw(画布){
int numRects=10;
红色整数=255;
绿色整数=0;
int incr=255/个百分点;
对于(int i=0;i