aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFelix Palmer <felix.palmer@metaswitch.com>2011-12-08 21:47:16 -0800
committerFelix Palmer <felix.palmer@metaswitch.com>2011-12-08 22:00:26 -0800
commit5ecda63ade42269ca6b4a114db0c81b2c5146659 (patch)
treece6239e9eaefd9c2426ec58b5a874218df5289d9
parente0c6d6f3ed2a473a6d11594a38db715b60a5ef88 (diff)
downloadandroid_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.xml42
-rw-r--r--src/com/pheelicks/app/MainActivity.java76
-rw-r--r--src/com/pheelicks/visualizer/VisualizerView.java73
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