package com.zzx.factorytest.view;
import android.app.Activity;
import android.content.Context;
import android.content.res.Resources;
import android.content.res.TypedArray;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import android.graphics.Rect;
import android.util.AttributeSet;
import android.view.Display;
import android.view.View;
import android.view.WindowManager;
import com.zzx.factorytest.R;
public class SignalView extends View {
private Bitmap bgGrid;
private int maxDbm = -50;
private int minDbm = -110;
private int graphWidth = 300;
private int padingLeft = 20;
private int sigalBlockNumber = 100;
private int[] singalBlock = new int[sigalBlockNumber];
private int range_red = -95;
private int range_yellow = -80;
// private int range_blue=-95;
private int blockIndex = 0;
private Paint paint = new Paint();
private int gridStartX;
private int gridStartY;
private int gridEndX;
private int gridEndY;
private int mWidth;
private int mHeight;
private int gridHeightSpace;
private int gridWidthSpace;
public SignalView(Context context, AttributeSet paramAttributeSet) {
super(context, paramAttributeSet);
/*graphWidth = (int)this.getResources().getDimension(R.dimen.SignagraphWidth);
bgGrid = BitmapFactory.decodeResource(getResources(), R.drawable.graph);
bgGrid = ImageUtil.zoomBitmap(bgGrid, graphWidth, (bgGrid.getHeight()
* graphWidth / bgGrid.getWidth()));*/
WindowManager wm = ((Activity)context).getWindowManager();
Display display = wm.getDefaultDisplay();
gridWidthSpace = (int) (display.getWidth() * 0.6f / 32);
gridHeightSpace = (int) (display.getHeight() * 0.35f / 8);
mWidth = gridWidthSpace * 32;
mHeight = gridHeightSpace * 8;
}
public SignalView(Context context, int _gridHeight, int _gridHeiCount, int _gridWidth, int _gridWidCount) {
super(context);
gridHeightSpace = _gridHeight / _gridHeiCount;
gridWidthSpace = _gridWidth / _gridWidCount;
mWidth = gridWidthSpace * _gridWidCount;
mHeight = gridHeightSpace * _gridHeiCount;
// rectWidth = mWidth / blockIndex;
}
@Override
protected void onDraw(Canvas canvas) {
// drawBgGrid(canvas);
drawText(canvas);
drawGrid(canvas);
drawSigal(canvas);
super.onDraw(canvas);
}
private void drawText(Canvas canvas) {
Resources res = getResources();
paint.setStrokeWidth(1f);
paint.setAntiAlias(true);
Rect rect = new Rect();
String str = res.getString(R.string.net_value_longest);
paint.getTextBounds(str, 0, str.length(), rect);
gridStartX = rect.width() + 5;
gridStartY = rect.height() / 2;
gridEndX = gridStartX + mWidth;
gridEndY = gridStartY + mHeight;
TypedArray signalIndex = res.obtainTypedArray(R.array.signal_index);
int textStartY = 10;
for (int i = 0; i < signalIndex.length(); i++) {
canvas.drawText(signalIndex.getString(i), 0, textStartY, paint);
textStartY += gridHeightSpace * 2;
}
}
void drawGrid(Canvas canvas){
paint.setStrokeWidth(1f);
paint.setAntiAlias(true);
for (int xStart = gridStartX; xStart <= gridEndX; xStart += gridWidthSpace) {
if (xStart == gridStartX || xStart == gridEndX) {
paint.setColor(Color.RED);
} else {
paint.setColor(Color.GRAY);
}
canvas.drawLine(xStart, gridStartY, xStart, gridEndY, paint);
}
for (int yStart = gridStartY; yStart <= gridEndY; yStart += gridHeightSpace) {
if (yStart == gridStartY || yStart == gridEndY) {
paint.setColor(Color.RED);
} else {
paint.setColor(Color.GRAY);
}
canvas.drawLine(gridStartX, yStart, gridEndX, yStart, paint);
}
}
private void drawSigal(Canvas canvas) {
canvas.translate(30, 0);
paint.setColor(Color.BLACK);
// float x = (bgGrid.getWidth() / sigalBlockNumber) * blockIndex+6;
float x = (mWidth / sigalBlockNumber) * blockIndex+6;
// canvas.drawLine(x, 0, x, bgGrid.getHeight(), paint);
canvas.drawLine(x, gridStartY, x, mHeight + gridStartY, paint);
// ��ɫ��
paint.setStyle(Style.FILL);
for (int i = 0; i <= blockIndex; i++) {
if (singalBlock[i] <= range_red) {
paint.setColor(Color.RED);
} else if (singalBlock[i] <= range_yellow) {
paint.setColor(Color.YELLOW);
} else {
paint.setColor(Color.GREEN);
}
/*float startX = (i == 0 ? 2
: ((bgGrid.getWidth() / sigalBlockNumber) * (i)));
float endX = (bgGrid.getWidth() / sigalBlockNumber) * (i + 1);
float height = (bgGrid.getHeight() / (maxDbm - minDbm))
* (singalBlock[i] - minDbm);
// Log.i("test", "height=" + height + " startX=" + startX + " endX="
// + endX + "singalBlock[" + i + "]" + singalBlock[i]);
canvas.drawRect(startX, bgGrid.getHeight() - height, endX,
bgGrid.getHeight()-2, paint);*/
float startX = (i == 0 ? 2
: ((mWidth / sigalBlockNumber) * (i)));
float endX = (mWidth / sigalBlockNumber) * (i + 1);
float height = (mHeight / (maxDbm - minDbm))
* (singalBlock[i] - minDbm);
// Log.i("test", "height=" + height + " startX=" + startX + " endX="
// + endX + "singalBlock[" + i + "]" + singalBlock[i]);
canvas.drawRect(startX, mHeight - height, endX,
mHeight + gridStartY, paint);
}
// ���ź�ֵ
paint.setColor(Color.BLUE);
/*float y = (bgGrid.getHeight() / (maxDbm - minDbm))
* (singalBlock[blockIndex] - minDbm);*/
float y = (mHeight / (maxDbm - minDbm))
* (singalBlock[blockIndex] - minDbm);
canvas.drawText(singalBlock[blockIndex] + "dbm", x, y, paint);
blockIndex++;
if (blockIndex >= sigalBlockNumber) {
blockIndex = 0;
}
}
/*private void drawBgGrid(Canvas canvas) {
//
padingLeft = (int)this.getResources().getDimension(R.dimen.SignapadingLeft);
Paint paint = new Paint();
paint.setColor(Color.BLUE);
for (int i = 0; i < 5; i++) {
int dbm = maxDbm - i * 15;
float y = (bgGrid.getHeight()) * i / 4 + 10;
canvas.drawText(dbm + "", 0, y, paint);
}
canvas.drawBitmap(bgGrid, padingLeft, 0, new Paint());
}*/
public void onSignalChanged(int strength) {
if (blockIndex < sigalBlockNumber ) {
if(strength==0){
strength=minDbm;
}
singalBlock[blockIndex] = strength;
}
this.invalidate();
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
// this.setMeasuredDimension(this.getWidth(), bgGrid.getHeight());
this.setMeasuredDimension(this.getWidth(), mHeight);
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
}