diff options
author | Felix Palmer <felix.palmer@metaswitch.com> | 2011-12-05 15:16:11 -0800 |
---|---|---|
committer | Felix Palmer <felix.palmer@metaswitch.com> | 2011-12-05 15:16:11 -0800 |
commit | e0c6d6f3ed2a473a6d11594a38db715b60a5ef88 (patch) | |
tree | e6b268ded54018f606f79a1552b22d0f011217de | |
parent | 2c13b2787e7b4eb9a2e406677fdd4230088d96f7 (diff) | |
download | android_external_android-visualizer-e0c6d6f3ed2a473a6d11594a38db715b60a5ef88.tar.gz android_external_android-visualizer-e0c6d6f3ed2a473a6d11594a38db715b60a5ef88.tar.bz2 android_external_android-visualizer-e0c6d6f3ed2a473a6d11594a38db715b60a5ef88.zip |
Refactor so we pass canvas on render, rather than
in constructor
5 files changed, 39 insertions, 52 deletions
diff --git a/src/com/pheelicks/visualizer/VisualizerView.java b/src/com/pheelicks/visualizer/VisualizerView.java index 215a0e5..613218a 100644 --- a/src/com/pheelicks/visualizer/VisualizerView.java +++ b/src/com/pheelicks/visualizer/VisualizerView.java @@ -185,19 +185,19 @@ public class VisualizerView extends View { paint.setStrokeWidth(50f); paint.setAntiAlias(true); paint.setColor(Color.argb(200, 233, 0, 44)); - mBarGraphRendererBottom = new BarGraphRenderer(mCanvas, 16, paint, false); + mBarGraphRendererBottom = new BarGraphRenderer(16, paint, false); Paint paint2 = new Paint(); paint2.setStrokeWidth(12f); paint2.setAntiAlias(true); paint2.setColor(Color.argb(200, 11, 111, 233)); - mBarGraphRendererTop = new BarGraphRenderer(mCanvas, 4, paint2, true); + mBarGraphRendererTop = new BarGraphRenderer(4, paint2, true); Paint paint3 = new Paint(); paint3.setStrokeWidth(3f); paint3.setAntiAlias(true); paint3.setColor(Color.argb(255, 222, 92, 143)); - mCircleRenderer = new CircleRenderer(mCanvas, paint3, true); + mCircleRenderer = new CircleRenderer(paint3, true); Paint linePaint = new Paint(); linePaint.setStrokeWidth(1f); @@ -208,21 +208,21 @@ public class VisualizerView extends View { lineFlashPaint.setStrokeWidth(5f); lineFlashPaint.setAntiAlias(true); lineFlashPaint.setColor(Color.argb(188, 255, 255, 255)); - mLineRenderer = new LineRenderer(mCanvas, linePaint, lineFlashPaint, true); + mLineRenderer = new LineRenderer(linePaint, lineFlashPaint, true); } if (mBytes != null) { // Render all audio renderers AudioData audioData = new AudioData(mBytes); - mCircleRenderer.render(audioData, mRect); - mLineRenderer.render(audioData, mRect); + mCircleRenderer.render(mCanvas, audioData, mRect); + mLineRenderer.render(mCanvas, audioData, mRect); } if (mFFTBytes != null) { // Render all FFT renderers FFTData fftData = new FFTData(mFFTBytes); - mBarGraphRendererTop.render(fftData, mRect); - mBarGraphRendererBottom.render(fftData, mRect); + mBarGraphRendererTop.render(mCanvas, fftData, mRect); + mBarGraphRendererBottom.render(mCanvas, fftData, mRect); } // Fade out old contents diff --git a/src/com/pheelicks/visualizer/renderer/BarGraphRenderer.java b/src/com/pheelicks/visualizer/renderer/BarGraphRenderer.java index 0901b4b..b17a695 100644 --- a/src/com/pheelicks/visualizer/renderer/BarGraphRenderer.java +++ b/src/com/pheelicks/visualizer/renderer/BarGraphRenderer.java @@ -21,30 +21,28 @@ public class BarGraphRenderer extends Renderer /** * Renders the FFT data as a series of lines, in histogram form - * @param canvas * @param divisions - must be a power of 2. Controls how many lines to draw * @param paint - Paint to draw lines with * @param top - whether to draw the lines at the top of the canvas, or the bottom */ - public BarGraphRenderer(Canvas canvas, - int divisions, + public BarGraphRenderer(int divisions, Paint paint, boolean top) { - super(canvas); + super(); mDivisions = divisions; mPaint = paint; mTop = top; } @Override - public void onRender(AudioData data, Rect rect) + public void onRender(Canvas canvas, AudioData data, Rect rect) { // Do nothing, we only display FFT data } @Override - public void onRender(FFTData data, Rect rect) + public void onRender(Canvas canvas, FFTData data, Rect rect) { for (int i = 0; i < data.bytes.length / mDivisions; i++) { mFFTPoints[i * 4] = i * 4 * mDivisions; @@ -66,6 +64,6 @@ public class BarGraphRenderer extends Renderer } } - mCanvas.drawLines(mFFTPoints, mPaint); + canvas.drawLines(mFFTPoints, mPaint); } } diff --git a/src/com/pheelicks/visualizer/renderer/CircleRenderer.java b/src/com/pheelicks/visualizer/renderer/CircleRenderer.java index 1f159b2..8c7fab5 100644 --- a/src/com/pheelicks/visualizer/renderer/CircleRenderer.java +++ b/src/com/pheelicks/visualizer/renderer/CircleRenderer.java @@ -24,12 +24,9 @@ public class CircleRenderer extends Renderer * @param canvas * @param paint - Paint to draw lines with */ - public CircleRenderer(Canvas canvas, - Paint paint) + public CircleRenderer(Paint paint) { - this(canvas, - paint, - false); + this(paint, false); } /** @@ -38,17 +35,15 @@ public class CircleRenderer extends Renderer * @param paint - Paint to draw lines with * @param cycleColor - If true the color will change on each frame */ - public CircleRenderer(Canvas canvas, - Paint paint, - boolean cycleColor) + public CircleRenderer(Paint paint, boolean cycleColor) { - super(canvas); + super(); mPaint = paint; mCycleColor = cycleColor; } @Override - public void onRender(AudioData data, Rect rect) + public void onRender(Canvas canvas, AudioData data, Rect rect) { if(mCycleColor) { @@ -75,14 +70,14 @@ public class CircleRenderer extends Renderer mPoints[i * 4 + 3] = polarPoint2[1]; } - mCanvas.drawLines(mPoints, mPaint); + canvas.drawLines(mPoints, mPaint); // Controls the pulsing rate modulation += 0.04; } @Override - public void onRender(FFTData data, Rect rect) + public void onRender(Canvas canvas, FFTData data, Rect rect) { // Do nothing, we only display audio data } diff --git a/src/com/pheelicks/visualizer/renderer/LineRenderer.java b/src/com/pheelicks/visualizer/renderer/LineRenderer.java index 494f252..55de67d 100644 --- a/src/com/pheelicks/visualizer/renderer/LineRenderer.java +++ b/src/com/pheelicks/visualizer/renderer/LineRenderer.java @@ -28,14 +28,9 @@ public class LineRenderer extends Renderer * @param paint - Paint to draw lines with * @param paint - Paint to draw flash with */ - public LineRenderer(Canvas canvas, - Paint paint, - Paint flashPaint) + public LineRenderer(Paint paint, Paint flashPaint) { - this(canvas, - paint, - flashPaint, - false); + this(paint, flashPaint, false); } /** @@ -45,19 +40,18 @@ public class LineRenderer extends Renderer * @param paint - Paint to draw flash with * @param cycleColor - If true the color will change on each frame */ - public LineRenderer(Canvas canvas, - Paint paint, + public LineRenderer(Paint paint, Paint flashPaint, boolean cycleColor) { - super(canvas); + super(); mPaint = paint; mFlashPaint = flashPaint; mCycleColor = cycleColor; } @Override - public void onRender(AudioData data, Rect rect) + public void onRender(Canvas canvas, AudioData data, Rect rect) { if(mCycleColor) { @@ -85,18 +79,18 @@ public class LineRenderer extends Renderer { // Amplitude is bigger than normal, make a prominent line amplitude = amp; - mCanvas.drawLines(mPoints, mFlashPaint); + canvas.drawLines(mPoints, mFlashPaint); } else { // Amplitude is nothing special, reduce the amplitude amplitude *= 0.99; - mCanvas.drawLines(mPoints, mPaint); + canvas.drawLines(mPoints, mPaint); } } @Override - public void onRender(FFTData data, Rect rect) + public void onRender(Canvas canvas, FFTData data, Rect rect) { // Do nothing, we only display audio data } diff --git a/src/com/pheelicks/visualizer/renderer/Renderer.java b/src/com/pheelicks/visualizer/renderer/Renderer.java index ada0caa..12be4b8 100644 --- a/src/com/pheelicks/visualizer/renderer/Renderer.java +++ b/src/com/pheelicks/visualizer/renderer/Renderer.java @@ -14,60 +14,60 @@ import com.pheelicks.visualizer.FFTData; abstract public class Renderer { - // Canvas & Rect to render to - protected Canvas mCanvas; - // Have these as members, so we don't have to re-create them each time protected float[] mPoints; protected float[] mFFTPoints; - public Renderer(Canvas canvas) + public Renderer() { - mCanvas = canvas; } // As the display of raw/FFT audio will usually look different, subclasses // will typically only implement one of the below methods /** * Implement this method to render the audio data onto the canvas + * @param canvas - Canvas to draw on * @param data - Data to render * @param rect - Rect to render into */ - abstract public void onRender(AudioData data, Rect rect); + abstract public void onRender(Canvas canvas, AudioData data, Rect rect); /** * Implement this method to render the FFT audio data onto the canvas + * @param canvas - Canvas to draw on * @param data - Data to render * @param rect - Rect to render into */ - abstract public void onRender(FFTData data, Rect rect); + abstract public void onRender(Canvas canvas, FFTData data, Rect rect); // These methods should actually be called for rendering /** * Render the audio data onto the canvas + * @param canvas - Canvas to draw on * @param data - Data to render * @param rect - Rect to render into */ - final public void render(AudioData data, Rect rect) + final public void render(Canvas canvas, AudioData data, Rect rect) { if (mPoints == null || mPoints.length < data.bytes.length * 4) { mPoints = new float[data.bytes.length * 4]; } - onRender(data, rect); + onRender(canvas, data, rect); } /** * Render the FFT data onto the canvas + * @param canvas - Canvas to draw on * @param data - Data to render * @param rect - Rect to render into */ - final public void render(FFTData data, Rect rect) + final public void render(Canvas canvas, FFTData data, Rect rect) { if (mFFTPoints == null || mFFTPoints.length < data.bytes.length * 4) { mFFTPoints = new float[data.bytes.length * 4]; } - onRender(data, rect); + onRender(canvas, data, rect); } } |