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

鴻蒙開源第三方組件—自定義流式布局組件FlowLayout_ohos

系統(tǒng)
本文基于安卓平臺(tái)的自定義流式布局組件FlowLayout,實(shí)現(xiàn)了鴻蒙的功能化遷移和重構(gòu)。代碼已經(jīng)開源到(https://gitee.com/isrc_ohos/flow-layout_ohos),歡迎各位開發(fā)者下載使用并提出寶貴意見(jiàn)!

[[413476]]

想了解更多內(nèi)容,請(qǐng)?jiān)L問(wèn):

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

https://harmonyos.51cto.com

前言

基于安卓平臺(tái)的自定義流式布局組件FlowLayout,實(shí)現(xiàn)了鴻蒙的功能化遷移和重構(gòu)。代碼已經(jīng)開源到(https://gitee.com/isrc_ohos/flow-layout_ohos),歡迎各位開發(fā)者下載使用并提出寶貴意見(jiàn)!

背景

流式布局也叫百分比布局,它具有指定的對(duì)齊方式、水平間隙和垂直間隙,特別適用于多標(biāo)簽的展示,可以實(shí)現(xiàn)組件中的標(biāo)簽橫向?qū)R,也可以在多個(gè)標(biāo)簽的總寬度超過(guò)組件寬度時(shí)自動(dòng)換行,是移動(dòng)端開發(fā)中經(jīng)常使用的布局方式之一。我們可以在很多應(yīng)用場(chǎng)景下看到流式布局的使用,比如商品分類展示,搜索記錄展示等。

組件效果展示

該組件應(yīng)用只包含一個(gè)顯示頁(yè)面。為了呈現(xiàn)出流式布局的效果,我們?cè)陧?yè)面布局中添加了多個(gè)標(biāo)簽,如“java”、“kotlin”、“ohos”、“Deveco-studio”、“app”等作為布局中的子組件。具體顯示效果如圖1所示。

鴻蒙開源第三方組件——自定義流式布局組件FlowLayout_ohos-鴻蒙HarmonyOS技術(shù)社區(qū)

圖1 組件效果展示

Sample解析

FlowLayout_ohos在Library中已經(jīng)封裝了組件的主要功能,往FlowLayout_ohos組件中放入標(biāo)簽會(huì)自動(dòng)橫向?qū)R并且在多個(gè)標(biāo)簽的總寬度超過(guò)組件寬度時(shí)自動(dòng)換行,因此在Sample中我們只需要添加標(biāo)簽內(nèi)容并使用流式布局將標(biāo)簽內(nèi)容進(jìn)行顯示即可。

在標(biāo)簽顯示的過(guò)程中,我們可以調(diào)用一些Library暴露的接口來(lái)對(duì)子組件的顯示特征進(jìn)行設(shè)置,比如組件最多顯示的行數(shù)等。下面將具體講解FlowLayout_ohos組件的使用方法,共分為5個(gè)步驟:

步驟1. 導(dǎo)入相關(guān)類

步驟2. 初始化流式布局和數(shù)據(jù)容器

步驟3. 添加標(biāo)簽內(nèi)容到數(shù)據(jù)容器

步驟4. 將標(biāo)簽內(nèi)容添加進(jìn)布局

步驟5. 相關(guān)特征設(shè)置

接下來(lái)我們來(lái)看一下每一個(gè)步驟涉及的詳細(xì)操作。

(1)導(dǎo)入相關(guān)類

在MainAbilitySlice文件中,通過(guò)import關(guān)鍵字導(dǎo)入FlowAdapter類和FlowLayout類。FlowLayout類用于組件的顯示,F(xiàn)lowAdapter類用于向組件設(shè)置標(biāo)簽。

  1. import com.huawei.mylibrary.FlowAdapter; 
  2. import com.huawei.mylibrary.FlowLayout; 

 (2)初始化流式布局和數(shù)據(jù)容器

