精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

鴻蒙第三方組件*SwipeCaptcha滑動拼圖驗證組件

系統
文章由鴻蒙社區產出,想要了解更多內容請前往:51CTO和華為官方戰略合作共建的鴻蒙技術社區https://harmonyos.51cto.com

[[387304]]

想了解更多內容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區

https://harmonyos.51cto.com

前言

基于安卓平臺的滑動拼圖驗證組件SwipeCaptcha( https://github.com/mcxtzhang/SwipeCaptcha),實現了其核心功能的鴻蒙化遷移和重構,代碼已經開源到(https://gitee.com/isrc_ohos/SwipeCaptcha),歡迎各位下載使用并提出寶貴意見!

背景

在頁面登錄或者注冊的時候,為了確保不是機器人操作,會讓用戶手動驗證。驗證方式分為滑動拼圖驗證和滑動驗證兩種。本文的SwipeCaptcha組件可以實現滑動拼圖的驗證方式,操作簡單,安全性強,被眾多APP使用。

組件效果展示

鴻蒙系統的SwipeCaptcha組件在使用時,有兩個較為重要的圖片:滑塊和原圖。這兩張圖片被放置與同一水平線上,用戶拖動滑塊至原圖處,誤差在一定范圍內,即可驗證成功。每次調用SwipeCaptcha組件,滑塊和原圖的位置都會發生隨機變化,登錄時被暴力破解的難度增加,安全性較高。

在SwipeCaptcha組件的驗證界面,還有當前進度值和驗證狀態的描述。當前進度值表示滑塊在水平方向的滑動進度,進度為100時,表示滑塊滑至最右端。進度值下方展示的是當前的驗證狀態,可分為:“開始”、“驗證失敗,請重新驗證三種狀態”、“驗證成功”。下面依次展示SwipeCaptcha組件拼圖驗證失敗和成功的效果圖。

1、驗證失敗效果

用戶未將滑塊拖至原圖處,導致滑塊與原圖的位置誤差較大,驗證失敗。

圖1 驗證失敗效果

2、驗證成功效果

用戶拖動滑塊至原圖處,誤差在一定范圍內,驗證成功。

圖2 驗證成功效果

Sample解析

Sample主要包含以下四個部分:1)拼圖背景導入手機。2)裁剪滑塊。3)繪制滑塊。4)驗證拼圖是否成功。下面將通過具體步驟對上述四個部分進行詳解。 1、數據初始化

本步驟包含三個部分的數據設置:(1)獲取手機屏幕寬度信息;(2)設置進度值和驗證狀態的初始提示文字,如“當前進度值”、“請滑動滑塊驗證”;(3)初始化畫筆信息,定義畫筆屬性;

  1. //獲取手機屏幕寬度displayAttributes.width 
  2. DisplayManager displayManager = DisplayManager.getInstance(); 
  3. Display display = displayManager.getDefaultDisplay(this).get(); 
  4. DisplayAttributes displayAttributes = display.getAttributes(); 
  5. windowWidth = displayAttributes.width; 
  6. // 進度值初始化 
  7. text = new Text(this); 
  8. text.setMarginTop(800);// 距離頂端邊界的距離 
  9. text.setText("當前進度值"+ progress);// 設定文字 
  10. text.setTextSize(100);// 設定字號 
  11. myLayout.addComponent(text);// 添加進布局中 
  12. // 驗證狀態初始化 
  13. text2 = new Text(this); 
  14. text2.setMarginTop(1000); 
  15. text2.setText("請滑動滑塊驗證"); 
  16. text2.setTextSize(100); 
  17. myLayout.addComponent(text2); 
  18. //初始化畫筆的信息 
  19. mPaint = new Paint(); 
  20. mPaint.setColor(Color.BLACK);//定義顏色 
  21. mPaint.setAntiAlias(true);//定義虛實線 
  22. mPaint.setStrokeWidth(5f);//定義寬度 
  23. mPaint.setStyle(Paint.Style.STROKE_STYLE);//定義繪圖方式 

2、背景圖片繪制

