我正在制作一个音频vu表,我希望得到类似下图所示的图像,并实时显示音频幅度。
我知道如何获得每个通道的音频幅度,但我不确定如何快速显示彩色矩形。
我的第一个想法是为每个矩形设置一个View
背景色,并根据幅度显示/隐藏它。
有人已经尝试过吗?是否足够快,每50或100毫秒显示一次振幅?
实现这一目标的最快方法是什么?
谢谢你
答案 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;
}
}
}