最终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); } } >之前 用到的图片资源
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自定义控件实现九宫格解锁功能