Android怎么实现九宫格解锁

  介绍

这篇文章主要介绍Android怎么实现九宫格解锁,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

首先理清一下逻辑,我们要做NxN的九宫格下图是3 x3的简单图例

//- (-) - (-) - (-) -
//- (-) - (-) - (-) -
//- (-) - (-) - (-) -

 Android怎么实现九宫格解锁

我们就把九宫格分解成

外圆,内圆,连线三部分

外圆半径半径,内圆半径dp (5)

建立一个集合来放置外圆的圆心(内圆的圆心也一样)

, private  ArrayList, mListCircle;//外圆的圆的心      ,for  (int 小姐:=,0;,小姐:& lt;, mCount;,我+ +),{   ,,,,,for  (int  j =, 0;, j  & lt;, mCount;, j + +), {   ,,,,,,,Point  Point =, new 点((3,*,小姐:+,2),*,(int), mRadius,, (3, *, j  +, 2), *, (int), mRadius);   ,,,,,,,mListCircle.add(点);   ,,,,,}   ,,,}

这样我们就初始化好了内外圆的位置点集合

我们画一下看一下效果

void  drawAll_Cicle (Canvas 画布),{   ,,,for  (int 小姐:=,0;,小姐:& lt;, mListCircle.size();,我+ +),{   ,,,,,Point  Point =, mListCircle.get(我);   ,,,,,,,canvas.drawCircle (point.y, point.x,还以为,mRadius, mPaint);   ,,,,,,,canvas.drawCircle (point.y, point.x,还以为,mMinRadius, miniPaint);   ,,,}

效果图就是上图了(哈哈一样的)

主结构已经画完了,接下来就是如何绘制点与点之间的连线了,有人会觉得没思路,其实很简单了,以3 x3为例子哈
我们可以给这九个棋子编号1——9号,把他存入LinkedHashSet中,着重介绍这个LinkedHashSet有顺序不重复这个真的在合适不过了。

这样就不会有重复的事情了。这个和解锁时候的密码也很契合,所以选对了存储方式会事半功倍。

还有一个问题,就是点击边界问题,这个好解决,我们把每一个棋子都花矩形,通过圆来控制边界,(其实也可以通过矩形来控制边界,这个也很简单,原理是差不多的,有兴趣的同学可以下去试试)

同样也是用集合。和上边的圆是一样一样的。

ArrayList, mListRectFs;   for  (int 小姐:=,0;,小姐:& lt;, mCount;,我+ +),{   ,,,,,for  (int  j =, 0;, j  & lt;, mCount;, j + +), {   ,,,,,,,RectF  RectF =, new  RectF((3, *,小姐:+,- 1),*,mRadius,, (3, *, j  +, 1), *, mRadius,,(3, *,小姐:+,3),*,mRadius,, (3, *, j  +, 3), *, mRadius);   ,,,,,,,mListRectFs.add (rectF);   ,,,,,}   ,,,}

好边界也有了,我们来计算边界返回编号

/* *   ,,*,点和圆形碰撞检测   ,,*   ,,*,@param  x1 ,,手指接触点   ,,*,@param  y1 ,,手指接触点   ,,*,@param  x2 ,,外圆   ,,*,@param  y2 ,,外圆   ,,*,@param  radius 半径   ,,* @return   ,,*/private 才能;boolean  isCollision (x1, float  float 日元,float  x2, float  y2,, float 半径),{   ,,,if  (Math.sqrt (Math.pow (x1 ,安康,x2,, 2), +, Math.pow (y1 安康;y2,, 2)), & lt;=,半径),{   ,,,,,//,如果点和圆心距离小于或等于半径则认为发生碰撞   ,,,,,return 真实;   ,,,}   ,,,return 假;   ,,}/* *   ,,*,判断触摸点在哪上个项目   ,,*   ,,*,@param  x   ,,*,@param  y   ,,* @return   ,,*/private 才能;int  touchIndex (float  x,, float  y), {   ,,,for  (int 小姐:=,0;,小姐:& lt;, mListCircle.size();,我+ +),{   ,,,,,Point  p =, mListCircle.get(我);   ,,,,,if  (isCollision (p.x, x,, y,, p.y,, mRadius)), {   ,,,,,,,return 我;   ,,,,,}   ,,,}      ,,,return  1;   以前,,}

几个关键点都写到了接下来就是具体的细节了。我把代码都贴上来,注释的很详细。当然加入了一个手指触控点,更加好看一些。

import  android.content.Context;   import  android.graphics.Canvas;   import  android.graphics.Color;   import  android.graphics.Paint;   import  android.graphics.Point;   import  android.graphics.RectF;   import  android.util.AttributeSet;   import  android.util.Log;   import  android.view.HapticFeedbackConstants;   import  android.view.MotionEvent;   import  android.view.View;      import  java.util.ArrayList;   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

Android怎么实现九宫格解锁