package com.example.jcd.JCD_Home;
import java.util.ArrayList;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Point;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Toast;
public class MyView extends View {
private int X, Y, D;
private Point pointtt;
private Point[][] poin = new Point[3][3];// 没选中的点
private boolean[][] bool = new boolean[3][3];
private boolean inited = false;
private ArrayList<Point> point = new ArrayList<Point>();
private int[][] PWD = new int[3][3];
private ArrayList<Integer> pwd = new ArrayList<Integer>();
private int f = 1;
private SharedPreferences sp;
private SharedPreferences.Editor spedit;
private boolean boole;
private Activity activity;
private Intent intent;
/**
* @param activity
* @param boole true为存,false为判断
*/
public void setContext(Activity activity, boolean boole, Intent intent) {
this.intent = intent;
sp = activity.getSharedPreferences("usre", Context.MODE_PRIVATE);
this.boole = boole;
this.activity = activity;
}
@Override
protected void onDraw(Canvas canvas) {
Paint paint = new Paint();
paint.setARGB(55, 0, 0, 0);
if (!inited) {
inited = true;
getwind();
for (int x = 0; x < 3; x++) {
for (int y = 0; y < 3; y++) {
canvas.drawCircle(X / 8 + X * (3 * x) / 8, Y / 8 + Y
* (3 * y) / 8, D / 2, paint);
poin[x][y] = new Point(X / 8 + X * (3 * x) / 8, Y / 8 + Y
* (3 * y) / 8);
bool[x][y] = true;
PWD[x][y] = f;
f++;
}
}
}
Paint paint1 = new Paint();
paint1.setARGB(55, 105, 105, 105);
for (int x = 0; x < 3; x++) {
for (int y = 0; y < 3; y++) {
if (!bool[x][y]) {
canvas.drawCircle(X / 8 + X * (3 * x) / 8, Y / 8 + Y
* (3 * y) / 8, D, paint1);
} else {
canvas.drawCircle(X / 8 + X * (3 * x) / 8, Y / 8 + Y
* (3 * y) / 8, D / 2, paint);
}
}
}
Paint pain = new Paint();
pain.setARGB(55, 105, 105, 105);
pain.setStrokeWidth(10f);
for (int i = 0; i < point.size() - 1; i++) {
canvas.drawLine(point.get(i).x, point.get(i).y, point.get(i + 1).x,
point.get(i + 1).y, pain);
}
if (point.size() != 0)
canvas.drawLine(point.get(point.size() - 1).x,
point.get(point.size() - 1).y, pointtt.x, pointtt.y, pain);
super.onDraw(canvas);
}
private void getwind() {
X = getWidth();
Y = getHeight();
if (X > Y)
D = Y / 8;
else
D = X / 8;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
// TODO Auto-generated method stub
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
point = new ArrayList<Point>();
for (int x = 0; x < 3; x++) {
for (int y = 0; y < 3; y++) {
bool[x][y] = true;
}
}
invalidate();
break;
case MotionEvent.ACTION_MOVE:
pointtt = new Point((int) event.getX(), (int) event.getY());
for (int x = 0; x < 3; x++) {
for (int y = 0; y < 3; y++) {
int a = (int) event.getX() - poin[x][y].x;
int b = (int) event.getY() - poin[x][y].y;
double a2 = a * a;
double b2 = b * b;
double c2 = a2 + b2;
double c = Math.sqrt(c2);
if (c < D / 2) {
System.out.println("(int)event.getX()="
+ (int) event.getX() + "(int)event.getY()="
+ (int) event.getY() + "poin[x][y].x="
+ poin[x][y].x + "poin[x][y].y=" + poin[x][y].y
+ "/nC=" + c + "D/2=" + D / 2);
if (bool[x][y]) {
point.add(new Point(poin[x][y].x, poin[x][y].y));
pwd.add(PWD[x][y]);
}
bool[x][y] = false;
}
}
}
invalidate();
break;
case MotionEvent.ACTION_UP:
String strr = "0";
String stre = new String();
if (boole) {//设置密码
for (int i = 0; i < pwd.size(); i++) {
strr = strr + pwd.get(i);
System.out.println(pwd.get(i));
}
spedit = sp.edit();
spedit.putString("sbsb", strr).commit();
Toast t = Toast.makeText(activity, "保存成功",
Toast.LENGTH_SHORT);
t.show();
pwd = new ArrayList<Integer>();
activity.finish();
} else {
stre = sp.getString("sbsb", "0");
for (int i = 0; i < pwd.size(); i++) {
strr = strr + pwd.get(i);
}
if (stre.equals(strr)) {
activity.startActivity(intent);
activity.finish();
} else {
Toast t = Toast.makeText(activity, "密码错误",
Toast.LENGTH_SHORT);
t.show();
}
pwd = new ArrayList<Integer>();
point = new ArrayList<Point>();
for (int x = 0; x < 3; x++) {
for (int y = 0; y < 3; y++) {
bool[x][y] = true;
}
}
}
break;
default:
point = new ArrayList<Point>();
for (int x = 0; x < 3; x++) {
for (int y = 0; y < 3; y++) {
bool[x][y] = true;
}
}
invalidate();
break;
}
return true;
}
public MyView(Context context, AttributeSet attrs) {
super(context, attrs);
}
}
private MyView myView;
@Override
protected void onCreate(Bundle savedInstanceState) {
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.tuansuo);
myView= (MyView) findViewById(R.id.myView);//高度长宽可自定义
myView.setContext(this,true,null);//参数一Activity,参数二:true为保存密码false为输入密码,
//参数三为解锁成功后跳转页面
super.onCreate(savedInstanceState);
}