package com.zzx.factorytest.view;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import android.os.SystemClock;
import android.util.AttributeSet;
import android.util.DisplayMetrics;
import android.view.View;
import com.zzx.factorytest.R;
public class ScreenCanvasView extends View {
/******************* **********************/
public static final int MODE_COLOR_BLACK = 1;
public static final int MODE_COLOR_GREEN = 2;
public static final int MODE_COLOR_PURPLE = 3;// �Ϻ�
public static final int MODE_COLOR_RED = 4;
public static final int MODE_COLOR_WHITE = 5;
public static final int MODE_COLOR_YELLOW = 6;
public static final int MODE_COLOR_BLUE = 7;
/******************** *************************/
public static final int MODE_GEOMETRY_WHITE_BLACK = 8;
public static final int MODE_GEOMETRY_BLUE_BLACK = 9;
public static final int MODE_GEOMETRY_GREEN_BLACK = 10;
public static final int MODE_GEOMETRY_RED_BLACK = 11;
/******************** ****************/
public static final int MODE_MIX_1DOT = 12;
// public static final int MODE_1DOT_1BLACK = 13;
public static final int MODE_MIX_1DOT_1WHITE = 14;
public static final int MODE_MIX_1H = 15;
public static final int MODE_MIX_1VT = 16;
public static final int MODE_MIX_2DOT = 17;
public static final int MODE_MIX_2DOT_1BLACK = 18;
public static final int MODE_MIX_2H = 19;
public static final int MODE_MIX_2V = 20;
public static final int MODE_MIX_3DOT = 21;
public static final int MODE_MIX_3DOT_1BLACK = 22;
public static final int MODE_MIX_MIX_3V = 23;
public static final int MODE_MIX_1DOT_1BLACK = 24;
public static final int MODE_MIX_1V = 25;
public static final int MODE_MIX_3DOT_1WHITE = 26;
public static final int MODE_MIX_3H = 27;
public static final int MODE_MIX_2DOT_1WHITE = 28;
public static final int MODE_MIX_3V = 29;
/************
* �Ȳ���
*************/
public static final int MODE_STEP_H_16 = 30;
public static final int MODE_STEP_H_32 = 31;
public static final int MODE_STEP_H_64 = 32;
public static final int MODE_STEP_V_16 = 33;
public static final int MODE_STEP_V_32 = 34;
public static final int MODE_STEP_V_64 = 35;
public static final int MODE_STEP_V_8 = 36;
public static final int MODE_STEP_H_8 = 37;
private int currentMode = 0;
private int currentIndex = 0;
private int screenWidthPixels;
private int screenHeightPixels;
public ScreenCanvasView(Context context, AttributeSet attrs) {
super(context, attrs);
// screenWidthPixels = this.getScreenWidth();
// screenHeightPixels = this.getScreenHeight();
}
/**
* ���Ե�ǰ��ʾ��ͼƬ����
*
* @param picMode
*/
public void setCurrentMode(int picMode, int index) {
this.currentMode = picMode;
this.currentIndex = index;
this.invalidate();
}
public ScreenCanvasView(Context context) {
this(context, null);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
screenWidthPixels = getMeasuredWidth();
screenHeightPixels = getMeasuredHeight();
}
@Override
protected void onDraw(Canvas canvas) {
// 1.����ͬ���͵�ͼƬ
switch (currentMode) {
/****************** ��ɫ��ʼ ****************/
case MODE_COLOR_BLACK:
drawColorPic(canvas, Color.BLACK);
break;
case MODE_COLOR_BLUE:
drawColorPic(canvas, Color.BLUE);
break;
case MODE_COLOR_GREEN:
drawColorPic(canvas, Color.GREEN);
break;
case MODE_COLOR_RED:
drawColorPic(canvas, Color.RED);
break;
case MODE_COLOR_WHITE:
drawColorPic(canvas, Color.WHITE);
break;
case MODE_COLOR_YELLOW:
drawColorPic(canvas, Color.YELLOW);
break;
case MODE_COLOR_PURPLE:
drawColorPic(canvas, Color.rgb(255, 0, 255));
break;
/******************* ���β��Կ�ʼ ************************/
case MODE_GEOMETRY_WHITE_BLACK:
case MODE_GEOMETRY_GREEN_BLACK:
case MODE_GEOMETRY_RED_BLACK:
case MODE_GEOMETRY_BLUE_BLACK:
drawGeometryPic(canvas, currentMode);
break;
/**************************** ������Կ�ʼ ****************************/
case MODE_MIX_1DOT:
case MODE_MIX_2DOT:
case MODE_MIX_3DOT:
case MODE_MIX_1DOT_1BLACK:
case MODE_MIX_2DOT_1BLACK:
case MODE_MIX_3DOT_1BLACK:
case MODE_MIX_1DOT_1WHITE:
case MODE_MIX_2DOT_1WHITE:
case MODE_MIX_3DOT_1WHITE:
case MODE_MIX_1H:
case MODE_MIX_2H:
case MODE_MIX_3H:
case MODE_MIX_1V:
case MODE_MIX_2V:
case MODE_MIX_3V:
// TODO
drawMixPic(canvas, currentMode);
break;
case MODE_STEP_H_8:
case MODE_STEP_H_16:
case MODE_STEP_H_32:
case MODE_STEP_H_64:
case MODE_STEP_V_8:
case MODE_STEP_V_16:
case MODE_STEP_V_32:
case MODE_STEP_V_64:
drawStepPic(canvas, currentMode);
default:
break;
}
// 2.����������
drawIndexNumer(canvas, currentIndex);
super.onDraw(canvas);
}
private void drawIndexNumer(Canvas canvas, int index) {
Paint paint = new Paint();
paint.setColor(Color.WHITE);
paint.setTextSize(getResources().getDimension(R.dimen.screenCanvasLabelSize));
canvas.drawText(index + "", 10, 150, paint);
}
/**
* ���Ƶ�ɫͼƬ
*
* @param canvas
* @param color
*/
private void drawColorPic(Canvas canvas, int color) {
canvas.drawColor(color);
}
/**
* ���Ƽ��β���ͼ
*
* @param canvas
* @param mode
*/
private void drawGeometryPic(Canvas canvas, int mode) {
int offsetW = 27;
int offsetH = 18;
screenWidthPixels = getWidth();
screenHeightPixels = getHeight();
// ��16��26+2���
float rectWidth = screenWidthPixels / offsetW;// С����Ŀ��
float rectHeight = screenHeightPixels / offsetH;// С����ĸ߶�
float startX = rectWidth / 2;
float startY = 0;
Paint paint = new Paint();
canvas.drawColor(Color.BLACK);// ��ɫ����
switch (mode) {
case MODE_GEOMETRY_WHITE_BLACK:
paint.setColor(Color.WHITE);
break;
case MODE_GEOMETRY_RED_BLACK:
paint.setColor(Color.RED);
break;
case MODE_GEOMETRY_GREEN_BLACK:
paint.setColor(Color.GREEN);
break;
case MODE_GEOMETRY_BLUE_BLACK:
paint.setColor(Color.BLUE);
break;
default:
break;
}
for (int j = 0; j < offsetW + 1; j++) {
canvas.drawLine(startX, 0, startX, screenHeightPixels, paint);// ����
startX += rectWidth;
}
for (int i = 0; i < offsetH + 1; i++) {
canvas.drawLine(0, startY, screenWidthPixels, startY, paint);// ����
startY += rectHeight;
}
}
/**
* �������ͼƬ
*
* @param canvas
* @param mode
*/
private void drawMixPic(Canvas canvas, int mode) {
long time = SystemClock.currentThreadTimeMillis();
Bitmap bitmap = Bitmap.createBitmap(this.screenWidthPixels,
this.screenHeightPixels, Config.ARGB_8888);
int x, y;
if (mode == MODE_MIX_1DOT) {
for (int i = 0; i < bitmap.getWidth(); i++) {
for (int j = 0; j < bitmap.getHeight(); j++) {
x = i / 1;
y = j / 1;
if ((x + y) % 2 == 0) {
bitmap.setPixel(i, j, Color.WHITE);
} else {
bitmap.setPixel(i, j, Color.BLACK);
}
}
}
} else if (mode == MODE_MIX_2DOT) {
for (int i = 0; i < bitmap.getWidth(); i++) {
for (int j = 0; j < bitmap.getHeight(); j++) {
x = i / 2;
y = j / 2;
if ((x + y) % 2 == 0) {
bitmap.setPixel(i, j, Color.WHITE);
} else {
bitmap.setPixel(i, j, Color.BLACK);
}
}
}
} else if (mode == MODE_MIX_3DOT) {
for (int i = 0; i < bitmap.getWidth(); i++) {
for (int j = 0; j < bitmap.getHeight(); j++) {
x = i / 3;
y = j / 3;
if ((x + y) % 2 == 0) {
bitmap.setPixel(i, j, Color.WHITE);
} else {
bitmap.setPixel(i, j, Color.BLACK);
}
}
}
} else if (mode == MODE_MIX_1DOT_1BLACK) {
for (int i = 0; i < bitmap.getWidth(); i++) {
for (int j = 0; j < bitmap.getHeight(); j++) {
if (i % 2 == 0 && j % 2 == 0) {
bitmap.setPixel(i, j, Color.BLACK);
} else {
bitmap.setPixel(i, j, Color.WHITE);
}
}
}
} else if (mode == MODE_MIX_2DOT_1BLACK) {
for (int i = 0; i < bitmap.getWidth(); i++) {
for (int j = 0; j < bitmap.getHeight(); j++) {
if (i % 3 == 0 && j % 3 == 0) {
bitmap.setPixel(i, j, Color.BLACK);
} else {
bitmap.setPixel(i, j, Color.WHITE);
}
}
}
} else if (mode == MODE_MIX_3DOT_1BLACK) {
for (int i = 0; i < bitmap.getWidth(); i++) {
for (int j = 0; j < bitmap.getHeight(); j++) {
if (i % 4 == 0 && j % 4 == 0) {
bitmap.setPixel(i, j, Color.BLACK);
} else {
bitmap.setPixel(i, j, Color.WHITE);
}
}
}
} else if (mode == MODE_MIX_1DOT_1WHITE) {
for (int i = 0; i < bitmap.getWidth(); i++) {
for (int j = 0; j < bitmap.getHeight(); j++) {
if (i % 2 == 0 && j % 2 == 0) {
bitmap.setPixel(i, j, Color.WHITE);
} else {
bitmap.setPixel(i, j, Color.BLACK);
}
}
}
} else if (mode == MODE_MIX_2DOT_1WHITE) {
for (int i = 0; i < bitmap.getWidth(); i++) {
for (int j = 0; j < bitmap.getHeight(); j++) {
if (i % 3 == 0 && j % 3 == 0) {
bitmap.setPixel(i, j, Color.WHITE);
} else {
bitmap.setPixel(i, j, Color.BLACK);
}
}
}
} else if (mode == MODE_MIX_3DOT_1WHITE) {
for (int i = 0; i < bitmap.getWidth(); i++) {
for (int j = 0; j < bitmap.getHeight(); j++) {
if (i % 4 == 0 && j % 4 == 0) {
bitmap.setPixel(i, j, Color.WHITE);
} else {
bitmap.setPixel(i, j, Color.BLACK);
}
}
}
} else if (mode == MODE_MIX_1H) {
for (int i = 0; i < bitmap.getWidth(); i++) {
for (int j = 0; j < bitmap.getHeight(); j++) {
if (j % 2 == 0) {
bitmap.setPixel(i, j, Color.WHITE);
} else {
bitmap.setPixel(i, j, Color.BLACK);
}
}
}
} else if (mode == MODE_MIX_2H) {
for (int i = 0; i < bitmap.getWidth(); i++) {
for (int j = 0; j < bitmap.getHeight(); j++) {
if (j % 3 == 0) {
bitmap.setPixel(i, j, Color.WHITE);
} else {
bitmap.setPixel(i, j, Color.BLACK);
}
}
}
} else if (mode == MODE_MIX_3H) {
for (int i = 0; i < bitmap.getWidth(); i++) {
for (int j = 0; j < bitmap.getHeight(); j++) {
if (j % 4 == 0) {
bitmap.setPixel(i, j, Color.WHITE);
} else {
bitmap.setPixel(i, j, Color.BLACK);
}
}
}
} else if (mode == MODE_MIX_1V) {
for (int i = 0; i < bitmap.getWidth(); i++) {
for (int j = 0; j < bitmap.getHeight(); j++) {
if (i % 2 == 0) {
bitmap.setPixel(i, j, Color.WHITE);
} else {
bitmap.setPixel(i, j, Color.BLACK);
}
}
}
} else if (mode == MODE_MIX_2V) {
for (int i = 0; i < bitmap.getWidth(); i++) {
for (int j = 0; j < bitmap.getHeight(); j++) {
if (i % 3 == 0) {
bitmap.setPixel(i, j, Color.WHITE);
} else {
bitmap.setPixel(i, j, Color.BLACK);
}
}
}
} else if (mode == MODE_MIX_3V) {
for (int i = 0; i < bitmap.getWidth(); i++) {
for (int j = 0; j < bitmap.getHeight(); j++) {
if (i % 4 == 0) {
bitmap.setPixel(i, j, Color.WHITE);
} else {
bitmap.setPixel(i, j, Color.BLACK);
}
}
}
}
canvas.drawBitmap(bitmap, 0, 0, new Paint());
bitmap.recycle();
System.out.println("drawMixPic = " + (SystemClock.currentThreadTimeMillis() - time));
}
private void drawStepPic(Canvas canvas, int mode) {
int rectWidth;// ���ƿ��
int colorGap;// ��ɫֵ���
Paint paint = new Paint();
paint.setStyle(Style.FILL);
if (mode == MODE_STEP_H_8) {
int colorStep = 8;
rectWidth = this.screenHeightPixels / colorStep;
colorGap = 255 / (colorStep - 1);
int color = 255;
for (int i = 0; i < colorStep; i++) {
paint.setColor(Color.rgb(color, color, color));
canvas.drawRect(0, i * rectWidth, this.screenWidthPixels,
(i + 1) * rectWidth, paint);
color -= colorGap;
}
} else if (mode == MODE_STEP_H_16) {
int colorStep = 16;
rectWidth = this.screenHeightPixels / colorStep;
colorGap = 255 / (colorStep - 1);
int color = 255;
for (int i = 0; i < colorStep; i++) {
paint.setColor(Color.rgb(color, color, color));
canvas.drawRect(0, i * rectWidth, this.screenWidthPixels,
(i + 1) * rectWidth, paint);
color -= colorGap;
}
} else if (mode == MODE_STEP_H_32) {
int colorStep = 32;
rectWidth = this.screenHeightPixels / colorStep;
colorGap = 255 / (colorStep - 1);
int color = 255;
for (int i = 0; i < colorStep; i++) {
paint.setColor(Color.rgb(color, color, color));
canvas.drawRect(0, i * rectWidth, this.screenWidthPixels,
(i + 1) * rectWidth, paint);
color -= colorGap;
}
} else if (mode == MODE_STEP_H_64) {
int colorStep = 64;
rectWidth = this.screenHeightPixels / colorStep;
colorGap = 255 / (colorStep - 1);
int color = 255;
for (int i = 0; i < colorStep; i++) {
paint.setColor(Color.rgb(color, color, color));
canvas.drawRect(0, i * rectWidth, this.screenWidthPixels,
(i + 1) * rectWidth, paint);
color -= colorGap;
}
} else if (mode == MODE_STEP_V_8) {
int colorStep = 8;
rectWidth = this.screenWidthPixels / colorStep;
colorGap = 255 / (colorStep - 1);
int color = 255;
for (int i = 0; i < colorStep; i++) {
paint.setColor(Color.rgb(color, color, color));
canvas.drawRect(i * rectWidth, 0, (i + 1) * rectWidth,
this.screenHeightPixels, paint);
color -= colorGap;
}
} else if (mode == MODE_STEP_V_16) {
int colorStep = 16;
rectWidth = this.screenWidthPixels / colorStep;
colorGap = 255 / (colorStep - 1);
int color = 255;
for (int i = 0; i < colorStep; i++) {
paint.setColor(Color.rgb(color, color, color));
canvas.drawRect(i * rectWidth, 0, (i + 1) * rectWidth,
this.screenHeightPixels, paint);
color -= colorGap;
}
} else if (mode == MODE_STEP_V_32) {
int colorStep = 32;
rectWidth = this.screenWidthPixels / colorStep;
colorGap = 255 / (colorStep - 1);
int color = 255;
for (int i = 0; i < colorStep; i++) {
paint.setColor(Color.rgb(color, color, color));
canvas.drawRect(i * rectWidth, 0, (i + 1) * rectWidth,
this.screenHeightPixels, paint);
color -= colorGap;
}
} else if (mode == MODE_STEP_V_64) {
int colorStep = 64;
rectWidth = this.screenWidthPixels / colorStep;
colorGap = 255 / (colorStep - 1);
int color = 255;
for (int i = 0; i < colorStep; i++) {
paint.setColor(Color.rgb(color, color, color));
canvas.drawRect(i * rectWidth, 0, (i + 1) * rectWidth,
this.screenHeightPixels, paint);
color -= colorGap;
}
}
}
public int getScreenWidth() {
DisplayMetrics dm = getContext().getResources().getDisplayMetrics();
return dm.widthPixels;
}
public int getScreenHeight() {
DisplayMetrics dm = getContext().getResources().getDisplayMetrics();
return dm.heightPixels;
}
}