日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

android 九宫格图案解锁

發布時間:2023/12/15 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android 九宫格图案解锁 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

項目可能的需要,自己嘗試寫了一個九宮格解鎖,在此記錄,以作筆記。

先上效果圖

???????????????????

關于項目的分析,見下圖

width 九宮格控件的寬度,height 九宮格的控件的高度,offsetX是x軸的偏移量,offsetY是y軸的偏移量(實際編寫的時候一般根據寬高的數值取小的居中顯示,所以 offsetX與offsetY 根據寬高有一個數值會為 0 ),將控件中間區域分為 4X4 的數組區域,step為方格的大小,數組坐標與數組【1,2,3,4,5,6,7,8,9】的對應關系對應如圖(根據需要可以把 1-9 改為字母或者特殊字符的對應關系),計算公時為 坐標 ( i , j ) 對應的數字? number = i +( j - 1)*3.

手勢在移動的時候感覺觸摸的坐標判斷是否連接到對應的點。

九宮格控件 NineLockView

public class NineLockView extends View {private Paint paint;private boolean isInit=true;//是否初始化private boolean isDrawEnd=false;//是否畫最后的點與觸摸點之間的線private int offsetX;//x軸偏移量private int offsetY;//y軸偏移量private int step;//節點間的距離private int radius=40;//節點圓圈的半徑大小private int lastPointX;//最后一個節點的 x 坐標private int lastPointY;//最后一個節點的 y 坐標private float linearEndX;//觸摸點的最終位置坐標private float linearEndY;private List<Point> code=new ArrayList<Point>();//選中點的集合private NineLockListener lockListener;public NineLockView(Context context,@Nullable AttributeSet attrs) {super(context, attrs);init();}private void init(){paint=new Paint();paint.setColor(Color.parseColor("#458264"));paint.setAntiAlias(true);paint.setStrokeWidth(1);paint.setStrokeJoin(Paint.Join.ROUND);paint.setStrokeCap(Paint.Cap.ROUND);}public void setLockListener(NineLockListener lockListener) {this.lockListener = lockListener;}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);if(isInit){isInit=false;int w=getWidth();int h=getHeight();if(w>h){offsetX=(w-h)/2;w=h;}else {offsetY=(h-w)/2;h=w;}step=w/4;code.clear();lastPointY=0;lastPointX=0;}for(int i=1;i<4;i++){for(int j=1;j<4;j++){canvas.drawCircle(offsetX+step*i,offsetY+step*j,radius,paint);}}paint.setStrokeWidth(8);//設置連線的寬度if(code.size()>=1){for(int i=1;i<code.size();i++){canvas.drawLine(code.get(i-1).x*step+offsetX,code.get(i-1).y*step+offsetY,code.get(i).x*step+offsetX,code.get(i).y*step+offsetY,paint);}lastPointX=code.get(code.size()-1).x*step+offsetX;lastPointY=code.get(code.size()-1).y*step+offsetY;}if(isDrawEnd && lastPointX!=0 && lastPointY!=0 && linearEndX > 9 && linearEndY>9){canvas.drawLine(lastPointX,lastPointY,linearEndX,linearEndY,paint);}}@Overridepublic boolean onTouchEvent(MotionEvent event) {switch (event.getAction()){case MotionEvent.ACTION_DOWN:isInit=true;isDrawEnd=true;invalidate();standLinear(event.getX(),event.getY());break;case MotionEvent.ACTION_MOVE:standLinear(event.getX(),event.getY());break;case MotionEvent.ACTION_UP:isDrawEnd=false;setResultCode();invalidate();break;}return super.onTouchEvent(event);}/*** 根據手的滑動判斷是否選中某個節點* 當觸摸點與節點值之間的距離小于 radius 時默認選中* @param x* @param y*/private void standLinear(float x,float y){boolean isStand=false;for(int i=1;i<4;i++){for(int j=1;j<4;j++){float tx=offsetX+step*i-x;float ty=offsetY+step*j-y;if(Math.sqrt(tx*tx+ty*ty)<=radius){isStand=true;if(code.size()==0){linearEndX=i;linearEndY=j;code.add(new Point(i,j));}else {Point last=code.get(code.size() - 1);//如果當前點與記錄的最后一個點重復,則不再重復添加if (last.x == i && last.y == j) {linearEndX = x;linearEndY = y;} else {//添加記錄點,如果在豎直或水平方向上中間間隔一個點則間隔的點也要加上//未考慮對角線間隔的情況if(i==last.x && j==last.y+2){code.add(new Point(i,j-1));}else if(i==last.x && j==last.y-2){code.add(new Point(i,j+1));}else if(j==last.y && i==last.x+2){code.add(new Point(i-1,j));}else if(j==last.y && i==last.x-2){code.add(new Point(i+1,j));}code.add(new Point(i,j));}}break;}}if(isStand){break;}}if(!isStand){linearEndX=x;linearEndY=y;}invalidate();}private void setResultCode(){if(lockListener!=null){if(code.size()==0){lockListener.onError();}else {int[] result = new int[code.size()];for (int i = 0; i < code.size(); i++) {result[i] = (code.get(i).y - 1 )* 3 + code.get(i).x;}lockListener.onLockResult(result);}}}}

以上代碼是九宮格以及連線的自定義控件的代碼

源碼 碼云中國 git 下載:九宮格代碼下載

總結

以上是生活随笔為你收集整理的android 九宫格图案解锁的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 91精品久久人妻一区二区夜夜夜 | 波多野结衣中文一区 | 妖精视频一区二区三区 | 日韩欧美福利 | www.天堂av.com| 色婷婷在线影院 | 亚洲人成亚洲人成在线观看 | 一区二区三区日韩电影 | 久久久情 | 亚洲天堂免费视频 | 一级在线播放 | 中文字幕av久久爽 | 翔田千里在线播放 | 亚洲超碰av | 青青草综合在线 | 亚洲精品高清无码视频 | 中国在线观看免费高清视频播放 | 欧美影视| 国产亚洲天堂网 | 四虎看黄 | 欧美亚洲影院 | 丁香花电影在线观看免费高清 | 久久婷婷一区 | 亚洲图片另类小说 | 永久免费在线观看av | 大陆明星乱淫(高h)小说 | 蜜臀国产AV天堂久久无码蜜臀 | 精品国产乱码久久久久久久 | 成人av电影在线观看 | 午夜不卡在线观看 | 99国产精品久久久久99打野战 | 性欧美丰满熟妇xxxx性久久久 | av毛片网 | 黄色美女毛片 | 99精品国自产在线 | 欧美国产日韩综合 | 爆乳2把你榨干哦ova在线观看 | 狠狠狠狠狠干 | 一二三四区在线 | 色婷婷视频在线观看 | 免费人妻精品一区二区三区 | 国产 欧美 日韩 在线 | 中文字幕电影一区二区 | 毛片少妇 | 好男人网站 | 小少妇哺乳喂奶播放 | 日韩和的一区二区 | 九久久| 精品综合网 | 最新欧美大片 | 天天操天天操天天射 | 久久久久无码国产精品不卡 | 亚洲成人黄色小说 | 成熟丰满熟妇高潮xxxxx视频 | 网爆门在线 | 91视频免费观看 | 一区三区视频在线观看 | 国产精品sm | 涩涩视频在线看 | 嫩草影院在线免费观看 | 色在线播放| 亚洲一区日韩 | 亚洲欧美校园春色 | 日韩精品电影在线 | 美女黄视频网站 | 超清纯大学生白嫩啪啪 | 在线观看免费观看在线 | 日韩久久久久久久 | 国产91视频在线 | 久久精品波多野结衣 | 五月天激情综合网 | 亚洲精品国产精品乱码 | 懂色av一区二区三区四区五区 | 456av| 国产一区二区激情视频 | 欧美日韩视频在线观看一区 | 深夜视频在线观看免费 | 亚洲av无码一区二区乱子仑 | 伦理片一区二区三区 | 免费看国产黄色 | 视频福利一区 | 九九热在线视频观看 | 日本在线不卡一区二区三区 | 日本少妇吞精囗交视频 | 九一精品视频 | 国产亚洲精品久久久久四川人 | 五月天超碰 | 亚洲视频1区 | 狂野欧美性猛交免费视频 | 欧美成人三级在线观看 | 午夜大片| 毛片在哪看 | 欧美hdxxxx | 亚洲午夜精品久久久久久浪潮 | 日本69式三人交 | 好吊日在线观看 | 色狠狠久久av大岛优香 | 中文字幕在线视频不卡 | 韩国一级淫片免费看 |