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

鴻蒙開源第三方組件—SwipeCaptcha_ohos3.0旋轉驗證組件

開發
本期的SwipeCaptcha_ohos3.0是對前兩版本驗證方式進行功能升級,得到的一種新的驗證方式——旋轉驗證。

[[435504]]

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

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

https://harmonyos.51cto.com

前言

基于安卓平臺的滑動拼## 二級標題圖驗證組件SwipeCaptcha(https://github.com/mcxtzhang/SwipeCaptcha ),實現了鴻蒙化遷移和重構,代碼已經開源到(https://gitee.com/isrc_ohos/swipe-captcha_ohos ),目前已經獲得了很多人的Star和Fork ,歡迎各位下載使用并提出寶貴意見!

背景

前一期SwipeCaptcha_ohos2.0文章(https://harmonyos.51cto.com/posts/8787 )中介紹過,系統為了確保在注冊或登錄頁面時不是機器人在操作,通常需要用戶進行手動驗證,本期的SwipeCaptcha_ohos3.0是對前兩版本驗證方式進行功能升級,得到的一種新的驗證方式——旋轉驗證。

此驗證方式將圖片作為背景,通過把旋轉塊旋轉至能夠與背景圖片無縫拼接來完成驗證,操作簡單,安全性強,可被應用于各種網站的登錄、注冊、找回密碼或投票等場景中。

組件效果展示

成功運行組件后,可以通過將旋轉塊旋轉至能夠與背景圖片拼接成一張完整圖片,從而完成驗證。對應圖1所示的運行效果圖,本組件主要提供的功能是:

  • 拖動圖片下方的滑動條,可以改變旋轉塊角度;
  • 若旋轉塊旋轉后與原背景圖片的誤差值小于既定的閾值,則驗證成功,反之則失敗;
  • 在驗證完成后,可以點擊滑動條下方的條狀按鈕重新生成驗證碼(即旋轉塊的角度隨機設置)。
鴻蒙開源第三方組件——SwipeCaptcha_ohos3.0旋轉驗證組件-鴻蒙HarmonyOS技術社區

圖1 旋轉驗證運行效果

Sample解析

通過上文相信大家已經了解SwipeCaptcha_ohos3.0組件的使用效果,下面將具體講解其使用方法。其使用方法和SwipeCaptcha_ohos2.0組件類似,在此我們簡單回顧一下,共分為5個步驟:

步驟1. 在xml文件中添加RotateCaptchaView控件。

步驟2. 導入RotateCaptchaView類并聲明類對象。

步驟3. 綁定RotateCaptchaView控件并設置組件背景圖片。

步驟4. 設置回調處理函數。

步驟5. 設置Button控件監聽事件,重新生成驗證區域

(1)在xml文件中添加RotateCaptchaView控件

在xml文件中添加RotateCaptchaView控件,用于顯示旋轉驗證的動態效果。先設置該控件的高和寬,此處將寬度定為跟隨父控件的大小(match_parent),高度設置為220vp;再設置組件左右邊距分別為12vp,旋轉塊的半徑為80vp。

  1. <com.huawei.swipecaptchaview.lib.RotateCaptchaView 
  2.     ohos:id="$+id:rotateCaptchaView"//控件id 
  3.     ohos:height="220vp"//控件的高 
  4.     ohos:width="match_parent"//控件的寬 
  5.     ohos:left_margin="12vp"//左邊距 
  6.     ohos:right_margin="12vp"//右邊距 
  7.     app:captchaRadius="80vp"/>//旋轉塊半徑 

(2)導入SwipeCaptchaView類并聲明類對象

在MainAbilitySlice.java文件中,通過import關鍵字導入RotateCaptchaView類,該類用于在后續為驗證結果設置回調并重新生成旋轉塊角度。

  1. //導入SwipeCaptchaView類 
  2. import com.huawei.swipecaptchaview.lib.RotateCaptchaView;public class MainAbilitySlice extends AbilitySlice { 
  3. //聲明SwipeCaptchaView類對象 
  4. SwipeCaptchaView swipeCaptchaView;   
  5. ...... 

(3)綁定SwipeCaptchaView控件并設置組件背景圖片

在MainAbilitySlice.java的onStart()方法中,使用findComponentById()方法將xml文件中RotateCaptchaView控件與RotateCaptchaView類對象綁定;再調用setImageId()方法設置組件的背景圖片。

  1. //根據id綁定相應的控件 
  2. rotateCaptchaView = (RotateCaptchaView) findComponentById(ResourceTable.Id_rotateCaptchaView); 
  3. ... 
  4. //設置背景圖片 
  5. rotateCaptchaView.setImageId(ResourceTable.Media_pic02); 

(4)設置回調處理函數

設置SwipeCaptchaView組件的回調處理函數,來提示用戶旋轉驗證結果。以提示用戶“驗證成功”這個功能為例:需要重寫matchSuccess()方法,設置驗證成功后的提示信息。在上述方法中實例化一個ToastDialog提示框對象,使用該對象的setText()方法設置顯示文字為“驗證成功!”;setAlignment()方法設置提示框的布局位置在整體布局的中央;show()方法用于顯示提示框。

設置驗證失敗的情況和驗證成功同理,只需重寫matchFailed()方法,同時將文字信息設置為“驗證失敗!”即可。

  1. //每次旋轉結束后會根據相應的回調提示用戶驗證結果 
  2. rotateCaptchaView.setOnCaptchaMatchCallback(new RotateCaptchaView.OnCaptchaMatchCallback() { 
  3.     @Override 
  4.     public void matchSuccess(RotateCaptchaView rotateCaptchaView) { 
  5.         new ToastDialog(getContext()) 
  6.                 .setText(" 驗證成功!"
  7.                 .setAlignment(LayoutAlignment.CENTER) 
  8.                 .show(); 
  9.     } 
  10. ... 

(5)設置Button控件監聽事件,重新生成驗證區域

綁定button對象和xml文件中“重新生成驗證碼”Button控件;為button設置監聽事件,每次點擊按鈕后調用createCaptcha()方法,該方法用于重新生成驗證碼(即旋轉塊的角度隨機設置)。

  1. button = (Button) findComponentById(ResourceTable.Id_btn_change);//綁定Button 
  2. button.setClickedListener(new Component.ClickedListener() {//設置監聽 
  3.     @Override 
  4.     public void onClick(Component component) { 
  5.        rotateCaptchaView.createCaptcha();//隨機生成旋轉塊的旋轉角度 
  6.         ... 
  7.     } 
  8. }); 

Library解析

Library解析部分將要重點圍繞RotateCaptchaView類,對其內部邏輯按步驟展開講解,主要包括初始化準備工作、初始化旋轉驗證區域、繪制旋轉塊邊框的路徑并計算比例、以及繪制旋轉塊邊框和驗證區域。

(1)初始化準備工作

此部分是在RotateCaptchaView類構造函數中實現的,具體由初始化方法init()執行,此部分主要實現了下述4個功能。

1)設置參數

獲取xml文件中添加的SwipeCaptcha_ohos3.0組件的參數即寬、高,并獲取系統屏幕寬度,用于后續為背景圖片設置尺寸;設置半徑mCaptchaRadius用于確定旋轉塊尺寸,設置旋轉驗證閾值mMatchDeviation用于判斷旋轉驗證是否成功。

  1. private void init(Context context, AttrSet attrSet, String defStyleAttr) { 
  2.     mHeight = getHeight();//獲取xml中旋轉驗證控件的高 
  3.     mWidth = getWidth();//獲取xml中旋轉驗證控件的寬 
  4.     if (mWidth == 0) { //match_parent 
  5.         //獲取系統屏幕寬度 
  6.         mWidth = DisplayManager.getInstance().getDefaultDisplay(context).get().getAttributes().width; 
  7.     } 
  8.     mCaptchaRadius = (mHeight - SLIDER_HEIGHT - AttrHelper.vp2px(20, context)) / 2;//旋轉塊的半徑 
  9.     mMatchDeviation = AttrHelper.vp2px(3, context);//旋轉驗證成功與否的閾值 
  10. ... 

2)初始化背景圖片

此步驟主要是完成背景圖片的初始化操作,包括圖片尺寸、縮放模式、圖像源等屬性的設定,原理可參考圖2。

具體實現步驟為:

  • 實例化Image類得到背景圖片的對象;
  • 設置Image對象的寬為之前獲取的屏幕寬度mWidth,高為mHeight-SLIDER_HEIGHT,即組件高減去拖動條高的差值;
  • 設置圖片縮放模式為中心縮放;
  • 設置圖像源為圖2中的灰色圖片,表示“暫無背景圖片,”可提示用戶暫未設置真正的背景圖片。
鴻蒙開源第三方組件——SwipeCaptcha_ohos3.0旋轉驗證組件-鴻蒙HarmonyOS技術社區

圖2 初始化并設置背景圖片效果

  1. mImage = new Image(context); 
  2. LayoutConfig imageConfig = new LayoutConfig(mWidth, mHeight - SLIDER_HEIGHT);//寬為屏幕寬度,高為組件高減去拖動條高的差值 
  3. mImage.setLayoutConfig(imageConfig); 
  4. mImage.setScaleMode(Image.ScaleMode.CLIP_CENTER);//縮放模式為中心縮放 
  5. mImage.setPixelMap(ResourceTable.Media_no_resource);//設置圖片 

3)設置拖動條

先實例化Slider類得到拖動條對象,為其設置寬、高、上邊距等屬性;再設置拖動條的進度值,其中最小值設置為0,最大值設置為10000(此處將最大值設置較大的原因是為了得到更加絲滑流暢的拖動效果),并將初始進度值設置為0,將已拖動的進度條顏色設置為黑色用來強調拖動進度。

  1. mSlider = new Slider(context); 
  2. mSlider = new Slider(mLayout.getContext()); 
  3. mSlider.setWidth(mWidth);  //寬度 
  4. mSlider.setHeight(SLIDER_HEIGHT);       //高度 
  5. mSlider.setMarginTop(mHeight - SLIDER_HEIGHT); 
  6. mSlider.setMinValue(0);      //進度最小值 
  7. mSlider.setMaxValue(10000);  //進度最大值 
  8. mSlider.setProgressValue(0); //當前進度值 
  9. mSlider.setProgressColor(Color.BLACK);   //進度條已拖動的顏色 
  10. setSlideListener(); //監聽器 

4)設置拖動條監聽事件

拖動條的監聽事件是通過調用setSliderListener()方法具體實現的,在該方法中,首先重寫onTouchEnd()方法,判斷旋轉結束后旋轉塊當前角度和旋轉至無縫拼接的角度的差值是否小于已經規定好的驗證閾值mMatchDeviation。

若小于驗證閾值,則驗證成功:先取消旋轉塊邊緣的陰影,這是為了完整地呈現旋轉拼接后的背景圖片,再設置回調函數,實現彈出提示框提示用戶驗證成功的效果;

若大于驗證閾值,則驗證失敗:直接設置回調函數,提示用戶驗證失敗的效果,同時旋轉塊恢復驗證前的角度。

  1. private void setSlideListener() { 
  2.     mSlider.setValueChangedListener(new Slider.ValueChangedListener() { 
  3.         @Override 
  4.         public void onTouchEnd(Slider slider) { 
  5.             if (onCaptchaMatchCallback != null) { 
  6.                 if (Math.abs(mSlider.getProgress() * 360 / 10000 - randomDegree) < mMatchDeviation) {//判斷旋轉驗證誤差是否小于閾值 
  7.                     mPaint.setMaskFilter(null); //取消旋轉塊的陰影 
  8.                     ... 
  9.                     onCaptchaMatchCallback.matchSuccess(RotateCaptchaView.this); 
  10.                 } else { 
  11.                     slider.setProgressValue(0); 
  12.                     onCaptchaMatchCallback.matchFailed(RotateCaptchaView.this); 
  13.                 }}} 
  14.     }); 

(2)初始化旋轉驗證區域

在通過Image類對象調用setPixelMap()方法設置好驗證背景圖片后,由initCaptcha()方法完成旋轉驗證區域的初始化,主要實現的是對畫筆的初始化。

先實例化一個隨機數對象mRandom,用于后續計算隨機生成的旋轉驗證塊角度值。再實例化Paint類得到畫筆對象mPaint用于具體繪制旋轉塊,為其設置畫筆抗鋸齒、位掩碼標志、填充樣式和陰影等屬性,其中設置抗鋸齒屬性是為了實現邊緣弧線流暢無明顯鋸齒狀過度痕跡的效果,設置位掩碼標志用于防止抖動,實現柔和的顏色過度效果防止出現階梯狀痕跡的現象。

再實例化一個Path類對象用于繪制旋轉塊邊緣的圓形路徑。 接著就可以調用createCaptcha()方法開始繪制了。

  1. private void initCaptcha() { 
  2.     mRandom = new Random(System.nanoTime()); 
  3.     //設置畫筆 
  4.     mPaint = new Paint(); 
  5.     mPaint.setAntiAlias(true);   //抗鋸齒效果 
  6.     mPaint.setDither(true);      //防止抖動 
  7.     mPaint.setStyle(Paint.Style.FILL_STYLE);//填充樣式 
  8.     mPaint.setMaskFilter(new MaskFilter(10, MaskFilter.Blur.SOLID));    //陰影 
  9.  
  10.     mPath = new Path();//用于繪制旋轉快邊緣圓形路徑 
  11.     createCaptcha(); 

(3)設置旋轉塊邊框的路徑并計算比例

這部分和接下來的步驟(4)都是由initCaptcha()方法實現的。在此部分中,

首先:

  • 判斷是否設置好了背景圖片,如果設置好了則使用Random類對象調用帶參的nextInt()方法隨機生成一個范圍0至240的整數,以此隨機整數與60相加的和作為重新生成驗證碼后旋轉塊的隨機角度;
  • 設置拖動條初始進度為0,同時激活按鈕,將其狀態設置為可點擊并觸發點擊事件;
  • 為繪制的畫筆添加陰影效果,傳入的參數分別表示度數和樣式,實現在旋轉塊圓形邊緣處有一圈陰影的效果;
  • 設置好上述屬性后,需要調用invalidate()方法對圖片和布局視圖進行刷新。
  • 其次:
  • 設置繪制路徑即旋轉塊邊框的圓形軌跡,為嚴謹起見先使用reset()方法清空之前已經繪制的Path路徑至原始狀態。
  • 調用addCircle()方法設置圓的繪制路徑,該方法前兩個參數表示旋轉塊的圓點坐標X、Y值,第三個參數表示圓的半徑,第四個參數表示繪制方向。
  • 此處我們設置的繪制軌跡是一個以圖片中點(mWidth/2f,(mHeight-SLIDER_HEIGHT)/2f)為圓心、mCaptchaRadius為半徑、順時針方向繪制的圓形,計算原理和坐標軸方向可參考圖3,其中圓心即圖片中點坐標的計算方法是橫坐標X為圖片寬度的一半,縱坐標Y為圖片高度的一半即旋轉驗證組件的高減去拖動條高的差值的一半。
鴻蒙開源第三方組件——SwipeCaptcha_ohos3.0旋轉驗證組件-鴻蒙HarmonyOS技術社區

圖3 旋轉塊邊框圓形路徑設置原理

  1. public void createCaptcha() { 
  2.     if (mImage.getPixelMap() != null) {//已設置背景圖片 
  3.         randomDegree = mRandom.nextInt(240) + 60;//生成隨機角度 
  4.         mSlider.setProgressValue(0);//初始進度為0 
  5.         mSlider.setEnabled(true);//狀態為可點擊并觸發監聽 
  6.         mPaint.setMaskFilter(new MaskFilter(10, MaskFilter.Blur.SOLID));//添加陰影 
  7.         mImage.invalidate();//刷新視圖 
  8.         mLayout.invalidate(); 
  9.     } 
  10.  
  11.     //繪制遮罩路徑 
  12.     mPath.reset(); 
  13.     mPath.addCircle(mWidth / 2f, (mHeight - SLIDER_HEIGHT) / 2f, mCaptchaRadius, Path.Direction.CLOCK_WISE); 
  14.     mPath.close(); 
  15. ... 

最后,根據圖片的原寬度和控件寬度算出縮放比例,這部分原理與SwipeCaptcha_ohos2.0組件同理,簡單回顧一下,此處計算得到的較大的ratio代表圖片真實的縮放比例,這是由于上文介紹的Image控件將圖片縮放模式設為了CLIP_CENTER中心縮放模式,該模式會將圖片的短邊縮放至合適的大小并對長邊進行裁剪,因此較小的縮放比例代表被裁剪的邊,較大的則代表在填充進旋轉驗證組件時的真實縮放比例。

  1. public void createCaptcha() { 
  2. ... 
  3. //根據圖片的原寬度 和 控件寬度 算出縮放比例 
  4.     PixelMap pixelMap = mImage.getPixelMap(); 
  5.     int originWidth = pixelMap.getImageInfo().size.width; 
  6.     int originHeight = pixelMap.getImageInfo().size.height; 
  7.     float ratioWidth = (float) mWidth / originWidth; 
  8.     float ratioHeight = (float) (mHeight - SLIDER_HEIGHT) / originHeight; 
  9.     float ratio = Math.max(ratioWidth, ratioHeight);//更大的ratio 
  10. ... 

(4)繪制旋轉塊邊框和驗證區域

本步驟首先在Canvas畫布上,根據上一步設置好的繪制軌跡mPath和畫筆mPaint繪制旋轉塊的圓形邊框,這部分不會隨著旋轉而更新。

接著根據拖動條變化的數值調整旋轉塊的旋轉角度。具體旋轉的角度值是mSlider.getProgress() * 360 / 10000 - randomDegree,即算出拖動條當前進度值占最大值的比例,然后乘以360得到按比例變換后的角度值,再減去前面步驟已生成的隨機角度,就可以以(mWidth/2f,mHeight-SLIDER_HEIGHT)即背景圖片中點為旋轉中心進行旋轉;并獲取圖片的 PixelMapHolder,根據路徑裁剪canvas畫布,將其縮放至跟圖片縮放程度一致。

最后判斷若圖片寬的縮放比例和圖片真實縮放比例一樣時,說明寬沒變是在垂直方向上進行了裁剪,則根據比例計算出被裁剪掉的圖片高度,并在畫布上繪制內容;若二者比例不相等,說明寬有變化是在水平方向上進行了裁剪,則根據比例計算出被裁剪掉的圖片寬度,并在畫布上繪制內容。

  1. public void createCaptcha() { 
  2. ... 
  3.     mImage.addDrawTask((component, canvas) -> {//繪制邊框 
  4.             canvas.drawPath(mPath, mPaint); 
  5.     }); 
  6.     mLayout.addDrawTask((component, canvas) -> {//繪制驗證碼 
  7.             canvas.rotate(mSlider.getProgress() * 360 / 10000 - randomDegree, mWidth / 2f, (mHeight - SLIDER_HEIGHT) / 2f);  //根據拖動條的數值調整旋轉角度 
  8.             canvas.translate(0, 0); 
  9.              
  10.             PixelMapHolder pixelMapHolder = new PixelMapHolder(pixelMap);//獲取圖片的 PixelMapHolder 
  11.             canvas.clipPath(mPath, Canvas.ClipOp.INTERSECT);//根據路徑裁剪canvas 
  12.             canvas.scale(ratio, ratio);//畫布縮放至跟圖片縮放程度一致 
  13.             if (ratio == ratioWidth) { 
  14.                 float heightErr = (originHeight * ratio - (mHeight - SLIDER_HEIGHT)) / 2;//根據比例計算出垂直方向上由于 CLIP_CENTER 裁剪掉的圖片的高度 
  15.                 canvas.drawPixelMapHolder(pixelMapHolder, 0, -heightErr / ratio, mPaint);//繪制內容 
  16.             } else { 
  17.                 float widthErr = (originWidth * ratio - mWidth) / 2;//根據比例計算出水平方向上由于 CLIP_CENTER 裁剪掉的圖片的寬度 
  18.                 canvas.drawPixelMapHolder(pixelMapHolder, -widthErr / ratio, 0, mPaint);//繪制內容 
  19.             } 
  20.     }); 

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

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

https://harmonyos.51cto.com

 

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

2021-10-19 10:04:51

鴻蒙HarmonyOS應用

2021-03-12 16:35:33

鴻蒙HarmonyOS應用

2021-07-06 18:21:31

鴻蒙HarmonyOS應用

2021-08-30 17:55:58

鴻蒙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應用

2021-11-02 14:54:21

鴻蒙HarmonyOS應用

2021-08-10 15:23:08

鴻蒙HarmonyOS應用

2021-06-29 09:28:16

鴻蒙HarmonyOS應用

2021-03-10 15:03:40

鴻蒙HarmonyOS應用

2021-04-29 14:32:24

鴻蒙HarmonyOS應用

2021-03-24 09:30:49

鴻蒙HarmonyOS應用

2021-06-17 14:56:00

鴻蒙HarmonyOS應用

2021-07-28 09:40:04

鴻蒙HarmonyOS應用

2021-03-03 09:42:26

鴻蒙HarmonyOS圖片裁剪

2021-08-26 16:07:46

鴻蒙HarmonyOS應用

2021-08-03 10:07:41

鴻蒙HarmonyOS應用

2021-03-01 14:00:11

鴻蒙HarmonyOS應用
點贊
收藏

51CTO技術棧公眾號

放荡的美妇在线播放| 天天操天天爽天天射| 丰满人妻一区二区三区四区53| 国内精品美女在线观看| 亚洲第一精品自拍| 亚洲精品乱码久久久久久自慰| www.亚洲资源| 国产精品88888| 国产91在线播放精品91| 国产3级在线观看| 国产精品久久久网站| 色综合久久久久久久| 老汉色影院首页| 外国精品视频在线观看| 麻豆精品视频在线观看免费| 九九热最新视频//这里只有精品| 中文人妻一区二区三区| crdy在线观看欧美| 欧美日韩一区二区三区在线免费观看| 亚洲国产精品久久久久久女王| 99视频国产精品免费观看a| 国产精品女主播一区二区三区| 日韩一区二区av| 色婷婷免费视频| 国产精品视频首页| 色婷婷综合久久久中文一区二区| 青青视频免费在线| 大地资源中文在线观看免费版| 国产成人亚洲精品狼色在线| 国产日韩换脸av一区在线观看| 日本在线观看中文字幕| 1024精品久久久久久久久| 亚洲欧美日韩一区二区三区在线| 亚洲综合伊人久久| 久久爱.com| 色综合咪咪久久| 日本男女交配视频| 黄色在线免费网站| 国产精品无人区| 欧美精品一区二区三区在线四季| 高潮毛片7777777毛片| 国产自产视频一区二区三区| 国产欧美亚洲精品| 国产又粗又猛又爽又| 国产日韩欧美在线播放不卡| 欧美精品第一页在线播放| 9999热视频| 91影院成人| 色香阁99久久精品久久久| 亚欧洲乱码视频| 婷婷综合一区| 日韩精品电影网| 欧美肉大捧一进一出免费视频| 亚洲精品午夜| 精品国产乱码久久久久久牛牛| xxx中文字幕| 在线免费成人| 6080国产精品一区二区| 欧美激情第3页| 日韩美女在线| 欧美精品日日鲁夜夜添| 182午夜在线观看| 日韩成人一区| 5月丁香婷婷综合| 欧美在线a视频| 欧美不卡在线观看| 亚洲变态欧美另类捆绑| 国产+高潮+白浆+无码| 麻豆一区一区三区四区| 日韩av在线高清| 久久丫精品国产亚洲av不卡| 国产欧美日韩精品一区二区三区 | 特级丰满少妇一级aaaa爱毛片| 成人午夜伦理影院| 女同一区二区| 97电影在线看视频| 亚洲精品欧美激情| 僵尸世界大战2 在线播放| 国产精品原创| 欧美无乱码久久久免费午夜一区| 国产永久免费网站| 97se亚洲| 亚洲精品之草原avav久久| 天天摸日日摸狠狠添| 91九色精品| 欧美精品videossex88| 天天综合网入口| 青草国产精品久久久久久| 91精品视频观看| 手机在线观看免费av| 国产喂奶挤奶一区二区三区| 一区二区三区欧美在线| 成人三级小说| 91国产免费观看| 福利视频999| 久久久久97| 在线国产精品播放| 久久免费视频播放| 日韩—二三区免费观看av| 91视频国产一区| 午夜小视频免费| 亚洲色图欧美激情| 日本成年人网址| 国产精品一站二站| 亚洲夜晚福利在线观看| 老女人性淫交视频| 三级不卡在线观看| 国产精品久久久久久久天堂第1集| 日本a一级在线免费播放| 亚洲欧洲成人精品av97| www.av中文字幕| 欧美成人黄色| 日韩成人黄色av| 丰满少妇被猛烈进入一区二区| 亚洲综合99| 91av免费看| 在线播放毛片| 一本大道久久a久久综合婷婷| 永久免费黄色片| 欧美视频免费| 日本一区二区三区四区视频| 丰满少妇一级片| 成人欧美一区二区三区黑人麻豆| 男人操女人免费| 国产欧美自拍一区| 久久国产精品亚洲| 亚洲性生活大片| 国产亚洲成av人在线观看导航| 成人在线观看毛片| 国产精品美女久久久久| 国产一区二区三区日韩欧美| 在线观看中文字幕视频| 成人免费的视频| 99久久久精品视频| 国产精选久久| 久热99视频在线观看| 夜夜狠狠擅视频| 国产欧美日韩视频在线观看| www.亚洲天堂网| 欧美a级网站| 久久久久久这里只有精品| 国产免费黄色大片| 国产精品国产自产拍高清av王其| av免费中文字幕| 色综合久久中文| 91精品国产高清久久久久久91| av免费观看网址| 亚洲天堂网中文字| 极品粉嫩美女露脸啪啪| 欧美freesextv| 国产精品视频一区二区高潮| 成人精品一区二区三区免费 | 久久天天躁狠狠躁夜夜爽蜜月| 在线免费观看高清视频| 国产精品污网站| 污污动漫在线观看| 精品国产乱码久久久久久1区2匹| 人人做人人澡人人爽欧美| 亚洲人成色777777精品音频| 精品久久久一区| 黄色片视频免费观看| 亚洲专区一区| 午夜久久资源| 日韩欧美专区| 欧美美女18p| 囯产精品一品二区三区| 亚洲午夜久久久久久久久电影院 | 久久久久国产精品麻豆ai换脸 | 美日韩一级片在线观看| 一本一本a久久| 成人豆花视频| 欧美人与性动交a欧美精品| 亚洲av无码国产精品久久不卡 | 亚洲资源在线| 美女福利视频一区| 成人免费视频国产| 欧美日韩亚洲视频| 网爆门在线观看| 国产成人99久久亚洲综合精品| 欧美中日韩在线| 五月国产精品| 成人免费淫片aa视频免费| 午夜伦理在线视频| 91精品欧美久久久久久动漫 | 日韩欧美在线番号| 欧美网站一区二区| 青娱乐免费在线视频| 91麻豆国产自产在线观看| 黄色永久免费网站| 国产一区日韩欧美| 人偷久久久久久久偷女厕| 精品中文视频| 国产成人福利视频| 18av在线视频| 亚洲人线精品午夜| 国产成人精品一区二三区四区五区 | 日韩中文字幕电影| 国产一区视频导航| 欧美老熟妇喷水| 99视频精品全国免费| 国产区二精品视| 国产a亚洲精品| 97香蕉久久夜色精品国产| yourporn在线观看中文站| 精品精品欲导航| 中文字幕网址在线| 欧美日韩国产麻豆| 欧美亚洲日本在线| 国产拍揄自揄精品视频麻豆| 91porn在线| 麻豆成人久久精品二区三区红 | 最新日韩免费视频| k8久久久一区二区三区| 久久国产这里只有精品| 国产欧美91| 日本大胆人体视频| 日韩毛片视频| 欧美深深色噜噜狠狠yyy| 日韩欧美中文字幕在线视频| 国产精品视频yy9099| 国内精彩免费自拍视频在线观看网址 | 一区二区三区午夜探花| 欧美日韩精品免费观看| 成人精品毛片| 亚洲一区二区三区777| 中文av在线全新| 国内精品国产三级国产在线专| 日韩av中文| 色yeye香蕉凹凸一区二区av| 色网站在线免费观看| 亚洲成人在线视频播放| 国产xxxx在线观看| 欧美一区二区视频观看视频| 中文字幕欧美色图| 色av综合在线| 一级一片免费看| 欧美网站在线观看| 999这里只有精品| 精品久久久久久久久久久久久| 69精品久久久| 亚洲无人区一区| 久久免费在线观看视频| 一区二区三区精品在线观看| 日韩三级在线观看视频| 国产精品乱码人人做人人爱| 免费视频91蜜桃| 国产农村妇女毛片精品久久麻豆| 免费a级黄色片| 久久综合久久综合九色| 在线免费播放av| 95精品视频在线| 国产呦小j女精品视频| 91性感美女视频| 受虐m奴xxx在线观看| 久久精品一区二区三区不卡牛牛 | 国产精品久久久久影视| 国产18无套直看片| 一区二区中文字幕在线| 搜索黄色一级片| 一区二区成人在线视频| 日韩欧美中文字幕视频| 亚洲国产精品久久艾草纯爱| 91香蕉在线视频| 色先锋久久av资源部| 正在播放木下凛凛xv99| 精品视频1区2区| 99热这里只有精| 精品国产乱码久久久久久久| 日韩在线观看视频一区二区三区| 亚洲福利视频网| 欧美婷婷久久五月精品三区| 国产性猛交xxxx免费看久久| 91最新在线| 欧美成人精品在线视频| 国精一区二区三区| 青草青草久热精品视频在线网站 | 99免费观看视频| 99精品黄色片免费大全| 国产伦精品一区二区三区视频女| 国产精品久久久久三级| 破处女黄色一级片| 精品免费在线视频| 亚洲熟女乱色一区二区三区久久久| 欧美丰满一区二区免费视频| 性色av蜜臀av| 亚洲欧美国产高清va在线播| 95在线视频| 欧美极品在线播放| 主播大秀视频在线观看一区二区| 91精品久久香蕉国产线看观看| 日韩动漫一区| 日本黄色播放器| 在线综合亚洲| 不用播放器的免费av| 97精品国产露脸对白| 麻豆视频免费在线播放| 亚洲一区二区三区爽爽爽爽爽 | 国产精品综合久久久久久| 国产99亚洲| 日韩中文在线字幕| 日一区二区三区| 日韩少妇一区二区| 中文字幕在线不卡| 天堂а√在线中文在线新版| 欧美一区午夜视频在线观看| 飘雪影院手机免费高清版在线观看| 久久久精品在线| 免费成人美女女| 国产精品日韩欧美一区二区| 日本一本不卡| 亚洲 高清 成人 动漫| 国产在线麻豆精品观看| 欧美黄色一级生活片| 亚洲高清视频在线| 国产日韩免费视频| 夜夜嗨av一区二区三区免费区| av在线网页| 91精品国产一区二区三区动漫| 欧美日一区二区| 成人毛片视频网站| 国产精品一区二区不卡| 久草手机视频在线观看| 色综合天天性综合| 亚洲欧美日本在线观看| 欧美极品少妇xxxxx| 精品国产麻豆| 一区二区免费在线观看| 日本午夜精品一区二区三区电影| 特大黑人巨人吊xxxx| 亚洲国产中文字幕在线视频综合 | 中文字幕乱码中文乱码51精品| 99视频网站| 欧美精品97| 久久精品一卡二卡| 国产精品第一页第二页第三页| 男人天堂视频网| 亚洲男人天堂网站| 色网在线免费观看| 国产视频精品网| 亚洲人成免费| 亚洲男女在线观看| 亚洲国产精品久久久男人的天堂| 国产成人麻豆精品午夜在线| 欧美成人性色生活仑片| 大胆国模一区二区三区| 亚洲一区精品视频| 久久国产视频网| 永久免费未视频| 91超碰这里只有精品国产| 国产网站在线免费观看| 成人淫片在线看| 久久久久电影| 2025中文字幕| 亚洲444eee在线观看| 无码国产精品高潮久久99| 亚洲 日韩 国产第一| 婷婷成人在线| 日本久久精品一区二区| 欧美国产精品久久| 国产精品一级二级| 欧美美最猛性xxxxxx| 国产女人18毛片水真多18精品| 浮妇高潮喷白浆视频| 91片在线免费观看| 懂色av蜜臀av粉嫩av喷吹| 日韩天堂在线视频| 日韩电影精品| 91精品一区二区三区四区| 成人中文字幕电影| 免费在线不卡视频| 在线观看欧美日韩国产| crdy在线观看欧美| 国产无限制自拍| 国产午夜亚洲精品不卡| 一本色道久久综合无码人妻| 久久福利视频网| 日本韩国欧美超级黄在线观看| 久久精品一区二| 最新久久zyz资源站| 蜜桃在线一区二区| 国产成人亚洲综合91| 久久久久久久久国产一区| 扒开伸进免费视频| 日本高清不卡视频| 中文字幕在线播放网址| 久久精品国产精品国产精品污| 免费在线视频一区| 国产亚洲欧美精品久久久www| 日韩精品欧美国产精品忘忧草| 91国内外精品自在线播放| 无颜之月在线看| www久久久久| 精品二区在线观看| 日韩免费在线播放| 综合天天久久| 国产ts在线播放| 日韩欧美电影一区| 成人黄色毛片| 久久这里只有精品23| 中文字幕一区二区三中文字幕|