android九宫格解锁

来源:互联网 发布:阿里云centos7环境php 编辑:程序博客网 时间:2024/04/30 14:01
看旁边同事在搞,自己就也试试,完全canvas画出来的,至于优化什么的全部没有,自己搞着玩吧







package com.example.clock;

import java.util.ArrayList;
import java.util.List;

import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.widget.LinearLayout;


public class ClockView extends View{
 Paint p;
 float left;
 float top;
 Dian tempD;
 float tempX=-1;
 float tempY;
 float tempX1=-1;
 float tempY1;
 List<Dian> dian=new ArrayList<Dian>();
 List<Dian> list=new ArrayList<Dian>();
 boolean isTouched=false;
 @SuppressLint("NewApi")
 public ClockView(Context context, AttributeSet attrs, int defStyleAttr,
   int defStyleRes) {
  super(context, attrs, defStyleAttr, defStyleRes);
  p=new Paint();
  p.setStrokeWidth(15);
  tempD=new Dian();
  // TODO Auto-generated constructor stub
 }
 @SuppressLint("NewApi")
 public ClockView(Context context, AttributeSet attrs, int defStyle) {
  super(context, attrs, defStyle);
  p=new Paint();
  p.setStrokeWidth(15);
  tempD=new Dian();
 }

 public ClockView(Context context, AttributeSet attrs) {
  super(context, attrs);
  p=new Paint();
  p.setStrokeWidth(15);
  tempD=new Dian();
 }

 public ClockView(Context context) {
  super(context);
  p=new Paint();
  p.setStrokeWidth(15);
  tempD=new Dian();
 }

 @Override
 protected void onDraw(Canvas canvas) {
  // TODO Auto-generated method stub
  super.onDraw(canvas);
  left=getLeft();
  top=getTop();
  p.setColor(Color.BLACK);
  drawDian(canvas,getWidth(),getHeight());
  for (Dian d : list) {
   if(d.getX1()!=-1){
    canvas.drawLine(d.getX1(), d.getY1(), d.getX2(), d.getY2(), p);
   }
  }
  if(tempX!=-1){
   canvas.drawLine(tempX, tempY, tempX1, tempY1, p);
  }

 }

 @Override
 public boolean onTouchEvent(MotionEvent event) {
  switch (event.getAction()) {
  case MotionEvent.ACTION_DOWN:
   int n=isTouchOk((int)event.getX(),(int)event.getY(), getWidth());
   if(n==-1){
    return false;
   }
   if(isTouched){
    list.clear();
   }
   tempX=dian.get(n).getX1();
   tempY=dian.get(n).getY1();
   Dian dd=new Dian();
   dd.setX2((int)event.getX());
   dd.setY2((int)event.getY());
   dd.setIstouch(true);
   list.add(dd);
   
   return true;

  case MotionEvent.ACTION_MOVE:
   tempX1=event.getX();
   tempY1=event.getY();
   
   int e=isTouchOk((int)tempX1,(int)tempY1,getWidth());
   if(e!=-1){
    Dian ddd=new Dian();
    ddd.setX1(list.get(list.size()-1).getX2());
    ddd.setY1(list.get(list.size()-1).getY2());
    ddd.setX2(dian.get(e).getX1());
    ddd.setY2(dian.get(e).getY1());
    dian.get(e).setIstouch(true);
    list.add(ddd);
    tempX=dian.get(e).getX1();
    tempY=dian.get(e).getY1();
   }
   invalidate();
   break;
  case MotionEvent.ACTION_UP:
   isTouched=true;
   tempX=-1;
   invalidate();
   break;

  default:
   break;
  }
  return super.onTouchEvent(event);
 }
 void drawDian(Canvas c,int w,int h){
  c.drawCircle(left+w/3/2, top+h/3/2, w/3/3, p);
  Dian d1=new Dian();
  d1.setX1((int)(left+w/3/2));
  d1.setY1((int)(top+h/3/2));
  dian.add(d1);


  c.drawCircle(left+w/3/2+w/3, top+h/3/2, w/3/3, p);
  Dian d2=new Dian();
  d2.setX1((int)(left+w/3/2+w/3));
  d2.setY1((int)(top+h/3/2));
  dian.add(d2);

  c.drawCircle(left+w/3/2+w/3*2, top+h/3/2, w/3/3, p);
  Dian d3=new Dian();

  d3.setX1((int)(left+w/3/2+w/3*2));
  d3.setY1((int)(top+h/3/2));
  dian.add(d3);


  c.drawCircle(left+w/3/2, top+h/3/2+h/3, w/3/3, p);
  Dian d4=new Dian();
  d4.setX1((int)(left+w/3/2));
  d4.setY1((int)(top+h/3/2+h/3));
  dian.add(d4);
  c.drawCircle(left+w/3/2+w/3, top+h/3/2+h/3, w/3/3, p);



  Dian d5=new Dian();
  d5.setX1((int)(left+w/3/2+w/3));
  d5.setY1((int)( top+h/3/2+h/3));
  dian.add(d5);




  c.drawCircle(left+w/3/2+w/3*2, top+h/3/2+h/3, w/3/3, p);
  Dian d6=new Dian();
  d6.setX1((int)(left+w/3/2+w/3*2));
  d6.setY1((int)(top+h/3/2+h/3));
  dian.add(d6);



  c.drawCircle(left+w/3/2, top+h/3/2+h/3*2, w/3/3, p);
  Dian d7=new Dian();
  d7.setX1((int)(left+w/3/2));
  d7.setY1((int)(top+h/3/2+h/3*2));
  dian.add(d7);


  c.drawCircle(left+w/3/2+w/3, top+h/3/2+h/3*2, w/3/3, p);
  Dian d8=new Dian();
  d8.setX1((int)(left+w/3/2+w/3));
  d8.setY1((int)( top+h/3/2+h/3*2));
  dian.add(d8);


  c.drawCircle(left+w/3/2+w/3*2, top+h/3/2+h/3*2, w/3/3, p);
  Dian d9=new Dian();
  d9.setX1((int)(left+w/3/2+w/3*2));
  d9.setY1((int)( top+h/3/2+h/3*2));
  dian.add(d9);

 }
 int  isTouchOk(int x,int y,int w){
  int temp;
  for (int i = 0; i < dian.size(); i++) {
   temp=(int) Math.sqrt(Math.abs(x-dian.get(i).getX1())*Math.abs(x-dian.get(i).getX1())
     +Math.abs(y-dian.get(i).getY1())*Math.abs(y-dian.get(i).getY1()));
   if(temp<w/3/3){
    System.out.println(dian.get(i).isIstouch());
    if(!dian.get(i).isIstouch()){
     return i;
    }
   }
  }
  return -1;
 }

}

0 0
原创粉丝点击