實(shí)例化FlowLayout類的對(duì)象mFlowLayout ,然后創(chuàng)建元素為String類型的列表mContentList作為添加標(biāo)簽的容器,以下我們稱之為數(shù)據(jù)容器。

  1. private FlowLayout mFlowLayout; 
  2. private List<String> mContentList = new ArrayList<>(); 
  3. @Override  
  4. public void onStart(Intent intent) { 
  5.       ......  
  6.       mFlowLayout = new FlowLayout(this); 

(3)添加標(biāo)簽內(nèi)容到數(shù)據(jù)容器

通過(guò)add()方法向數(shù)據(jù)容器mContentList中添加想要展示的標(biāo)簽,5個(gè)不同的標(biāo)簽通過(guò)for循環(huán)循環(huán)四次逐個(gè)放入容器,共形成20個(gè)需要在頁(yè)面展示的標(biāo)簽。

  1. for (int i = 0; i < 4; i++) { 
  2.       mContentList.add("java"); 
  3.       mContentList.add("kotlin"); 
  4.       mContentList.add("ohos"); 
  5.       mContentList.add("Deveco-studio"); 
  6.       mContentList.add("app");   

(4)將標(biāo)簽內(nèi)容添加進(jìn)布局

實(shí)例化FlowAdapter類的對(duì)象adapter,并將數(shù)據(jù)容器mContentList作為FlowAdapter類構(gòu)造方法的參數(shù)。后通過(guò)setAdapter()方法將標(biāo)簽內(nèi)容添加到組件中。

  1. // 設(shè)置 Adapter 
  2. FlowAdapter adapter = new FlowAdapter(this, mContentList); 
  3. // 將標(biāo)簽內(nèi)容添加到組件中 
  4. mFlowLayout.setAdapter(adapter); 

(5) 將標(biāo)簽內(nèi)容添加到組件中

  1. mFlowLayout.setAdapter(adapter); 

(6)相關(guān)特征設(shè)置

mFlowLayout可以調(diào)用一些Library暴露的接口實(shí)現(xiàn)流式布局的特征設(shè)置,這里我們?cè)O(shè)置了組件布局內(nèi)最多顯示的行數(shù)。

  1. // 設(shè)置最多顯示的行數(shù) 
  2. mFlowLayout.setMaxLines(9); 

Library解析

流式布局應(yīng)用非常廣泛,但鴻蒙官方卻并未給出相應(yīng)的布局方式,因此流式布局只能自定義實(shí)現(xiàn),本節(jié)主要介紹自定義布局的步驟。

想要實(shí)現(xiàn)自定義布局,需要完成以下三個(gè)步驟:1)流式布局的FlowLayout類需要繼承ComponentContainer類,并添加構(gòu)造方法。2) 實(shí)現(xiàn)ComponentContainer.EstimateSizeListener接口,重寫onEstimateSize()方法,用于確定FlowLayout_ohos組件寬高。3)實(shí)現(xiàn)Component.LayoutRefreshedListener接口,重寫onRefreshed()方法用來(lái)排列子組件并確定子組件位置。1)步驟的操作較為簡(jiǎn)單,此處不再贅述,本節(jié)主要描述2)、3)步驟的原理。

(1)重寫onEstimateSize方法

根據(jù)onEstimateSize(int widthMeasureSpec, int heightMeasureSpec)方法傳入的參數(shù),選擇測(cè)量組件寬度和高度的方式,并得到組件寬度和高度的具體值,通過(guò)setEstimatedSize()方法設(shè)置給組件。下面介紹具體的步驟:

1、得到組件的測(cè)量模式和父組件的寬度、高度

  • 調(diào)用EstimateSpec.getMode(widthMeasureSpec)方法,傳入widthMeasureSpec參數(shù),得到組件寬度的測(cè)量模式。
  • 調(diào)用EstimateSpec.getMode(heightMeasureSpec)方法,傳入heightMeasureSpec參數(shù),得到組件高度的測(cè)量模式。
  • 調(diào)用EstimateSpec.getSize(widthMeasureSpec)方法,傳入widthMeasureSpec參數(shù),得到父組件的寬度。
  • 調(diào)用EstimateSpec.getSize(heightMeasureSpec)方法,傳入heightMeasureSpec參數(shù),得到父組件的高度。
  1. int widthSize = EstimateSpec.getSize(widthMeasureSpec);//父組件的寬度 
  2. int widthMode = EstimateSpec.getMode(widthMeasureSpec); //組件寬度的測(cè)量模式 
  3. int heightSize =EstimateSpec.getSize(heightMeasureSpec);//父組件的高度 
  4. int heightMode = EstimateSpec.getMode(heightMeasureSpec);//組件高度的測(cè)量模式 