用手機屏幕的寬度除以背景圖片的寬度,得到背景圖片的縮放比例,當該圖片顯示在手機中,按照此比例縮放可與屏幕同寬。該比例用于背景圖片適配不同型號的手機屏幕。

  1. //背景圖片的縮放比例 
  2. float ratio = (float) windowWidth/(float) img.getImageInfo().size.width; 
  3. //背景圖片繪制 
  4. Component image = new Component(this); 
  5. Component.DrawTask drawTask = new Component.DrawTask() { 
  6.     @Override 
  7.     public void onDraw(Component component, Canvas canvas) { 
  8.         //按照比例進行縮放 
  9.         canvas.scale(ratio , ratio); 
  10.         //繪圖 
  11.         canvas.drawPixelMapHolder(pixelMapHolder, 0, 0, new Paint()); 
  12.     } 
  13. }; 
  14. image.addDrawTask(drawTask); 
  15. myLayout.addComponent(image); 

3. 確定滑塊和原圖的位置

圖3 滑塊和原圖的位置示意

puzzleWidth為滑塊或者原圖的寬度;top為隨機數值,表示滑塊或者原圖的上邊距離背景圖片上邊的距離;puzzel2left也為隨機數值,表示原圖左邊距離背景圖片左邊的距離。有了以上三個變量可以確定組件中滑塊和原圖的初始位置和大小(滑塊初始時位于屏幕的最左側)。下面介紹上述屬性是如何計算出來的。

  1. //puzzleWidth 為屏幕寬度的1/6 
  2. puzzleWidth = windowWidth/6; 
  3.  
  4. //top為圖片縮放后高度與摳圖高度之差再乘以隨機數 
  5. top = (float) Math.random()*(img.getImageInfo().size.height*ratio - puzzleWidth); 
  6.  
  7. //原圖位置一定在滑塊位置右面 
  8. //屏幕寬度減去兩個拼圖寬度 *隨機數,后向右平移一個滑塊的長度 
  9. puzzel2left = ((windowWidth -puzzleWidth*2) * (float)Math.random()) + puzzleWidth; 

4. 獲取滑塊

本步驟需要根據原圖的位置,解碼出一個圖片作為滑塊。首先設置滑塊的形狀為矩形,依據上述的puzzel2left、puzzleWidth屬性,確定矩形所在區域,依據縮放比例,將矩形區域映射為原比例圖像,并對此圖像進行解碼,得到滑塊圖像數據。

  1. PixelMap puzzlePixelMap = 
  2.  getPuzzlePixelMap(this , ResourceTable.Media_longa , new Rect((int)(puzzel2left/ratio), (int) (top/ratio), (int) (puzzleWidth/ratio) , (int) (puzzleWidth/ratio))); 
  3. PixelMapHolder pixelMapHolder1 = new PixelMapHolder(puzzlePixelMap); 

5.繪制滑塊

滑塊通過畫筆來繪制,其位置應該根據滑動進度條的進度來移動,并且要對不同手機屏幕的進行適配。同時,為了和用戶友好的交互,我們還需要為滑塊繪制一個邊框,告知用戶這個邊框所在就是滑塊(原圖也需要繪制邊框,原理相同)。繪制滑塊和邊框的代碼如下:

  1. //繪制滑塊 
  2. Component.DrawTask puzzelDrawTask = new Component.DrawTask() { 
  3.     @Override 
  4.     public void onDraw(Component component, Canvas canvas) { 
  5.         Paint paint = new Paint(); 
  6. //移動小滑塊拼圖 
  7.         canvas.translate(slider.getProgress()*displayAttributes.width /100 , top); 
  8. //進行適當比例縮放 
  9.         canvas.scale(ratio , ratio); 
  10.         canvas.drawPixelMapHolder(pixelMapHolder1 , 0 , 0 , paint); 
  11.  
  12.     } 
  13. }; 
  14. //繪制滑塊邊框 
  15. Component puzzleFrame = new Component(this); 
  16. Component.DrawTask drawTask2 = new Component.DrawTask() { 
  17.     @Override 
  18.     public void onDraw(Component component, Canvas canvas) { 
  19.         //方框左側位置 
  20.         float left = slider.getProgress()*windowWidth /100; 
  21.         //繪制邊框的左邊 
  22.         canvas.drawLine(new Point(left , top), 
  23.                 new Point(lefttop + puzzleWidth), mPaint); 
  24.         //繪制邊框的上邊 
  25.         canvas.drawLine(new Point(lefttop), 
  26.                 new Point(left + puzzleWidth, top), mPaint); 
  27.         //繪制邊框的右邊 
  28.         canvas.drawLine(new Point(left + puzzleWidth, top), 
  29.                 new Point(left + puzzleWidth, top + puzzleWidth), mPaint); 
  30.         //繪制邊框的下邊 
  31.         canvas.drawLine(new Point(lefttop + puzzleWidth), 
  32.                 new Point(left + puzzleWidth, top + puzzleWidth), mPaint); 
  33.     } 
  34. }; 

