我试图在我的应用程序中实现一个Waveform可视化工具,它从实时音频输入中在画布上绘制波形。 (以下截图)
我需要做的是使其能够从左向右水平滚动。
我想我应该使用HorizontalScrollView
并使画布的宽度逐渐增大,以便跨越屏幕宽度。现在我想知道如何实现这一目标?
答案 0 :(得分:0)
保持Canvas
的宽度不变,并在实际绘图时使用canvas.translate()
方法。
所以,假设你有一个Rect rect
包含要绘制的矩形(其边界可能超过View
的边界),以及int horizontalOffset = 0
作为保持偏移量的变量您的绘图矩形将在用户触摸View
时进行调整。
现在,当onDraw(Canvas)
被调用时:
@Override
public void onDraw(Canvas canvas){
super.onDraw(canvas);
canvas.save();
canvas.translate(horizontalOffset, 0);
canvas.drawRect(rect, paint);
canvas.restore();
}
然后,您可以覆盖onTouch(View, MotionEvent)
根据触摸事件计算水平偏移,然后invalidate()
View
。
注意:这显然只是绘制了一个Rect
,但你应该能够修改我在那里所做的事情,以绘制你正在绘制的内容。重要的部分是(按顺序)save()
,translate()
,draw
,restore()
。