如何逐步增加画布的宽度?

时间:2014-09-02 16:41:27

标签: android android-canvas android-drawable

我试图在我的应用程序中实现一个Waveform可视化工具,它从实时音频输入中在画布上绘制波形。 (以下截图)

我需要做的是使其能够从左向右水平滚动。

我想我应该使用HorizontalScrollView并使画布的宽度逐渐增大,以便跨越屏幕宽度。现在我想知道如何实现这一目标?

enter image description here

1 个答案:

答案 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()drawrestore()