2、確定組件寬度和高度的具體值

widthMode /heightMode 可能存在兩種不同的模式,在不同的模式下組件的寬度和高度的值也會(huì)有不同的計(jì)算方式。

  • PRECISE 模式:在這種模式下,組件設(shè)置其寬、高為MATCH_PARENT。
  • NOT_EXCEED 模式:在這種模式下,組件設(shè)置其寬、高為MATCH_CONTENT 。

在PRECISE 模式下,組件的寬度和高度與父組件一致,這種計(jì)算方式較為簡(jiǎn)單。但是在NOT_EXCEED 模式下,組件的寬度和高度是根據(jù)子組件的寬度和高度來(lái)決定的,此時(shí)需要遍歷各子組件,對(duì)每個(gè)子組件進(jìn)行測(cè)量,并在寬度和高度上求和,才能計(jì)算出最終的組件的寬高。子組件的遍歷過(guò)程是通過(guò)helper()方法來(lái)實(shí)現(xiàn)的。

  1. int[] a = helper(widthSize);  
  2. int measuredHeight = 0;   //組件的高度值 
  3. if (heightMode == EstimateSpec.PRECISE) {  // PRECISE 模式 
  4.     measuredHeight = heightSize; 
  5. else if (heightMode == EstimateSpec.NOT_EXCEED) {  // NOT_EXCEED 模式 
  6.     measuredHeight = a[0]; //遍歷各子組件后得到的組件高度 
  7. int measuredWidth = 0;   //組件的寬度值 
  8. if (widthMode == EstimateSpec.PRECISE) {        // PRECISE 模式 
  9.     measuredWidth = widthSize;    
  10. }else if (widthMode == EstimateSpec.NOT_EXCEED) { // NOT_EXCEED 模式 
  11.     measuredWidth = a[1];  //遍歷各子組件后得到的組件寬度 

3、將測(cè)量得到的高度和寬度值設(shè)置給組件。

通過(guò)setEstimatedSize()方法,將步驟2中得到的組件寬度和高度值設(shè)置給組件。

  1. setEstimatedSize(measuredWidth, measuredHeight); 

(2)重寫onRefreshed方法

onRefreshed()方法主要用來(lái)確定子組件的擺放位置。該位置在helper()方法中已經(jīng)得到,并保存在mChildrenPositionList中。mChildrenPositionList是一個(gè)元素類型為Rect的列表,每一個(gè)元素代表一個(gè)子組件的位置信息。因此,在確定子組件的擺放位置時(shí),只需要調(diào)用mChildrenPositionList中的元素信息,并將其賦給各子組件即可。

  1. @Override 
  2. public void onRefreshed(Component component) { 
  3.             int n = Math.min(getChildCount(), mChildrenPositionList.size()); 
  4.             for (int i = 0; i < n; i++) { 
  5.                 Component child = getComponentAt(i);  //獲取各組件 
  6.                 Rect rect = mChildrenPositionList.get(i); //組件信息 
  7.                 child.setLeft(rect.left);  //組件位置設(shè)置 
  8.                 child.setRight(rect.right); 
  9.                 child.setBottom(rect.bottom); 
  10.                 child.setTop( rect.top); 
  11.             } 
  12.             mVisibleItemCount = n; 
  13.     } 

(3)helper()方法

helper()方法是一個(gè)“工具”方法,在onEstimateSize()和onRefreshed()的重寫中都提供了“幫助”。helper()方法對(duì)外提供的功能,主要為以下三個(gè)方面:

1)在組件的布局方式為MATCH_CONTENT情況下,遍歷各子組件,對(duì)每個(gè)子組件的寬度和高度進(jìn)行測(cè)量,并在寬度和高度上求和,計(jì)算出最終組件的寬度和高度。

2)判斷換行條件,實(shí)現(xiàn)流動(dòng)布局的效果。

3)保存子組件的位置信息。

