Android 九宫格锁屏(已更新,添加了用户操作记录密码,更加完善,更新的在下面)此demo的重点就在于九宫点的绘制,与用户操作手势的监听交互
效果图实现思路1(点的绘制)
在绘制之前首先确定绘制九点整体的位置,这里将九点确定在居中要想将九点分别按顺序绘制在屏幕中,要知道屏幕的宽高因为九点为三行三列所以我们可以讲中间绘制九点的区域给一个正方形,将正方形在分为4 × 4的小正方形接下来根据屏幕的宽高确定手机此时的横竖屏状态分别设置不同的偏移量和space(space为4×4小方格之一的边长)的值此图为绘制九点之前的思路(竖屏状态)思路图下面我们先新建一个类 SudokuLockViewextends (继承)View,实现继承的方法重写onDraw方法,在onDraw方法中首先判断要绘制的九点的位置是否初始化,如果没有则实现九点初始化的方法 private void initView() {/** * 屏幕宽高 */int pHigth = metrics.heightPixels;int pWidth = metrics.widthPixels;/** * X,Y的偏移量 */float offsetX;float offsetY;float space; //小方格边长/** * 判断横竖屏设置对应的值 */if (pHigth > pWidth){offsetX = 0;offsetY = (pHigth - pWidth)/2;space = pWidth/4;}else {offsetX = (pWidth - pHigth)/2;offsetY = 0;space = pHigth/4;}//以下可以用双层for循环更简便/**one lines**/myPoint[0][0] = new MyPoint(offsetX+space,offsetY+space);myPoint[0][1] = new MyPoint(offsetX+space*2,offsetY+space);myPoint[0][2] = new MyPoint(offsetX+space*3,offsetY+space);/**two lines**/myPoint[1][0] = new MyPoint(offsetX+space,offsetY+space*2);myPoint[1][1] = new MyPoint(offsetX+space*2,offsetY+space*2);myPoint[1][2] = new MyPoint(offsetX+space*3,offsetY+space*2);/**three lines**/myPoint[2][0] = new MyPoint(offsetX+space,offsetY+space*3);myPoint[2][1] = new MyPoint(offsetX+space*2,offsetY+space*3); myPoint[2][2] = new MyPoint(offsetX+space*3,offsetY+space*3); }初始化点的位置之后就可以开始绘制点了(此处的九点可以通过Paint绘制圆形的图标,也可以直接定义一个图片资源,直接将图片资源绘制出来),此处用的第二种方法,同样在初始的方法中添加资源图标的初始/**添加点的图片资源**/nBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.onetests);sBitmap = BitmapFactory.decodeResource(getResources(),R.mipmap.twotests);eBitmap = BitmapFactory.decodeResource(getResources(),R.mipmap.threetests);之后就可以直接绘制出 private void drawPoint(Canvas canvas) {for (int i = 0;i