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