Android自定义控件实现九宫格解锁功能

  

最终Android九宫格解锁效果如下

  

 Android自定义控件实现九宫格解锁功能

  

1。进行定义实体点点
  

        公共类点{   私人浮动x;   私人y浮动;//正常模式   公共静态最终int NORMAL_MODE=1;//按下模式   公共静态最终int PRESSED_MODE=2;//错误模式   公共静态最终int ERROR_MODE=3;      私人int状态=NORMAL_MODE;   私人字符串标记;      公共点(浮动x, y浮动,字符串标记){   这一点。x=x;   这一点。y=y;   这一点。马克=标记;   }      公共浮动getX () {   返回x;   }      公共空间对于setX(浮动x) {   这一点。x=x;   }      公共浮动getY () {   返回y;   }      公共空间调用setY(浮动y) {   这一点。y=y;   }      公共int getState () {   返回状态;   }      公共空间设置状态(int状态){   这一点。=状态;   }      公共字符串getMark () {   返回标记;   }      公共空间setMark(字符串标记){   这一点。马克=标记;   }   }      之前      

2。自定义ScreenLockView
  

        公开课ScreenLockView扩展视图{   私有静态最终字符串标签=癝creenLockView”;//错误格子的图片   私人位图errorBitmap;//正常格子的图片   私人位图normalBitmap;//手指按下时格子的图片   私人位图pressedBitmap;//错误时连线的图片   私人位图lineErrorBitmap;//手指按住时连线的图片   私人位图linePressedBitmap;//偏移量,使九宫格在屏幕中央   私人int抵消;//九宫格的九个格子是否已经初始化   私人逻辑初始化;//格子的半径   私人int半径;//密码   私人字符串密码=" 123456 ";//九个格子   私人点[][]分=new点[3][3];   私人int宽度;   私人int高度;   私人矩阵矩阵=new矩阵();   私人浮动moveX=1;   私人浮动moveY=1;//是否手指在移动   私人布尔isMove;//是否可以触摸,当用户抬起手指,划出九宫格的密码不正确时为不可触摸   私人布尔isTouch=true;//用来存储记录被按下的点   私人List,pressedPoint=new ArrayList<的在();//屏幕解锁监听器   私人>   公开课RotateDegrees {   公共静态浮动getDegrees (a, b) {   浮度=0;   浮动aX=a.getX ();   浮动aY=a.getY ();   浮动bX=b.getX ();   浮动的=b.getY ();   如果(aX==bX) {   如果(aY<通过){   度=90;   其他}{   度=270;   }   }如果(==aY) {   如果(aX bX) {   如果(aY>通过){   度=180 +(浮动)(Math.atan2 (aY-bY aX-bX) * 180/Math.PI);   其他}{   度=180 -(浮动)(数学。量化(ay, aX - bX) * 180/Math.PI);   }      其他}{   如果(aY>通过){   度=360 -(浮动)(数学。量化(aY -, bX-aX) * 180/Math.PI);   其他}{   度=(浮动)(数学。量化(aY, bX - aX) * 180/Math.PI);   }   }   }   返回度;   }      公共静态浮动getDegrees (a点,bX浮动,浮动){   点b=new点(bX,,空);   返回getDegrees (a, b);   }   }      之前      

用到的图片资源

  

 Android自定义控件实现九宫格解锁功能“> <img src=

  

4。MainActivity中使用
  

        公开课MainActivity延伸AppCompatActivity {      私人ScreenLockView ScreenLockView;      @Override   保护空白>   & lt; & # 63; xml version=" 1.0 " encoding=" utf - 8 " & # 63;比;   & lt; RelativeLayout xmlns: android=" http://schemas.android.com/apk/res/android "   xmlns:工具=" http://schemas.android.com/tools "   android: id=癅 + id/activity_main”   android: layout_width=" match_parent "   android: layout_height=" match_parent "   android: paddingBottom=" @dimen/activity_vertical_margin”   android: paddingLeft=" @dimen/activity_horizontal_margin”   android: paddingRight=" @dimen/activity_horizontal_margin”   android: paddingTop=" @dimen/activity_vertical_margin”   工具:上下文=癱om.example.admin.ninegridunlock.MainActivity”比;      & lt; com.example.admin.ninegridunlock.ScreenLockView   android: id=癅 + id/slv”   android: layout_width=" match_parent "   android: layout_height=" match_parent "/比;   & lt;/RelativeLayout>   

Android自定义控件实现九宫格解锁功能