2014-09-02 4 views
-1

Я пытаюсь реализовать визуализатор формы волны в своем приложении, которое рисует форму волны на холсте с аудиовхода в реальном времени. (Снимок экрана ниже)Как постепенно увеличить ширину холста?

Мне нужно сделать это так, чтобы его можно было прокручивать горизонтально слева направо.

Я решил, что должен использовать HorizontalScrollView и сделать холст постепенно увеличиваться по ширине, чтобы он охватывал ширину экрана. Теперь мне интересно, как это можно достичь?

enter image description here

ответ

0

Keep ширина Canvas «s то же самое и использовать 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().