6. 進度條滑動更新

為進度條設置監聽,拖動進度條會引起三處更新:(1)滑塊位置和滑塊邊框位置的更新;(2)進度值的更新;(3)驗證狀態的更新。在驗證狀態的更新中,需要對用戶拖動進度條結束時的驗證狀態進行判斷,滑塊和原圖的位置差距是否在誤差范圍內,如果在范圍內,則顯示驗證成功,如果不在誤差范圍內,則顯示驗證失敗,提示需要重新驗證。

  1. //設置進度條監聽 
  2. slider.setValueChangedListener(new Slider.ValueChangedListener() { 
  3.     @Override 
  4. //拖動進度條引起的更新 
  5. public void onProgressUpdated(Slider slider, int i, boolean b) { 
  6.     //滑塊的位置更新 
  7.     puzzle.invalidate(); 
  8.     //滑塊邊框位置的更新 
  9.     puzzleFrame.invalidate(); 
  10.     //進度值更新 
  11. text.setText("當前進度值 : " + slider.getProgress()); 
  12.     } 
  13.  
  14. //當用戶開始滑動進度條時,驗證狀態變為“開始”字樣。 
  15. public void onTouchStart(Slider slider) { 
  16.     //開始拖動的方法 
  17.     text2.setText("開始"); 
  18.  //判斷滑塊左側邊的位置和原圖的左側邊的位置是否在誤差內 
  19. public void onTouchEnd(Slider slider) { 
  20.         if(((slider.getProgress()*windowWidth /100)<(puzzel2left + puzzleWidth/10))&&((slider.getProgress()*windowWidth /100)>(puzzel2left - puzzleWidth/10))) 
  21.     { 
  22.         text2.setText("驗證成功"); 
  23.     }else { 
  24.         text2.setText("驗證失敗,請重新驗證"); 
  25.         slider.setProgressValue(10); 
  26.     } 

項目貢獻人

趙柏屹 鄭森文 朱偉 陳美汝 張馨心

想了解更多內容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區

https://harmonyos.51cto.com

 

責任編輯:jianghua 來源: 鴻蒙社區
相關推薦

2021-10-19 10:04:51

鴻蒙HarmonyOS應用

2021-11-17 15:37:43

鴻蒙HarmonyOS應用

2021-03-03 09:42:26

鴻蒙HarmonyOS圖片裁剪

2021-08-30 17:55:58

鴻蒙HarmonyOS應用

2021-03-10 15:03:40

鴻蒙HarmonyOS應用

2021-04-29 14:32:24

鴻蒙HarmonyOS應用

2021-03-24 09:30:49

鴻蒙HarmonyOS應用

2021-08-26 16:07:46

鴻蒙HarmonyOS應用

2017-12-11 15:53:56

2021-08-03 10:07:41

鴻蒙HarmonyOS應用

2021-03-01 14:00:11

鴻蒙HarmonyOS應用

2024-04-03 12:57:29

2021-08-05 15:06:30

鴻蒙HarmonyOS應用

2021-07-06 18:21:31

鴻蒙HarmonyOS應用

2021-04-20 15:06:42

鴻蒙HarmonyOS應用

2021-04-08 14:57:52

鴻蒙HarmonyOS應用

2021-07-20 15:20:40

鴻蒙HarmonyOS應用

2021-04-15 17:47:38

鴻蒙HarmonyOS應用

2015-11-05 16:44:37

第三方登陸android源碼

2021-01-27 10:04:46

鴻蒙HarmonyOS動畫
點贊
收藏

51CTO技術棧公眾號

人人草在线视频| 午夜精品久久久久久久爽| 婷婷精品在线| 欧美亚洲高清一区| 亚洲区一区二区三区| 99国产揄拍国产精品| 国产一区二区三区成人欧美日韩在线观看| 亚洲精品视频网上网址在线观看| 亚洲国产成人va在线观看麻豆| av香蕉成人| www.欧美色图| 成人精品视频在线| 韩国av中文字幕| 欧美在线电影| 亚洲国产小视频在线观看| www.久久91| 97蜜桃久久| 亚洲人精品午夜| 日本不卡一区二区三区在线观看 | 欧美性猛交xxxxx水多| 亚洲人成影视在线观看| 天堂av一区二区三区| 国产在线精品一区二区夜色 | 成人免费精品视频| 国产精品网站视频| 中文字幕精品三级久久久| 在线中文字幕亚洲| 一二美女精品欧洲| 呦呦视频在线观看| 日韩区一区二| 欧美日韩亚洲另类| www.四虎成人| 高潮在线视频| 亚洲狠狠爱一区二区三区| 国产奶头好大揉着好爽视频| a黄色在线观看| 成人精品国产免费网站| 91嫩草在线| 国产精品久久久久久久一区二区| 香蕉成人久久| 69av成年福利视频| 国产精品1000| 韩日在线一区| 欧美极品少妇xxxxⅹ裸体艺术| 精品国产视频在线观看| 久久性感美女视频| 亚洲国产成人精品一区二区| 亚洲成年人av| 国产精品白丝av嫩草影院| 日韩欧美一卡二卡| 国产又猛又黄的视频| 在线一区视频观看| 欧美专区在线观看一区| 日本黄网站免费| 成人美女大片| 日本黄色一区二区| 高清一区二区视频| 欧美亚洲综合视频| 欧美精品123区| 国产高清999| 日韩影片在线观看| 亚洲第一男人天堂| 爱爱的免费视频| 要久久电视剧全集免费| 亚洲人永久免费| 欧美xxxx精品| 91精品二区| 欧美激情视频一区二区三区不卡| 久久久久成人精品无码| 亚洲第一区色| 国产91在线播放| 日批视频免费观看| 国内不卡的二区三区中文字幕 | 国产又大又黑又粗| 国产一区二区免费看| www.久久草| 少妇人妻一区二区| 久久久久99精品国产片| 亚洲欧美精品| 国产精品偷拍| 色天天综合久久久久综合片| 成人日韩在线视频| 国产一区调教| 在线观看日韩欧美| 欧美黄色免费观看| 亚洲一区中文| 成人xvideos免费视频| 性一交一乱一乱一视频| 91视频免费看| 欧美一级免费在线观看| 国产理论电影在线| 欧美日韩中文字幕一区| 中文写幕一区二区三区免费观成熟| 国产伦精品一区二区三区免费优势| 亚洲精品综合久久中文字幕| 国产91在线播放九色| 亚洲精华国产欧美| 国产欧美日韩视频| 日本加勒比一区| 亚洲婷婷在线视频| 欧美老熟妇喷水| 国产情侣一区在线| 亚洲乱码一区二区| 五月婷婷一区二区| 日本欧美久久久久免费播放网| 成人av播放| 国产专区在线| 亚洲成人av电影| 在线不卡一区二区三区| 日韩av网址大全| 米奇精品一区二区三区在线观看| 丰满人妻老熟妇伦人精品| 精品亚洲欧美一区| 欧美福利精品| 国产色婷婷在线| 91精品国产一区二区三区香蕉 | 亚洲欧美高清视频| 自拍av一区二区三区| 黄色a级片免费| 国产精品网址| 欧美激情图片区| 国产乱色精品成人免费视频| 久久精子c满五个校花| 91成人综合网| 国产免费区一区二区三视频免费 | 69堂国产成人免费视频| 野外性满足hd| 亚洲黄色一区| 爱情岛论坛亚洲入口| 免费在线观看黄色网| 色偷偷久久人人79超碰人人澡 | 国产色一区二区| 成人免费aaa| 给我免费播放日韩视频| 久久91精品国产| 国产剧情精品在线| 亚洲欧洲三级电影| 国产aaaaa毛片| 国产伦精品一区二区三区千人斩| 97久久超碰福利国产精品…| 亚洲av永久无码国产精品久久| 中文字幕在线不卡视频| 久久婷婷综合色| 俺要去色综合狠狠| 国产精品久久中文| 国产粉嫩一区二区三区在线观看| 色一情一乱一乱一91av| 人妻体内射精一区二区| 先锋亚洲精品| 日本一区二区三区四区高清视频| 亚洲最新无码中文字幕久久| 日韩精品中文字幕在线| 国产小视频在线免费观看| av不卡在线播放| 91视频最新入口| 日韩理论电影中文字幕| 欧美中文在线免费| 国产三级视频在线播放线观看| 色8久久精品久久久久久蜜| 免费黄色片网站| 九九国产精品视频| 国内外成人激情免费视频| 一区二区三区国产好| 久久久久国产精品一区| 亚洲三区在线观看无套内射| 色综合中文综合网| 91精品久久久久久久久久久久| 日本不卡视频一二三区| 一区二区三区av| 亚洲伊人影院| 欧美在线影院在线视频| avtt在线播放| 日韩欧美的一区| av资源免费观看| 国产精品福利av| 蜜臀aⅴ国产精品久久久国产老师| 亚洲麻豆一区| 亚洲成人a**址| 亚洲一区电影| 国产成人小视频在线观看| 黄在线免费观看| 亚洲精品99久久久久| 婷婷激情五月综合| 一区二区中文视频| 尤物网站在线观看| 日韩不卡手机在线v区| 一级做a爰片久久| 豆花视频一区二区| 国产精品九九久久久久久久| 成码无人av片在线观看网站| 亚洲精品国产综合区久久久久久久| 久久久999久久久| 亚洲黄色性网站| 四虎国产精品成人免费入口| 国产精品一区二区三区乱码| 国产性xxxx18免费观看视频| 91欧美在线| 久久亚洲一区二区| 久久中文字幕一区二区| 日本一区二区三区四区视频| 日本三级在线观看网站| 亚洲视频第一页| 好吊色在线观看| 欧美日韩三级一区| 欧美videossex极品| 樱花影视一区二区| 亚洲v国产v欧美v久久久久久| 国产成人精品免费网站| 视频二区在线播放| 免费看的黄色欧美网站| 成人在线免费高清视频| 成人羞羞视频在线看网址| 国产伦精品一区二区三区照片| 国产精品无码久久久久| 日本精品久久久久影院| heyzo一区| 久久91亚洲精品中文字幕奶水| 国产毛片av在线| 日韩国产欧美精品一区二区三区| 精品人妻一区二区三区日产乱码 | 亚洲乱码国产乱码精品精98午夜| 亚洲最大成人网站| yourporn久久国产精品| 中国老熟女重囗味hdxx| 激情综合色综合久久综合| 久久久久久香蕉| 亚洲一区二区三区四区五区午夜 | 日韩欧美综合一区| 一级成人免费视频| 欧美在线观看一二区| 91video| 欧美日韩精品二区| 国产污视频在线看| 亚洲亚洲人成综合网络| 青草影院在线观看| 亚洲免费在线看| 欧美黑人性猛交xxx| 亚洲欧美国产高清| 中文字幕电影av| 亚洲欧美一区二区久久| 欧美在线视频第一页| 亚洲色大成网站www久久九九| 午夜激情视频在线播放| 国产精品日韩成人| 国产精品久久国产精麻豆96堂| 国产亚洲va综合人人澡精品| 熟女高潮一区二区三区| 久久久久久久综合色一本| 丰满大乳奶做爰ⅹxx视频| 99久久精品国产毛片| 久久精品老司机| 久久综合九色欧美综合狠狠| 青青草福利视频| 国产香蕉久久精品综合网| 欧美自拍偷拍网| 亚洲欧美综合色| 久久久久久久中文字幕| 亚洲高清免费观看高清完整版在线观看 | 欧洲vs亚洲vs国产| 欧美日韩一区二区三区在线观看免| 亚洲黄页网站| 日韩中文字幕一区二区| 91九色精品| 久久久久久久久久伊人| 一区二区亚洲精品| 国产裸体舞一区二区三区| 日本欧美一区二区三区乱码 | 99久久国产综合精品麻豆| 日本黄色动态图| 国产欧美va欧美不卡在线| 亚洲一二三四五六区| 亚洲一本大道在线| 亚洲天堂男人av| 欧美日韩和欧美的一区二区| av中文字幕播放| 国产视频久久久| 日本在线视频观看| 午夜精品久久久久久99热| 日韩不卡免费高清视频| 91精品一区二区| 欧美理论电影在线精品| 天堂一区二区三区| 欧美三级网页| 免费在线观看的毛片| 国产乱对白刺激视频不卡| 亚洲男女在线观看| 国产精品网站一区| 国产一级在线观看视频| 欧美三级在线看| 欧日韩在线视频| 在线观看视频亚洲| 美女91在线| 国产精品女主播视频| 成人在线tv视频| 污视频在线免费观看一区二区三区| 午夜亚洲福利| 免费在线观看的毛片| 国产成人免费xxxxxxxx| 一区二区三区久久久久| 亚洲国产中文字幕| 又色又爽又黄无遮挡的免费视频| 亚洲成人a**站| 日本中文在线观看| 国产成人精品久久二区二区| 亚洲精品观看| 一区二区三区四区在线视频| 噜噜噜在线观看免费视频日韩| 蜜桃视频无码区在线观看| 国产精品美女久久久久久2018| 国产一级精品视频| 欧美变态tickle挠乳网站| 欧美被日视频| 国产精品久久色| 国产精品嫩草影院在线看| 久久综合久久网| 国产精品123| 午夜激情福利网| 欧美三级视频在线| 毛片网站在线观看| 97av在线视频免费播放| 2021年精品国产福利在线| 大地资源第二页在线观看高清版| 日本视频中文字幕一区二区三区| 三级男人添奶爽爽爽视频| 一区二区三区蜜桃| 国产一区二区自拍视频| 丝袜情趣国产精品| 99只有精品| 日韩在线第一区| 久久亚洲色图| 97超碰在线免费观看| 欧美日韩性视频| 天天干天天做天天操| 久久久久这里只有精品| 99ri日韩精品视频| 精品少妇人欧美激情在线观看| 国产精品夜夜嗨| 久久黄色免费视频| 日韩精品中文字幕一区| 日本乱理伦在线| 99久久精品无码一区二区毛片 | 国产精品久久久久9999吃药| 中文字幕免费视频观看| 国产一区二区三区在线| 91精品国产66| 一本一本a久久| 寂寞少妇一区二区三区| 手机在线免费看毛片| 日韩免费视频一区二区| 女同视频在线观看| 国产精品区免费视频| 日韩午夜黄色| 好吊一区二区三区视频| 色综合久久久久久久久| 成人高清网站| 成人免费自拍视频| 欧美日本三区| 屁屁影院国产第一页| 91国在线观看| 欧美r级在线| 国产精品麻豆免费版| 国产九九精品| 妖精视频在线观看免费| 正在播放一区二区| 黄视频在线免费看| 久久精品国产一区二区三区不卡| 快she精品国产999| 国产人与禽zoz0性伦| 日韩西西人体444www| 欧美少妇网站| 亚洲欧美丝袜| 成人av网站在线观看| 天天爽夜夜爽人人爽| 久久精品国产亚洲精品| 高清精品xnxxcom| 日韩一级免费在线观看| 最新国产成人在线观看| 欧美特级特黄aaaaaa在线看| 91天堂素人约啪| 久久香蕉精品视频| 亚洲精品久久久一区二区三区 | 久久亚洲天堂| 国产精品亚洲综合| 天堂蜜桃91精品| 中文字幕另类日韩欧美亚洲嫩草| 亚洲黄一区二区| 欧美风情在线视频| 少妇av一区二区三区无码| 亚洲国产精品黑人久久久| 精品国产乱码一区二区三 | 久久手机在线视频| 国产日韩欧美制服另类| 国产成人精品一区二三区四区五区| 91sa在线看| 亚洲成人精品| 精品无码一区二区三区| 欧美电影免费提供在线观看| 桃花岛tv亚洲品质| 国产精品久久久久久久乖乖| 中文字幕在线一区免费|