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

鴻蒙開源第三方組件—uCrop_ohos圖片裁剪組件

開源
文章由鴻蒙社區(qū)產(chǎn)出,想要了解更多內(nèi)容請前往:51CTO和華為官方戰(zhàn)略合作共建的鴻蒙技術(shù)社區(qū)https://harmonyos.51cto.com

[[391927]]

想了解更多內(nèi)容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)

https://harmonyos.51cto.com

前言

基于安卓平臺的圖片裁剪組件uCrop( https://github.com/Yalantis/uCrop),實(shí)現(xiàn)了鴻蒙化遷移和重構(gòu)。目前代碼已經(jīng)開源到(https://gitee.com/isrc_ohos/u-crop_ohos),歡迎各位下載使用并提出寶貴意見!

背景

uCrop組件是開源的圖片裁剪庫,支持對圖片的縮放和裁剪等操作,是安卓平臺比較受歡迎的組件,在Github上已有1萬多個Star和近2千個Fork。uCrop組件具有封裝程度高、使用流暢、自定義程度高的優(yōu)點(diǎn),被廣泛應(yīng)用于多種APP中。

組件效果展示

安卓和鴻蒙UI組件的差異較大,uCrop_ohos的實(shí)現(xiàn)完全重構(gòu)了安卓版uCrop的UI部分,所以uCrop_ohos的組件效果看上去會和uCrop完全不同。

本組件的效果展示可分為兩個步驟:圖片選擇和圖片裁剪。下面依次對其進(jìn)行講解和展示。

1、uCrop_ohos圖片選擇

uCrop_ohos支持裁剪系統(tǒng)選擇相冊圖片或網(wǎng)絡(luò)圖片,用戶可以在主菜單中選擇對應(yīng)的功能,如圖1所示。

圖 1 主菜單界面

(1)uCrop_ohos讀取相冊圖片

當(dāng)用戶賦予組件相應(yīng)權(quán)限后,uCrop_ohos可以自動讀取手機(jī)相冊中每一張圖片,并將它們的縮略圖作為一個列表呈現(xiàn)在UI界面上,用戶可以上下滑動列表尋找目標(biāo)圖片,如圖2所示。當(dāng)用戶點(diǎn)擊某張縮略圖時,會跳轉(zhuǎn)到uCrop_ohos的裁剪界面,執(zhí)行后續(xù)操作。

圖 2 選擇系統(tǒng)相冊圖片

(2)uCrop_ohos讀取網(wǎng)絡(luò)圖片

用戶需要將圖片網(wǎng)址鍵入到輸入框內(nèi)并點(diǎn)擊確定按鈕,如圖3所示。uCrop_ohos會自動下載圖片并跳轉(zhuǎn)到裁剪界面,執(zhí)行后續(xù)操作。

圖 3 選擇網(wǎng)絡(luò)圖片

2、uCrop_ohos圖片裁剪

圖4 uCrop_ohos的裁剪界面

圖4是uCrop_ohos的裁剪界面。使用者可以通過手勢對圖片進(jìn)行縮放、旋轉(zhuǎn)和平移的操作,也可以通過按鈕、滑塊等控件進(jìn)行相應(yīng)操作。將圖片調(diào)整至滿意狀態(tài)時,點(diǎn)擊裁剪按鈕即可獲得裁剪后的新圖片,并將其保存至手機(jī)相冊。且本組件的圖片與裁剪框具有自適應(yīng)能力,能夠保證裁剪框時刻在圖片范圍內(nèi),防止由于裁剪框的范圍大于圖片導(dǎo)致的一系列問題。

Sample解析

圖5 Sample的工程結(jié)構(gòu)

uCrop_ohos的核心能力都由其Library提供,Sample主要用于構(gòu)建UI,并調(diào)用Library的接口。從圖5可以看出Sample的工程結(jié)構(gòu)較為簡單,主要由4個文件構(gòu)成,下面進(jìn)行詳細(xì)的介紹。

1、CropPicture

CropPicture文件提供了裁剪界面,其最主要的邏輯是通過圖片Uri實(shí)例化Library中UCropView類。由于uCrop_ohos的邏輯是先將用戶選擇的原圖創(chuàng)建一個副本,然后對副本執(zhí)行裁剪,所以為了將圖片傳入UCropView需要兩個Uri:一個名為uri_i,從intent中獲得,標(biāo)識的是用戶選擇的原圖,可以是本地圖片也可以是網(wǎng)絡(luò)圖片;另一個名為uri_o,標(biāo)識的是原圖副本,一定是一張本地圖片。代碼如下:

  1. //URI_IN 
  2. Uri uri_i = intent.getUri(); 
  3.  
  4. //URI_OUT 
  5. String filename = "test.jpg"
  6. PixelMap.InitializationOptions options = new PixelMap.InitializationOptions(); 
  7. options.size = new Size(100,100); 
  8. PixelMap pixelmap = PixelMap.create(options); 
  9. Uri uri_o = saveImage(filename, pixelmap); 
  10.  
  11. //UcropView 
  12. UCropView uCropView = new UCropView(this); 
  13. try { 
  14.     uCropView.getCropImageView().setImageUri(uri_i, uri_o); 
  15.     uCropView.getOverlayView().setShowCropFrame(true); 
  16.     uCropView.getOverlayView().setShowCropGrid(true); 
  17.     uCropView.getOverlayView().setDimmedColor(Color.TRANSPARENT.getValue()); 
  18.  
  19. } catch (Exception e) { 
  20.     e.printStackTrace(); 

Library給開發(fā)者提供了public接口,使得開發(fā)者易于封裝自己的UI功能。例如本文件中的旋轉(zhuǎn)和縮放滑塊、旋轉(zhuǎn)和縮放按鈕、當(dāng)前旋轉(zhuǎn)和縮放狀態(tài)的顯示都是調(diào)用Library接口實(shí)現(xiàn)的。以如下功能的實(shí)現(xiàn)為例:創(chuàng)建了一個按鈕,當(dāng)用戶觸碰這個按鈕之后就可以將圖片右旋90度。其核心能力就是依靠調(diào)用Library中postRotate()函數(shù)實(shí)現(xiàn)的,非常簡單。

  1. //右旋90度的Button 
  2. Button button_plus_90 = new Button(this); 
  3. button_plus_90.setText("+90°"); 
  4. button_plus_90.setTextSize(80); 
  5. button_plus_90.setBackground(buttonBackground); 
  6. button_plus_90.setClickedListener(new Component.ClickedListener() { 
  7.     @Override 
  8.     public void onClick(Component component) { 
  9.         float degrees = 90f; 
  10.         //計算旋轉(zhuǎn)中心 
  11.         float center_X = uCropView.getOverlayView().getCropViewRect().getCenter().getPointX(); 
  12.         float center_Y = uCropView.getOverlayView().getCropViewRect().getCenter().getPointY(); 
  13.         //旋轉(zhuǎn) 
  14.         uCropView.getCropImageView().postRotate(degrees,center_X,center_Y); 
  15.         //適配 
  16.         uCropView.getCropImageView().setImageToWrapCropBounds(false); 
  17.         //顯示旋轉(zhuǎn)角度 
  18.         mDegree = uCropView.getCropImageView().getCurrentAngle(); 
  19.         text.setText("當(dāng)前旋轉(zhuǎn)角度: " + df.format(mDegree) + " °"); 
  20.     } 
  21. }); 

2、LocalPictureChoose & HttpPictureChoose

由上文可知,uri_i是通過intent得到的,這個intent就是由 LocalPictureChoose或HttpPictureChoose傳遞的。LocalPictureChoose提供選擇相冊圖片的能力,HttpPictureChoose提供選擇網(wǎng)絡(luò)圖片的能力。

LocalPictureChoose提供的功能是將相冊中的全部圖片讀取出來,做成縮略圖排列在UI上,然后將每個縮略圖綁定一個觸摸監(jiān)聽器,一旦使用者選中某個縮略圖,就會將這個縮略圖對應(yīng)的原圖uri放在intent中傳給CropPicture。具體代碼如下:

  1. private void showImage() { 
  2.     DataAbilityHelper helper = DataAbilityHelper.creator(this); 
  3.     try { 
  4.         // columns為null,查詢記錄所有字段,當(dāng)前例子表示查詢id字段 
  5.         ResultSet resultSet = helper.query(AVStorage.Images.Media.EXTERNAL_DATA_ABILITY_URI, new String[]{AVStorage.Images.Media.ID}, null); 
  6.         while (resultSet != null && resultSet.goToNextRow()) { 
  7.             //創(chuàng)建image用以顯示系統(tǒng)相冊縮略圖 
  8.             PixelMap pixelMap = null
  9.             ImageSource imageSource = null
  10.             Image image = new Image(this); 
  11.             image.setWidth(250); 
  12.             image.setHeight(250); 
  13.             image.setMarginsLeftAndRight(10, 10); 
  14.             image.setMarginsTopAndBottom(10, 10); 
  15.             image.setScaleMode(Image.ScaleMode.CLIP_CENTER); 
  16.             // 獲取id字段的值 
  17.             int id = resultSet.getInt(resultSet.getColumnIndexForName(AVStorage.Images.Media.ID)); 
  18.             Uri uri = Uri.appendEncodedPathToUri(AVStorage.Images.Media.EXTERNAL_DATA_ABILITY_URI, String.valueOf(id)); 
  19.             FileDescriptor fd = helper.openFile(uri, "r"); 
  20.             ImageSource.DecodingOptions decodingOptions = new ImageSource.DecodingOptions(); 
  21.             try { 
  22.                 //解碼并將圖片放到image中 
  23.                 imageSource = ImageSource.create(fd, null); 
  24.                 pixelMap = imageSource.createPixelmap(null); 
  25.                 int height = pixelMap.getImageInfo().size.height; 
  26.                 int width = pixelMap.getImageInfo().size.width; 
  27.                 float sampleFactor = Math.max(height /250f, width/250f); 
  28.                 decodingOptions.desiredSize = new Size((int) (width/sampleFactor), (int)(height/sampleFactor)); 
  29.                 pixelMap = imageSource.createPixelmap(decodingOptions); 
  30.             } catch (Exception e) { 
  31.                 e.printStackTrace(); 
  32.             } finally { 
  33.                 if (imageSource != null) { 
  34.                     imageSource.release(); 
  35.                 } 
  36.             } 
  37.             image.setPixelMap(pixelMap); 
  38.             image.setClickedListener(new Component.ClickedListener() { 
  39.                 @Override 
  40.                 public void onClick(Component component) { 
  41.                     gotoCrop(uri); 
  42.                 } 
  43.             }); 
  44.             tableLayout.addComponent(image); 
  45.         } 
  46.     } catch (DataAbilityRemoteException | FileNotFoundException e) { 
  47.         e.printStackTrace(); 
  48.     } 
  49. //uri放在intent中 
  50. private void gotoCrop(Uri uri){ 
  51.     Intent intent = new Intent(); 
  52.     intent.setUri(uri); 
  53.     present(new CropPicture(),intent); 

HttpPictureChoose的功能主要是將用戶輸入的網(wǎng)絡(luò)圖片地址解析為Uri傳遞給CropPicture,目前只支持手動輸入地址。

3、MainMenu

一個簡單的主菜單界面,用戶可以通過點(diǎn)擊不同的按鈕選擇裁剪相冊圖片還是網(wǎng)絡(luò)圖片。

Library解析

鴻蒙和安卓存在較多的能力差異,即二者在實(shí)現(xiàn)同一 種功能時,方法不同,這不僅體現(xiàn)在工程結(jié)構(gòu)上,也體現(xiàn)在具體的代碼邏輯中。以下將對uCrop_ohos和uCrop的工程結(jié)構(gòu)進(jìn)行對比,并介紹幾個在uCrop_ohos移植過程中遇到的安卓和鴻蒙的能力差異。

1、工程結(jié)構(gòu)對比

圖 6 uCrop_ohos(上)與uCrop(下)的工程結(jié)構(gòu)對比

可以看出uCrop_ohos相比uCrop少封裝了一層Activity與Fragment,原因有3個:

(1)安卓的Activity與鴻蒙的Ability還是有差別的,強(qiáng)行復(fù)現(xiàn)會導(dǎo)致代碼復(fù)用率低。

(2)這一層與UI強(qiáng)耦合,由于鴻蒙尚不支持安卓中許多控件,例如Menu等,這就導(dǎo)致難以原樣復(fù)現(xiàn)UCropActivity中的UI。

(3)封裝程度越高,可供開發(fā)者自定義的程度就越小。

2、能力差異

(1)圖片加載&保存

不論是加載網(wǎng)絡(luò)圖片還是相冊圖片,在uCrop和uCrop_ohos內(nèi)部都是通過解析圖片的Uri實(shí)現(xiàn)的,所以需要有一個識別Uri種類的過程,即通過分析Uri的Scheme來實(shí)現(xiàn)Uri的分類。如果Uri的Scheme是http或https則會被認(rèn)為是網(wǎng)絡(luò)圖片,調(diào)用okhttp3的能力執(zhí)行下載操作;如果Uri的Scheme是content(安卓)或dataability(鴻蒙)就會被認(rèn)為是本地圖片,執(zhí)行復(fù)制操作。下載或復(fù)制的圖片將作為被裁剪的圖片。代碼如下所示:

  1. private void processInputUri() throws NullPointerException, IOException { 
  2.     String inputUriScheme = mInputUri.getScheme(); 
  3.     //Scheme為http或https即為網(wǎng)絡(luò)圖片,執(zhí)行下載 
  4.     if ("http".equals(inputUriScheme) || "https".equals(inputUriScheme)) { 
  5.         try { 
  6.             downloadFile(mInputUri, mOutputUri); 
  7.         } catch (NullPointerException e) { 
  8.             LogUtils.LogError(TAG, "Downloading failed:"+e); 
  9.             throw e; 
  10.         } 
  11.     //安卓中Scheme為content即為本地圖片,執(zhí)行復(fù)制 
  12.     } else if ("content".equals(inputUriScheme)) { 
  13.         try { 
  14.             copyFile(mInputUri, mOutputUri); 
  15.         } catch (NullPointerException | IOException e) { 
  16.             LogUtils.LogError(TAG, "Copying failed:"+e); 
  17.             throw e; 
  18.         } 
  19.     //鴻蒙中Scheme為dataability即為本地圖片,執(zhí)行復(fù)制 
  20.     } else if("dataability".equals(inputUriScheme)){ 
  21.         try { 
  22.             copyFile(mInputUri, mOutputUri); 
  23.         } catch (NullPointerException | IOException e) { 
  24.             LogUtils.LogError(TAG, "Copying failed:"+e); 
  25.             throw e; 
  26.         } 

圖片文件準(zhǔn)備完成后,還需要將其解碼成Bitmap(安卓)或PixelMap(鴻蒙)格式以便實(shí)現(xiàn)uCrop后續(xù)的各種功能。在解碼之前還需要通過Uri來獲取文件流,在這一點(diǎn)上安卓和鴻蒙的實(shí)現(xiàn)原理不同。對于安卓,可以通過openInputStream()函數(shù)獲得輸入文件流InputStream:

  1. InputStream stream = mContext.getContentResolver().openInputStream(mInputUri); 

對于鴻蒙則需要調(diào)用DataAbility,通過DataAbilityHelper先拿到FileDescriptor,然后才能得到InputStream:

  1. InputStream stream = null
  2. DataAbilityHelper helper = DataAbilityHelper.creator(mContext); 
  3. FileDescriptor fd = helper.openFile(mInputUri, "r"); 
  4. stream = new FileInputStream(fd); 

同樣地,對于圖片保存需要的輸出文件流OutputStream,安卓和鴻蒙獲取方式也存在不同,具體代碼如下。

  1. //安卓獲取OutputStream 
  2. outputStream = context.getContentResolver().openOutputStream(Uri.fromFile(new File(mImageOutputPath))); 
  3.  
  4. //鴻蒙獲取OutputStream 
  5. valuesBucket.putInteger("is_pending", 1); 
  6. DataAbilityHelper helper = DataAbilityHelper.creator(mContext.get()); 
  7. int id =helper.insert(AVStorage.Images.Media.EXTERNAL_DATA_ABILITY_URI, valuesBucket); 
  8. Uri uri = Uri.appendEncodedPathToUri(AVStorage.Images.Media.EXTERNAL_DATA_ABILITY_URI, String.valueOf(id)); 
  9. //這里需要"w"寫權(quán)限 
  10. FileDescriptor fd = helper.openFile(uri, "w"); 
  11. OutputStream outputStream = new FileOutputStream(fd); 

(2)裁剪的實(shí)現(xiàn)

在安卓版的uCrop中,裁剪功能的實(shí)現(xiàn)原理是將原圖(位圖1)位于裁剪框內(nèi)的部分創(chuàng)建一個新的位圖(位圖2),然后將新的位圖保存成圖片文件(圖片文件1)。如圖7所示:

圖 7 uCrop裁剪功能的實(shí)現(xiàn)方法

而在鴻蒙版uCrop_ohos中,裁剪功能的實(shí)現(xiàn)原理發(fā)生了變化。鴻蒙系統(tǒng)API雖不支持對位圖的旋轉(zhuǎn)操作,但圖像的解碼API提供了旋轉(zhuǎn)能力,所以鴻蒙的裁剪過程是這樣的:

首先將原圖(位圖1)保存為一個臨時的圖片文件(圖片文件1),通過相對旋轉(zhuǎn)角度對臨時圖片文件進(jìn)行讀取,此時讀取出的位圖(位圖2)就包含了正確的旋轉(zhuǎn)信息。然后再通過相對縮放和位移創(chuàng)建一個新的位圖(位圖3),這個位圖還會因?yàn)锳PI的特性發(fā)生壓縮和錯切等形變,所以還需要再創(chuàng)建最后一個位圖(位圖4)來修正形變,最后再將位圖4保存成圖片文件(圖片文件2)。如圖8所示:

圖 8 uCrop_ohos裁剪功能的實(shí)現(xiàn)方法

(3)異步任務(wù)處理

由于圖片的讀取、裁剪和保存這些操作都是比較消耗系統(tǒng)性能的,直接導(dǎo)致的問題就是卡頓,所以需要使用異步任務(wù)將這些操作放到后臺操作,減少UI線程的負(fù)擔(dān)。下面以裁剪任務(wù)為例進(jìn)行介紹。

在uCrop中使用的是BitmapCropTask類繼承AsyncTask類的方法:

  1. public class BitmapCropTask extends AsyncTask<Void, Void, Throwable> 

然后在其中重寫doInBackground()和onPostExecute()函數(shù),分別實(shí)現(xiàn)后臺裁剪任務(wù)的處理與回調(diào):

  1. @Override 
  2. @Nullable 
  3. protected Throwable doInBackground(Void... params) { 
  4.     if (mViewBitmap == null) { 
  5.         return new NullPointerException("ViewBitmap is null"); 
  6.     } else if (mViewBitmap.isRecycled()) { 
  7.         return new NullPointerException("ViewBitmap is recycled"); 
  8.     } else if (mCurrentImageRect.isEmpty()) { 
  9.         return new NullPointerException("CurrentImageRect is empty"); 
  10.     } 
  11.  
  12.     try { 
  13.         crop(); 
  14.         mViewBitmap = null
  15.     } catch (Throwable throwable) { 
  16.         return throwable; 
  17.     } 
  18.  
  19.     return null
  20. @Override 
  21. protected void onPostExecute(@Nullable Throwable t) { 
  22.     if (mCropCallback != null) { 
  23.         if (t == null) { 
  24.             Uri uri = Uri.fromFile(new File(mImageOutputPath)); 
  25.             mCropCallback.onBitmapCropped(uri, cropOffsetX, cropOffsetY, mCroppedImageWidth, mCroppedImageHeight); 
  26.         } else { 
  27.             mCropCallback.onCropFailure(t); 
  28.         } 
  29.     } 

鴻蒙中沒有搭載類似安卓的AsyncTask類,所以uCrop_ohos修改了后臺任務(wù)的處理方案,首先將后臺任務(wù)的處理與回調(diào)合并寫在一個Runnable中,然后鴻蒙原生的多線程處理機(jī)制EventHandler搭配EventRunner新開一個線程用于處理這個Runnable,實(shí)現(xiàn)了圖片裁剪任務(wù)的異步處理。

  1. public void doInBackground(){                   
  2.     EventRunner eventRunner = EventRunner.create(); 
  3.     EventHandler handler = new EventHandler(eventRunner); 
  4.     handler.postTask(new Runnable() { 
  5.         @Override 
  6.         public void run() { 
  7.             if (mViewBitmap == null) { 
  8.                 Throwable t = new NullPointerException("ViewBitmap is null"); 
  9.                 mCropCallback.onCropFailure(t); 
  10.                 return
  11.             } else if (mViewBitmap.isReleased()) { 
  12.                 Throwable t = new NullPointerException("ViewBitmap is null"); 
  13.                 mCropCallback.onCropFailure(t); 
  14.                 return
  15.             } else if (mCurrentImageRect.isEmpty()) { 
  16.                 Throwable t = new NullPointerException("ViewBitmap is null"); 
  17.                 mCropCallback.onCropFailure(t); 
  18.                 return
  19.             } 
  20.             try { 
  21.                 crop(); 
  22.                 mViewBitmap = null
  23.             } catch (IOException e) { 
  24.                 e.printStackTrace(); 
  25.             } 
  26.         } 
  27.     }); 

項目貢獻(xiàn)人

吳圣垚 鄭森文 朱偉 陳美汝 王佳思

想了解更多內(nèi)容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)

https://harmonyos.51cto.com

 

責(zé)任編輯:jianghua 來源: 鴻蒙社區(qū)
相關(guān)推薦

2021-03-03 09:42:26

鴻蒙HarmonyOS圖片裁剪

2021-07-06 18:21:31

鴻蒙HarmonyOS應(yīng)用

2021-08-30 17:55:58

鴻蒙HarmonyOS應(yīng)用

2021-04-20 15:06:42

鴻蒙HarmonyOS應(yīng)用

2021-06-17 14:56:00

鴻蒙HarmonyOS應(yīng)用

2021-11-17 15:37:43

鴻蒙HarmonyOS應(yīng)用

2021-04-15 17:47:38

鴻蒙HarmonyOS應(yīng)用

2021-07-20 15:20:40

鴻蒙HarmonyOS應(yīng)用

2021-11-02 14:54:21

鴻蒙HarmonyOS應(yīng)用

2021-10-19 10:04:51

鴻蒙HarmonyOS應(yīng)用

2021-08-10 15:23:08

鴻蒙HarmonyOS應(yīng)用

2021-06-29 09:28:16

鴻蒙HarmonyOS應(yīng)用

2021-03-10 15:03:40

鴻蒙HarmonyOS應(yīng)用

2021-04-29 14:32:24

鴻蒙HarmonyOS應(yīng)用

2021-03-24 09:30:49

鴻蒙HarmonyOS應(yīng)用

2021-07-28 09:40:04

鴻蒙HarmonyOS應(yīng)用

2021-08-26 16:07:46

鴻蒙HarmonyOS應(yīng)用

2021-08-03 10:07:41

鴻蒙HarmonyOS應(yīng)用

2021-03-01 14:00:11

鴻蒙HarmonyOS應(yīng)用

2021-08-05 15:06:30

鴻蒙HarmonyOS應(yīng)用
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

狠狠人妻久久久久久综合麻豆| 波多野结衣办公室33分钟| 麻豆视频在线免费观看| 韩国av一区二区三区在线观看| 精品国内产的精品视频在线观看| 亚洲男人天堂2021| 爱啪视频在线观看视频免费| 久久久久久99久久久精品网站| 国产精品自拍视频| xxxxxx国产| 日韩中文字幕高清在线观看| 777午夜精品视频在线播放| 国产69精品久久久久久久| 国产片在线观看| 国产成都精品91一区二区三| 国产成人精品国内自产拍免费看| 美女福利视频在线观看| 要久久爱电视剧全集完整观看| 欧美日本乱大交xxxxx| 免费人成自慰网站| 日本在线观看www| 99久久er热在这里只有精品15| 国产精品一区久久久| 国产一级特黄aaa大片| 99久久精品网站| 亚洲精品中文字幕av| 激情成人在线观看| 国产精品无码久久久久| 亚洲一区二区三区在线看 | 五月亚洲婷婷| 精品视频在线看| 干日本少妇首页| 欧美极品少妇videossex| 国产精品福利一区二区三区| 精品综合久久| 蜜臀久久精品久久久久| 国产精品亚洲一区二区三区妖精 | 日韩电影在线观看一区二区| 欧美日韩福利| 久久天天躁狠狠躁夜夜躁| 黄色三级生活片| 秋霞蜜臀av久久电影网免费| 欧美mv日韩mv亚洲| 少妇愉情理伦片bd| 91视频亚洲| 欧美日韩一本到| 欧美午夜性生活| 免费观看一级欧美片| 午夜精品国产更新| 精品少妇在线视频| 免费在线国产视频| 一区二区三区波多野结衣在线观看| 亚洲视频sss| 成人网视频在线观看| 国产亚洲制服色| 欧美一区1区三区3区公司| 免费一级毛片在线观看| 26uuu国产一区二区三区| 久久riav二区三区| 青青草在线播放| 久久久午夜精品理论片中文字幕| 久久国产精品一区二区三区| 三级毛片在线免费看| 91在线porny国产在线看| 九九久久99| 免费人成在线观看网站| 欧美国产激情一区二区三区蜜月| 五月天婷亚洲天综合网鲁鲁鲁| 国产爆初菊在线观看免费视频网站 | 成人国产精品久久久久久亚洲| 在线视频 91| 精品一区二区三区视频| 亚洲在线一区二区| 欧美一级在线免费观看| 91女厕偷拍女厕偷拍高清| 欧美三级华人主播| 77777影视视频在线观看| 亚洲欧洲精品天堂一级| 国产成人生活片| 国产理论在线| 欧美亚洲国产一卡| 国产一级免费大片| 好吊妞国产欧美日韩免费观看网站 | 91精品国产三级| 大奶在线精品| 在线精品视频视频中文字幕| 国产天堂av在线| 亚洲人妖在线| 国产美女91呻吟求| 亚洲第一天堂影院| 国产亚洲综合av| 国产一二三四区在线观看| а√天堂资源官网在线资源| 色猫猫国产区一区二在线视频| 国产又黄又猛的视频| 风间由美一区二区av101| 亚洲小视频在线| 久久精品第一页| 久久久噜噜噜久久狠狠50岁| 成人性生交大片免费看视频直播| 少妇人妻一区二区| 国产精品妹子av| 国精产品一区一区三区视频| 素人啪啪色综合| 日韩av中文在线| 成人黄色短视频| 一本色道久久综合亚洲精品不卡| 国产精品老牛影院在线观看| 亚洲国产精品18久久久久久| 日本一区二区三区dvd视频在线| 国产青草视频在线观看| 高清av一区二区三区| 精品国产伦一区二区三区观看体验| 中文字幕成人动漫| 亚洲国产美女| 亚洲影院污污.| 91在线不卡| 欧美日韩国产综合视频在线观看中文| 欧美丝袜在线观看| 国产99久久精品一区二区300| 米奇精品一区二区三区在线观看| 亚洲黄网在线观看| 成人18精品视频| 成人性做爰片免费视频| 日韩视频网站在线观看| 日韩成人网免费视频| 国产女人18水真多毛片18精品 | 加勒比av中文字幕| 国产精品中文字幕亚洲欧美| 欧美激情按摩在线| 国产精品久久久久毛片| 日本一区二区免费在线| 日韩毛片在线免费看| 精品在线网站观看| 欧美激情一二区| av 一区二区三区| 国产精品久久久久久久久果冻传媒 | 91高清在线观看视频| 欧美性色综合网| 亚洲天堂视频一区| 国产精品老牛| 久久手机视频| 亚洲美女尤物影院| 日韩成人av在线播放| 国产小视频在线看| 国产成人精品亚洲午夜麻豆| 三级在线免费观看| 国产日韩在线观看视频| 久久视频在线播放| 国产人妖在线播放| 亚洲黄网站在线观看| 四虎1515hh.com| 亚洲欧美亚洲| 俄罗斯精品一区二区三区| 日本小视频在线免费观看| 日韩一区二区在线观看视频 | 色婷婷精品久久二区二区密| 伊人狠狠色j香婷婷综合| 不卡日韩av| 1024在线看片你懂得| 精品国产乱码久久久久久影片| 黄色一级片在线| 波多野结衣在线aⅴ中文字幕不卡| av日韩一区二区三区| 国产精品tv| 清纯唯美日韩制服另类| 电影在线高清| 91精品综合久久久久久| 久久精品第一页| 91女厕偷拍女厕偷拍高清| www日韩视频| 欧美xxxx中国| www.成人av.com| 无码小电影在线观看网站免费| 亚洲男人第一av网站| 五月激情丁香网| 亚洲免费大片在线观看| 制服丝袜在线第一页| 午夜亚洲性色福利视频| 亚洲美女网站18| 日韩中文字幕无砖| 欧美怡春院一区二区三区| av大片在线播放| 日韩一区二区三区观看| 天堂网av手机版| 国产精品国产三级国产普通话蜜臀 | 色综合久综合久久综合久鬼88| 深爱激情五月婷婷| 欧美中文字幕亚洲一区二区va在线 | aaa黄色大片| 久久一二三区| 日本xxx免费| 蜜桃a∨噜噜一区二区三区| 国产日韩精品在线播放| heyzo一区| 最近更新的2019中文字幕| 亚洲经典一区二区三区| 在线观看亚洲专区| 欧美人妻一区二区| 中文在线免费一区三区高中清不卡| 美女被艹视频网站| 天堂成人免费av电影一区| 毛片在线视频观看| 精品国产一区二区三区久久久樱花 | 欧美一级黄视频| 亚洲午夜精品网| 欧日韩不卡视频| 91网站在线播放| 黄色片免费网址| 日韩不卡一二三区| 国产精品久久中文字幕| 亚洲综合色站| 亚洲春色综合另类校园电影| 猫咪成人在线观看| 99精品在线直播| 在线欧美激情| 国产精品电影在线观看| 电影k8一区二区三区久久| 中文字幕日韩有码| 免费黄色在线视频网站| 日韩精品一区二区三区在线| 夜夜嗨av禁果av粉嫩avhd| 富二代精品短视频| 国产精品变态另类虐交| 18成人在线观看| 国产精品理论在线| 久久久久久黄色| 国产激情在线免费观看| 成人avav影音| 国产十八熟妇av成人一区| 国产一区二区精品久久91| 欧美性猛交久久久乱大交小说| 日韩天天综合| 欧美视频在线观看视频| 亚洲中无吗在线| 日本黄色播放器| 99久久.com| 一本一生久久a久久精品综合蜜| 妖精视频一区二区三区| 久久伦理网站| 少妇精品久久久一区二区| 九九九九精品| 日本欧美三级| 老司机精品福利在线观看| 牛牛视频精品一区二区不卡| 国产精品视频入口| 国产图片一区| 国产69精品久久久久9999apgf| 欧美三级一区| 不卡一区二区三区视频| 一区视频网站| 激情小说网站亚洲综合网| 波多野结衣在线一区二区 | 在线免费黄色网| 狠狠狠色丁香婷婷综合激情| 夜夜夜夜夜夜操| 国产一区二区剧情av在线| 欧美一级片在线免费观看| 国产成a人亚洲| 日韩av手机在线播放| 99在线热播精品免费| 插吧插吧综合网| 国产精品沙发午睡系列990531| 粉嫩精品久久99综合一区| 国产精品久久久久精k8| 青青青在线免费观看| 亚洲国产精品久久人人爱蜜臀 | 国产日韩高清一区二区三区在线| 亚洲国产精品久久久久婷蜜芽| 久久精品日韩欧美| mm131国产精品| 国产乱码精品一品二品| xxxxxx黄色| 国产精品日产欧美久久久久| 精品国产精品国产精品| 午夜日韩在线观看| 男人天堂视频网| 5月丁香婷婷综合| 粉嫩av一区二区夜夜嗨| 亚洲视频精品在线| 动漫一区在线| 91chinesevideo永久地址| 免费高清视频在线一区| 成人免费视频观看视频| 免费欧美激情| 亚洲区成人777777精品| 99精品国产99久久久久久福利| 91香蕉视频导航| 国产成人精品亚洲日本在线桃色| 国产美女免费无遮挡| 亚洲欧美偷拍另类a∨色屁股| 日韩少妇高潮抽搐| 精品视频全国免费看| 亚洲精品无码久久久| 一区二区三区国产视频| 丝袜美女在线观看| 国产精品白嫩美女在线观看| 欧洲大片精品免费永久看nba| 美女黄毛**国产精品啪啪| 亚洲精品一区二区在线看| 欧美爱爱视频免费看| 狠狠色丁香久久婷婷综合丁香| 狠狠人妻久久久久久综合蜜桃| 中文字幕亚洲精品在线观看| 亚洲天堂一区在线| 日韩写真欧美这视频| 国外av在线| 777精品视频| 欧美欧美在线| 午夜精品亚洲一区二区三区嫩草| 亚洲福利国产| 五月天婷婷在线观看视频| 久久久精品中文字幕麻豆发布| 国产在线一二区| 91.com视频| av国产在线观看| 欧美亚洲国产成人精品| 久久九九精品视频| 亚洲一区美女| 日韩—二三区免费观看av| 日本一卡二卡在线| 亚洲国产一区二区视频| 国产精品人人妻人人爽| 中文字幕欧美日韩精品| 日本美女一区| 久久精品aaaaaa毛片| 激情综合自拍| 男插女视频网站| 亚洲日本电影在线| 91精品国产乱码久久久久| 国产一区二区三区在线免费观看| 黄色在线免费观看网站| 国产亚洲一区二区三区在线播放| 欧美午夜电影在线观看| 国产xxxxhd| 亚洲欧美电影院| 国产女人爽到高潮a毛片| xx视频.9999.com| 日韩有码欧美| 中文字幕一区二区三区在线乱码 | www.四虎精品| 一区二区三区在线播放| 99在线观看免费| 九九久久精品一区| 日韩精品成人在线观看| 在线观看av的网址| 顶级嫩模精品视频在线看| 免费人成视频在线| 精品国产污污免费网站入口| 美女91在线| 精品国产一区二区三区四区vr| 亚洲精品韩国| 在线观看福利片| 欧美自拍丝袜亚洲| 九七电影韩国女主播在线观看| 成人有码在线播放| 国产综合自拍| 波多野结衣福利| 在线免费精品视频| 久cao在线| 国产高清精品一区| 亚洲在线日韩| 亚洲天堂岛国片| 91麻豆精品国产无毒不卡在线观看| 91小视频xxxx网站在线| 国产精品美女xx| 久久九九99| 大地资源高清在线视频观看| 欧美人狂配大交3d怪物一区| 成人在线免费看黄| 国产富婆一区二区三区 | 爱豆国产剧免费观看大全剧苏畅| 一区二区三区成人| 四虎影院在线播放| 国产九九精品视频| 欧美日韩视频| 精品无码人妻一区| 欧美日韩国产小视频在线观看| 羞羞视频在线观看免费| 久久精品美女| 激情综合亚洲精品| 91精品国产乱码在线观看| 国产一区二区美女视频| 视频精品国内| 日韩有码免费视频| 一区二区三区四区五区视频在线观看| 天堂av中文在线资源库| 国产这里只有精品| 亚洲第一毛片| 成年人网站在线观看视频| 亚洲电影免费观看| vam成人资源在线观看| 极品美女扒开粉嫩小泬| 国产精品短视频| 日韩精品福利| 亚洲专区国产精品| 久久伊人亚洲| 久久精品视频8| 色偷偷亚洲男人天堂| 欧美美女在线直播|