下面我們將圍繞上述內(nèi)容展開講解。

1)計(jì)算組件寬度和高度

  • 組件的寬度

組件的寬度取決于子組件的排布是否存在換行的情況,若是子組件排布存在換行的情況,組件寬度等于父組件的寬度。若是子組件排布不存在換行的情況,組件寬度等于當(dāng)前行的寬度。代碼中isOneRow表示是否存在換行的情況,width 表示當(dāng)前行的寬度,widthSize表示父組件的寬度,各變量的示意如圖2所示。

鴻蒙開源第三方組件——自定義流式布局組件FlowLayout_ohos-鴻蒙HarmonyOS技術(shù)社區(qū)

圖2 代碼變量示意圖

  1. int childWidth =  child.getMarginLeft() + child.getEstimatedWidth() + child.getMarginRight(); //每個(gè)子組件的寬度 
  2. width += childWidth;  //每行的寬度 
  3. ... 
  4. res[1] = isOneRow? width + getPaddingRight() : widthSize; //組件的寬度 
  • 組件的高度

組件的高度是每一行子組件高度的總和,而每一行的高度則是取該行中所有子組件中最高的值。

  1. int childHeight =child.getMarginTop() + child.getEstimatedHeight() + child.getMarginBottom(); 
  2. maxHeight = Math.max(maxHeight, childHeight); //取最大值 
  3. ... 
  4. res[0] = height + maxHeight + getPaddingBottom(); //組件的高度  

2)判斷換行條件

從效果圖中可以看到,F(xiàn)lowLayout_ohos組件的布局是一行行的,如果當(dāng)前行的剩余寬度已經(jīng)放不了下一個(gè)子組件,那就把這個(gè)子組件移到下一行顯示。

所以我們需要計(jì)算當(dāng)前行已經(jīng)占據(jù)的寬度加上下一個(gè)子組件的寬度是否超過(guò)組件的最大寬度,以判斷下一個(gè)子組件是否需要換行顯示。

  1. if (width + childWidth + getPaddingRight() > widthSize) { //需要換行 
  2.    height += maxHeight; // 增加一行的高度 
  3.     width = getPaddingLeft(); // 獲取新一行已經(jīng)占據(jù)的寬度 
  4.     maxHeight = childHeight;  
  5.    isOneRow = false
  6.    currLine++;  //行數(shù)+1 
  7.     if (currLine > mMaxLines) {  //超過(guò)設(shè)定的最大顯示行數(shù),退出 
  8.         break; 
  9.    } 

3)保存子組件的位置信息

根據(jù)當(dāng)前已有的寬高,確定子組件的位置,并將位置信息作為參數(shù)傳入Rect 類實(shí)例化對(duì)象的過(guò)程中,用Rect 類對(duì)象標(biāo)識(shí)子組件的位置信息,并將這些信息逐個(gè)放入List中,在onRefreshed()方法中被使用到。

  1. Rect rect = new Rect(width +child.getMarginLeft(), 
  2.         height + child.getMarginTop(), 
  3.         width + childWidth - child.getMarginRight(), 
  4.         height + childHeight - child.getMarginBottom()); 
  5. mChildrenPositionList.add(rect); 

想了解更多內(nèi)容,請(qǐng)?jiān)L問(wèn):

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

https://harmonyos.51cto.com

 

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

2021-06-17 14:56:00

鴻蒙HarmonyOS應(yīng)用

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-04-08 14:57:52

鴻蒙HarmonyOS應(yīng)用

2021-11-17 15:37:43

鴻蒙HarmonyOS應(yīng)用

2021-07-20 15:20:40

鴻蒙HarmonyOS應(yīng)用

2021-04-15 17:47:38

鴻蒙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-03-03 09:42:26

鴻蒙HarmonyOS圖片裁剪

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ù)棧公眾號(hào)

