3
我正在研究音频vu计,我希望得到如下图所示的图像,并实时显示音频幅度。Android中的实时数据可视化
我知道如何获得每个通道的音频幅度,但我不知道如何做足够快的彩色矩形显示。
我的第一个想法是有一个View
与每个矩形的背景颜色和显示/根据幅度隐藏它。
有人试过吗?每隔50或100毫秒显示一次振幅是否足够快?
实现该目标的最快方法是什么?
感谢您
我正在研究音频vu计,我希望得到如下图所示的图像,并实时显示音频幅度。Android中的实时数据可视化
我知道如何获得每个通道的音频幅度,但我不知道如何做足够快的彩色矩形显示。
我的第一个想法是有一个View
与每个矩形的背景颜色和显示/根据幅度隐藏它。
有人试过吗?每隔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;
}
}
}