diff options
author | Felix Palmer <felix.palmer@metaswitch.com> | 2011-12-08 21:47:16 -0800 |
---|---|---|
committer | Felix Palmer <felix.palmer@metaswitch.com> | 2011-12-08 22:00:26 -0800 |
commit | 5ecda63ade42269ca6b4a114db0c81b2c5146659 (patch) | |
tree | ce6239e9eaefd9c2426ec58b5a874218df5289d9 | |
parent | e0c6d6f3ed2a473a6d11594a38db715b60a5ef88 (diff) | |
download | android_external_android-visualizer-5ecda63ade42269ca6b4a114db0c81b2c5146659.tar.gz android_external_android-visualizer-5ecda63ade42269ca6b4a114db0c81b2c5146659.tar.bz2 android_external_android-visualizer-5ecda63ade42269ca6b4a114db0c81b2c5146659.zip |
Moved renderer creation & addition out of
VisualizerView
-rw-r--r-- | res/layout/main.xml | 42 | ||||
-rw-r--r-- | src/com/pheelicks/app/MainActivity.java | 76 | ||||
-rw-r--r-- | src/com/pheelicks/visualizer/VisualizerView.java | 73 |
3 files changed, 148 insertions, 43 deletions
diff --git a/res/layout/main.xml b/res/layout/main.xml index a225cb7..d8f2f72 100644 --- a/res/layout/main.xml +++ b/res/layout/main.xml @@ -28,6 +28,48 @@ android:layout_width="0dp" android:layout_height="wrap_content" android:layout_margin="10dp" + android:layout_weight="0.25" + android:onClick="barPressed" + android:text="Bar" > + </Button> + + <Button + android:layout_width="0dp" + android:layout_height="wrap_content" + android:layout_margin="10dp" + android:layout_weight="0.25" + android:onClick="circlePressed" + android:text="Circle" > + </Button> + + <Button + android:layout_width="0dp" + android:layout_height="wrap_content" + android:layout_margin="10dp" + android:layout_weight="0.25" + android:onClick="linePressed" + android:text="Line" > + </Button> + + <Button + android:layout_width="0dp" + android:layout_height="wrap_content" + android:layout_margin="10dp" + android:layout_weight="0.25" + android:onClick="allPressed" + android:text="All" > + </Button> + </LinearLayout> + + <LinearLayout + android:layout_width="fill_parent" + android:layout_height="wrap_content" + android:layout_weight="0" > + + <Button + android:layout_width="0dp" + android:layout_height="wrap_content" + android:layout_margin="10dp" android:layout_weight="0.5" android:onClick="startPressed" android:text="Start" > diff --git a/src/com/pheelicks/app/MainActivity.java b/src/com/pheelicks/app/MainActivity.java index b5e16cf..65e9eae 100644 --- a/src/com/pheelicks/app/MainActivity.java +++ b/src/com/pheelicks/app/MainActivity.java @@ -7,12 +7,17 @@ package com.pheelicks.app; import android.app.Activity; +import android.graphics.Color; +import android.graphics.Paint; import android.media.MediaPlayer; import android.os.Bundle; import android.view.View; import com.pheelicks.visualizer.R; import com.pheelicks.visualizer.VisualizerView; +import com.pheelicks.visualizer.renderer.BarGraphRenderer; +import com.pheelicks.visualizer.renderer.CircleRenderer; +import com.pheelicks.visualizer.renderer.LineRenderer; /** * Basic demo to show how to use VisualizerView @@ -38,6 +43,51 @@ public class MainActivity extends Activity { mVisualizerView = (VisualizerView) findViewById(R.id.visualizerView); mVisualizerView.link(mPlayer); + + // Start with just line renderer + addLineRenderer(); + } + + private void addBarGraphRenderers() + { + Paint paint = new Paint(); + paint.setStrokeWidth(50f); + paint.setAntiAlias(true); + paint.setColor(Color.argb(200, 233, 0, 44)); + BarGraphRenderer barGraphRendererBottom = new BarGraphRenderer(16, paint, false); + mVisualizerView.addRenderer(barGraphRendererBottom); + + Paint paint2 = new Paint(); + paint2.setStrokeWidth(12f); + paint2.setAntiAlias(true); + paint2.setColor(Color.argb(200, 11, 111, 233)); + BarGraphRenderer barGraphRendererTop = new BarGraphRenderer(4, paint2, true); + mVisualizerView.addRenderer(barGraphRendererTop); + } + + private void addCircleRenderer() + { + Paint paint3 = new Paint(); + paint3.setStrokeWidth(3f); + paint3.setAntiAlias(true); + paint3.setColor(Color.argb(255, 222, 92, 143)); + CircleRenderer circleRenderer = new CircleRenderer(paint3, true); + mVisualizerView.addRenderer(circleRenderer); + } + + private void addLineRenderer() + { + Paint linePaint = new Paint(); + linePaint.setStrokeWidth(1f); + linePaint.setAntiAlias(true); + linePaint.setColor(Color.argb(88, 0, 128, 255)); + + Paint lineFlashPaint = new Paint(); + lineFlashPaint.setStrokeWidth(5f); + lineFlashPaint.setAntiAlias(true); + lineFlashPaint.setColor(Color.argb(188, 255, 255, 255)); + LineRenderer lineRenderer = new LineRenderer(linePaint, lineFlashPaint, true); + mVisualizerView.addRenderer(lineRenderer); } // Cleanup @@ -97,4 +147,30 @@ public class MainActivity extends Activity { { mPlayer.stop(); } + + public void barPressed(View view) + { + mVisualizerView.clearRenderers(); + addBarGraphRenderers(); + } + + public void circlePressed(View view) + { + mVisualizerView.clearRenderers(); + addCircleRenderer(); + } + + public void linePressed(View view) + { + mVisualizerView.clearRenderers(); + addLineRenderer(); + } + + public void allPressed(View view) + { + mVisualizerView.clearRenderers(); + addBarGraphRenderers(); + addCircleRenderer(); + addLineRenderer(); + } }
\ No newline at end of file diff --git a/src/com/pheelicks/visualizer/VisualizerView.java b/src/com/pheelicks/visualizer/VisualizerView.java index 613218a..78e047e 100644 --- a/src/com/pheelicks/visualizer/VisualizerView.java +++ b/src/com/pheelicks/visualizer/VisualizerView.java @@ -6,6 +6,9 @@ */ package com.pheelicks.visualizer; +import java.util.HashSet; +import java.util.Set; + import android.content.Context; import android.graphics.Bitmap; import android.graphics.Bitmap.Config; @@ -21,9 +24,7 @@ import android.media.audiofx.Visualizer; import android.util.AttributeSet; import android.view.View; -import com.pheelicks.visualizer.renderer.BarGraphRenderer; -import com.pheelicks.visualizer.renderer.CircleRenderer; -import com.pheelicks.visualizer.renderer.LineRenderer; +import com.pheelicks.visualizer.renderer.Renderer; /** * A class that draws visualizations of data received from a @@ -38,6 +39,8 @@ public class VisualizerView extends View { private Rect mRect = new Rect(); private Visualizer mVisualizer; + private Set<Renderer> mRenderers; + private Paint mFlashPaint = new Paint(); private Paint mFadePaint = new Paint(); @@ -64,6 +67,8 @@ public class VisualizerView extends View { mFlashPaint.setColor(Color.argb(122, 255, 255, 255)); mFadePaint.setColor(Color.argb(238, 255, 255, 255)); // Adjust alpha to change how quickly the image fades mFadePaint.setXfermode(new PorterDuffXfermode(Mode.MULTIPLY)); + + mRenderers = new HashSet<Renderer>(); } /** @@ -114,6 +119,19 @@ public class VisualizerView extends View { }); } + public void addRenderer(Renderer renderer) + { + if(renderer != null) + { + mRenderers.add(renderer); + } + } + + public void clearRenderers() + { + mRenderers.clear(); + } + /** * Call to release the resources used by VisualizerView. Like with the * MediaPlayer it is good practice to call this method @@ -123,7 +141,6 @@ public class VisualizerView extends View { mVisualizer.release(); } - /** * Pass data to the visualizer. Typically this will be obtained from the * Android Visualizer.OnDataCaptureListener call back. See @@ -160,16 +177,12 @@ public class VisualizerView extends View { Bitmap mCanvasBitmap; Canvas mCanvas; - BarGraphRenderer mBarGraphRendererTop; - BarGraphRenderer mBarGraphRendererBottom; - CircleRenderer mCircleRenderer; - LineRenderer mLineRenderer; @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); - // Create canvas & renderers once we're ready to draw + // Create canvas once we're ready to draw mRect.set(0, 0, getWidth(), getHeight()); if(mCanvasBitmap == null) @@ -179,50 +192,24 @@ public class VisualizerView extends View { if(mCanvas == null) { mCanvas = new Canvas(mCanvasBitmap); - - // Now that we have a Canvas, can create Renderers - Paint paint = new Paint(); - paint.setStrokeWidth(50f); - paint.setAntiAlias(true); - paint.setColor(Color.argb(200, 233, 0, 44)); - 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(4, paint2, true); - - Paint paint3 = new Paint(); - paint3.setStrokeWidth(3f); - paint3.setAntiAlias(true); - paint3.setColor(Color.argb(255, 222, 92, 143)); - mCircleRenderer = new CircleRenderer(paint3, true); - - Paint linePaint = new Paint(); - linePaint.setStrokeWidth(1f); - linePaint.setAntiAlias(true); - linePaint.setColor(Color.argb(88, 0, 128, 255)); - - Paint lineFlashPaint = new Paint(); - lineFlashPaint.setStrokeWidth(5f); - lineFlashPaint.setAntiAlias(true); - lineFlashPaint.setColor(Color.argb(188, 255, 255, 255)); - mLineRenderer = new LineRenderer(linePaint, lineFlashPaint, true); } if (mBytes != null) { // Render all audio renderers AudioData audioData = new AudioData(mBytes); - mCircleRenderer.render(mCanvas, audioData, mRect); - mLineRenderer.render(mCanvas, audioData, mRect); + for(Renderer r : mRenderers) + { + r.render(mCanvas, audioData, mRect); + } } if (mFFTBytes != null) { // Render all FFT renderers FFTData fftData = new FFTData(mFFTBytes); - mBarGraphRendererTop.render(mCanvas, fftData, mRect); - mBarGraphRendererBottom.render(mCanvas, fftData, mRect); + for(Renderer r : mRenderers) + { + r.render(mCanvas, fftData, mRect); + } } // Fade out old contents |