天天操天天操天天操| 欧美成人综合色| 国产麻豆一区| 亚洲狠狠丁香婷婷综合久久久| 高清不卡一区二区三区| 无码视频一区二区三区| 久久精品久久久| 亚洲国产精品网站| 欧美wwwwwww| av午夜在线观看| 日本一区二区三区四区| 国产精品久久7| 中文字幕你懂的| 99精品热视频只有精品10| 最近2019年日本中文免费字幕| 蜜臀aⅴ国产精品久久久国产老师| 成人午夜精品| 亚洲动漫第一页| 天堂资源在线亚洲资源| 好男人www在线视频| 人人爽香蕉精品| 91高清视频在线免费观看| 欧美特黄一级片| 国产精品最新| 亚洲精品白浆高清久久久久久| 手机免费av片| 日韩三区在线| 精品国产91久久久久久老师| 免费看污污视频| 中文日本在线观看| 国产亚洲欧美日韩日本| 精品久久蜜桃| 成人精品在线播放| 国产毛片精品视频| 国产精品一二区| 色老头在线视频| 亚洲影视在线| 国产91成人在在线播放| 免费在线一级片| 欧美成人有码| 日韩在线不卡视频| 刘亦菲国产毛片bd| 国产aⅴ精品一区二区三区久久| 亚洲成人av片| 不卡的一区二区| 日韩不卡在线视频| 91精品国产色综合久久不卡电影 | 91精品网站| 国产又爽又黄免费软件| 热久久免费视频| 国产精品激情av电影在线观看| 天天做天天爱夜夜爽| 一区二区三区国产在线| 91国产美女视频| 91精品国产乱码久久久张津瑜| 亚洲国产导航| 激情欧美一区| 国产亚洲精品久久久久动| 91精品人妻一区二区| 色婷婷综合久久久久久| 国产视频在线观看一区二区| 熟女人妻在线视频| 自拍视频一区| 在线观看国产精品淫| 欧美三级视频网站| 日本一区二区高清不卡| 日韩色av导航| 欧美日韩一级大片| 亚洲激情婷婷| 日韩av片永久免费网站| 国产一卡二卡三卡| 麻豆精品新av中文字幕| 成人免费视频在线观看超级碰| 国产美女明星三级做爰| 国产99久久精品| 国产一区福利视频| 日本精品专区| 国产精品久久三区| 日韩免费在线观看av| 国产美女高潮在线| 色94色欧美sute亚洲线路二| 久久人人爽av| 亚洲图色一区二区三区| 亚洲精品成人久久久| 亚洲精品视频久久久| 日韩av密桃| 久久99久久99精品中文字幕| 午夜精品久久久久久久久久久久久蜜桃| 麻豆精品91| 91在线视频九色| 天堂成人在线视频| 亚洲国产激情av| 91免费国产精品| 神马久久资源| 欧美v亚洲v综合ⅴ国产v| 玖玖爱在线观看| 青青青免费在线视频| 久久福利精品| 欧美诱惑福利视频| 国产又大又黄又爽| 91丨九色porny丨蝌蚪| 一本一本久久a久久精品综合妖精| 91亚洲天堂| 一本色道久久综合精品竹菊| 91性高潮久久久久久久| 啄木系列成人av电影| 欧美大学生性色视频| 无码人妻丰满熟妇奶水区码| 国产成人av一区二区三区在线| 日韩wuma| av最新在线| 欧美精品一卡二卡| 国产三级视频网站| 午夜性色一区二区三区免费视频| 欧美亚洲成人精品| 朝桐光av在线一区二区三区| 国产女同互慰高潮91漫画| 97超碰在线人人| 激情中国色综合| 亚洲欧美日韩高清| 国产精品18p| 国产九九视频一区二区三区| 天堂一区二区三区 | 国产精品成熟老女人| 亚洲精品字幕在线| 日韩毛片视频在线看| 999精品网站| 日韩动漫一区| 国模极品一区二区三区| 国产精品日韩无码| 国产亚洲欧美一级| 国产精品无码av无码| 女人抽搐喷水高潮国产精品| 欧美激情网友自拍| 国产欧美一级片| 亚洲天堂成人在线观看| 国产一级片自拍| 欧美电影《睫毛膏》| 国产欧美日韩中文| www视频在线观看免费| 91精品福利在线| 亚洲AV无码国产成人久久| av不卡在线看| 欧美极品一区| 美女福利一区二区| 亚洲天堂成人在线| 无码任你躁久久久久久久| 久久精品亚洲麻豆av一区二区 | 日韩三区在线观看| 亚洲色偷偷综合亚洲av伊人| 久久91精品久久久久久秒播| 一区二区精品在线| 日本午夜免费一区二区| www.美女亚洲精品| 国产又大又长又粗| 亚洲精品中文字幕乱码三区| 最好看的中文字幕| 影音国产精品| 麻豆精品视频| 69堂免费精品视频在线播放| 中文字幕精品网| 国产又粗又大又爽| 亚洲老司机在线| 国产性生活毛片| 老**午夜毛片一区二区三区| 天堂精品视频| 色播一区二区| 午夜欧美大片免费观看| 精品久久av| 欧美精品三级日韩久久| 久久精品www人人爽人人| 成人精品视频.| 免费在线激情视频| 日韩欧美精品综合| 91在线免费看片| 理论不卡电影大全神| 一区二区欧美在线| 国产成人三级一区二区在线观看一| 亚洲最大色网站| 中文字幕丰满孑伦无码专区| 免费av成人在线| 免费看欧美一级片| 国产真实有声精品录音| 91亚洲va在线va天堂va国 | 国产第一区电影| 米奇777四色精品人人爽| 精品国免费一区二区三区| 黄色片免费观看视频| 中文字幕乱码亚洲精品一区| 秋霞午夜鲁丝一区二区| 欧美综合国产| 91精品国产毛片武则天| 国产欧美日韩视频在线| 91入口在线观看| 老司机成人影院| 欧美激情欧美激情| 国产二区视频在线观看| 精品成人免费观看| 97人妻精品视频一区| 一区二区理论电影在线观看| 国产人妻大战黑人20p| 国产精品小仙女| 熟女少妇精品一区二区| 伊人久久大香线蕉av超碰演员| 亚洲成人自拍| 久久综合社区| 91情侣偷在线精品国产| 日韩欧美精品电影| 国内外成人免费激情在线视频网站 | 久久青草久久| 99热这里只有精品免费| 精品国产aⅴ| 激情视频一区二区| 精品一区二区三区中文字幕视频| 日韩av色综合| 福利在线导航136| 久久久av一区| 亚洲乱亚洲乱妇| 亚洲视频精品在线| 人妻少妇一区二区三区| 日韩欧美久久一区| 在线免费观看日韩视频| 日韩欧美在线字幕| 一级免费在线观看| 一区二区不卡在线播放| 亚洲不卡的av| 中文字幕av资源一区| 蜜桃精品一区二区| www亚洲一区| 免费中文字幕av| av电影在线观看不卡| 特级特黄刘亦菲aaa级| 国产麻豆日韩欧美久久| 性猛交ⅹ×××乱大交| 免费在线欧美视频| 亚洲国产精品毛片av不卡在线| 99re国产精品| 97视频久久久| 亚洲第一精品影视| 国产一线二线三线女| 欧美三级第一页| 狠狠噜天天噜日日噜| 中文字幕日韩一区二区不卡 | 狠色狠色综合久久| 天天做天天爱天天高潮| 国产精品成人a在线观看| 自拍偷拍99| 91精品国产乱码久久久久久 | 亚洲综合国产精品| 日韩高清在线观看一区二区| 亚洲a成v人在线观看| 精品久久亚洲| wwwxx欧美| 欧美大胆视频| 欧美日韩一区二区视频在线 | 懂色aⅴ精品一区二区三区| 国产精品对白刺激| 久久福利在线| 成人在线小视频| 视频一区日韩精品| 国产中文一区二区| 蜜臀av免费一区二区三区| 日本一区二区精品| 国产国产精品| 国产精品视频网站在线观看| 99亚洲一区二区| 99久久久无码国产精品6| 日本在线不卡视频| 中文字幕第66页| 成人动漫视频在线| 四虎永久免费在线观看| 中文在线一区二区 | 欧洲视频在线免费观看| 国产性猛交xxxx免费看久久| 日本视频在线免费观看| 欧美国产日产韩国视频| 亚洲女同志freevdieo| 国产欧美在线视频| 综合久久成人| 日本精品一区| 中文字幕一区二区三区在线视频| 免费拍拍拍网站| 老司机午夜精品视频| xxww在线观看| 成+人+亚洲+综合天堂| 中文字幕网站在线观看| 亚洲另类在线视频| 丁香社区五月天| 日韩欧美国产一区二区三区| 欧美日韩在线中文字幕| 久久久精品久久久久| 老牛影视精品| 亚洲精品欧美日韩专区| 一本久久青青| 国产一级大片免费看| 天堂一区二区在线| av影片在线播放| 中文字幕国产精品一区二区| 亚洲国产综合久久| 在线不卡中文字幕| 你懂的视频在线观看| 欧美激情性做爰免费视频| 久久久成人av毛片免费观看| 国产伦精品一区二区| 日韩在线欧美| 久久精品.com| 高清视频一区二区| 天天爽天天爽天天爽| 欧美性生交xxxxxdddd| 精品国产无码一区二区三区| 国产一区二区三区久久精品| 国产网站在线| 91精品国产91久久久久青草| 成人vr资源| 黄色大片在线免费看| 国产精品伊人色| 一级片黄色录像| 色吊一区二区三区| 手机在线观看毛片| 欧美激情xxxx| 欧美精品三级在线| 在线视频福利一区| 日韩av成人高清| 9.1成人看片免费版| 午夜亚洲国产au精品一区二区| av网站免费大全| www国产精品com| 久久久成人av毛片免费观看| 欧美日韩视频在线一区二区观看视频| 欧美.www| 日本人dh亚洲人ⅹxx| 《视频一区视频二区| 在线不卡免费视频| 中文欧美在线视频| 成人做爰免费视频免费看| 欧美精品中文字幕一区二区| 亚洲专区一区| theav精尽人亡av| 欧美午夜精品久久久久久人妖| 日本美女一级视频| 国外成人在线视频| 久久狠狠久久| 日韩少妇内射免费播放| aaa国产一区| 日韩精品在线观看免费| 亚洲精品国产精品国自产观看浪潮| a在线视频v视频| 久久久久网址| 久久综合激情| 极品蜜桃臀肥臀-x88av| 欧美午夜精品一区二区蜜桃| 在线免费观看黄| 成人写真视频福利网| 欧美a级片网站| 国产精品一区二区欧美| 四虎视频在线精品免费网址| 正在播放精油久久| 国产一区二区免费视频| 欧美成人免费看| 精品国产一区二区三区忘忧草 | 人妻一区二区三区四区| 久久久久久这里只有精品| 美女av一区| 日本xxxxxxx免费视频| 日本一区免费视频| 国产精品无码一区二区桃花视频| 欧美成人手机在线| 国产精品自在| aaa毛片在线观看| 国产片一区二区| 国产日韩欧美中文字幕| 欧美黑人xxxx| 视频国产一区| 国产精品久久久久久久av福利| 一区二区三区高清| 日本一区视频| 成人免费午夜电影| 亚洲国产精品一区制服丝袜| 国产精品密蕾丝袜| 欧美一区二区三区四区高清| 国产精品25p| 亚洲精品成人久久久998| 国产福利一区二区三区视频| 久久青青草视频| 久久精品最新地址| 女仆av观看一区| 中文字幕成人免费视频| 欧美日韩国产色| 日本中文字幕在线视频| 国内精品久久国产| 韩国欧美国产一区| 成人毛片18女人毛片| 久久综合伊人77777尤物| 欧美变态网站| √天堂资源在线| 色先锋aa成人| 免费污视频在线观看| 亚洲不卡一卡2卡三卡4卡5卡精品| 国产自产视频一区二区三区| 在线观看日本网站|