2014-09-02 77 views
-1

我试图在我的应用程序中实现一个波形可视化器,它从实时音频输入在画布上绘制波形。 (以下屏幕截图)如何逐渐增加Canvas的宽度?

我需要做的就是让它可以从左到右水平滚动。

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

enter image description here

回答

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()