package org.zywx.wbpalmstar.plugin.uexaudio;
import java.util.Random;
import org.zywx.wbpalmstar.base.ResoureFinder;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.PixelFormat;
import android.graphics.drawable.Drawable;
import android.os.Handler;
import android.os.Message;
import android.util.AttributeSet;
import android.view.View;
public class VisualFrequencyView extends View {
private static final int WIDTH_COUNT = 12;
private static final int HEIGHT_COUNT = 12;
private static final int ACTION_UPDATE_VIEW = 100;
private int[] list = new int[12];
private Bitmap blueBlock;
private Bitmap grayBolck;
private int blockWidth;
private int blockHeight;
private boolean isUpdating = false;
private Random random = new Random();
private ResoureFinder finder = null;
private Handler handler = new Handler() {
public void handleMessage(Message msg) {
if (isUpdating) {
updateView(getRandomArray());
handler.sendEmptyMessageDelayed(ACTION_UPDATE_VIEW, 60);
}
};
};
public VisualFrequencyView(Context context) {
super(context);
finder = ResoureFinder.getInstance(context);
init();
}
public VisualFrequencyView(Context context, AttributeSet attrs) {
super(context, attrs);
finder = ResoureFinder.getInstance(context);
init();
}
public VisualFrequencyView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, 0);
finder = ResoureFinder.getInstance(context);
init();
}
private void init() {
for (int i = 0; i < 12; i++) {
list[i] = HEIGHT_COUNT;
}
blueBlock = getBitmap(getResources().getDrawable(finder.getDrawableId("plugin_audio_blue_block_shape")));
grayBolck = getBitmap(getResources().getDrawable(finder.getDrawableId("plugin_audio_gray_block_shape")));
blockHeight = blueBlock.getHeight();
blockWidth = blueBlock.getWidth();
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
final Bitmap localGray = grayBolck;
final Bitmap localBlue = blueBlock;
final int w = blockWidth;
final int h = blockHeight;
final int[] localList = list;
for (int i = 0; i < WIDTH_COUNT; i++) {
final int itemValue = localList[i];
for (int m = 0; m < HEIGHT_COUNT; m++) {
if (m >= itemValue) {
canvas.drawBitmap(localBlue, i * w, m * h, null);
} else {
canvas.drawBitmap(localGray, i * w, m * h, null);
}
}
}
}
private void updateView(int[] randoms) {
if (randoms == null || randoms.length != WIDTH_COUNT) {
return;
}
for (int i = 0; i < WIDTH_COUNT; i++) {
final int itemHeight = randoms[i];
if (itemHeight > list[i]) {
list[i] += 2;
} else if (itemHeight < list[i]) {
list[i] -= 2;
}
}
invalidate();
}
public void startResponse() {
if (!isUpdating) {
handler.sendEmptyMessage(ACTION_UPDATE_VIEW);
isUpdating = true;
}
}
public void stopResponse() {
handler.removeMessages(ACTION_UPDATE_VIEW);
isUpdating = false;
for (int i = 0; i < 12; i++) {
list[i] = HEIGHT_COUNT;
}
invalidate();
}
public boolean isUpdatingView() {
return isUpdating;
}
private Bitmap getBitmap(Drawable drawable) {
Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(),
drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888 : Bitmap.Config.RGB_565);
Canvas canvas = new Canvas(bitmap);
canvas.setBitmap(bitmap);
drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
drawable.draw(canvas);
return bitmap;
}
private int[] getRandomArray() {
int[] array = new int[WIDTH_COUNT];
for (int i = 0, size = array.length; i < size; i++) {
array[i] = random.nextInt(HEIGHT_COUNT);
}
return array;
}
}