精品欧美一区二区三区在线观看 _久久久久国色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)

色综合五月天导航| 精品白丝av| 色拍拍在线精品视频8848| 欧美日韩一区在线播放| 国产精品免费av一区二区| 成人动漫视频| 色婷婷精品大视频在线蜜桃视频| 五月天国产一区| 国产乱人乱偷精品视频| 日韩精品欧美| 色天天综合久久久久综合片| 亚洲激情一区二区| 国产激情久久久久久熟女老人av| 国产精品久久久久久久免费观看| 日韩欧美中文一区| www.日本在线播放| www.av在线| 国产成人在线色| 久久久久国产精品免费网站| 手机毛片在线观看| 日韩高清在线观看一区二区| 一本大道av伊人久久综合| 干日本少妇视频| 精品推荐蜜桃传媒| 国产99精品国产| 国产精品美女在线观看| 久久久久久久伊人| 久久久久久久久久久久久久久久久久| 欧美日韩精品综合在线| 久久国产亚洲精品无码| 婷婷五月在线视频| 久久久欧美精品sm网站| 国产精品久久7| 99精品视频99| 欧美日韩日本国产亚洲在线 | 亚洲日韩欧美视频一区| 免费人成视频在线播放| 精品免费av在线| 激情成人中文字幕| 在线精品日韩| 99青草视频在线播放视| 久久久美女艺术照精彩视频福利播放| 欧美一性一乱一交一视频| 一级在线观看视频| 国产aⅴ精品一区二区三区久久| 日韩视频在线永久播放| 国产极品美女高潮无套久久久| 国产精品偷拍| 亚洲天堂a在线| 国产精品日韩高清| 亚洲国产精品视频在线| 国产馆精品极品| 91在线视频成人| 人人妻人人爽人人澡人人精品| 欧美成人有码| 欧美精品一区三区| 女性裸体视频网站| 99久久综合狠狠综合久久aⅴ| 日韩高清免费在线| 精品人妻一区二区三区免费| 日本亚洲欧洲无免费码在线| 疯狂欧美牲乱大交777| jizzjizz国产精品喷水| 菠萝蜜视频在线观看www入口| 亚洲综合一二区| 永久免费网站视频在线观看| 婷婷视频在线| 一区二区三区四区亚洲| 久久久无码中文字幕久...| 国产在线高清视频| 91免费看`日韩一区二区| 激情小说综合网| 男女网站在线观看| 欧美国产日韩亚洲一区| 四虎影院一区二区三区 | 日韩精品视频在线观看免费| 日韩 中文字幕| 亚洲国产最新| 亚洲视频在线播放| 亚洲毛片亚洲毛片亚洲毛片| 第一sis亚洲原创| 日韩亚洲成人av在线| 一区二区三区四区五区| 欧美日本一区二区视频在线观看 | 欧美黑人疯狂性受xxxxx野外| 一本一道波多野结衣一区二区| 黑森林精品导航| 亚洲综合资源| 亚洲成人av在线播放| 国产制服丝袜在线| 国产精品毛片久久久| 日韩国产精品一区| 免费成人深夜蜜桃视频| 黄色日韩在线| 国产福利成人在线| 99热这里只有精| 91网站最新网址| 欧美亚州在线观看| 亚洲视频tv| 亚洲成人中文在线| 无需播放器的av| 国产成人免费av一区二区午夜| 亚洲精品一区二区三区四区高清| 97人妻精品一区二区免费| 99久久.com| 88xx成人精品| 国产又粗又猛又爽又黄视频 | 91麻豆精品国产91久久久久久久久| 欧美69精品久久久久久不卡 | 国产精品一区二区无线| 乱一区二区三区在线播放| 婷婷在线视频观看| 一本到不卡精品视频在线观看| 国产黑丝在线视频| 国产一区二区三区探花| 欧美乱大交xxxxx另类电影| 久久精品国产亚洲av高清色欲| 日韩电影一区二区三区| 99久久精品久久久久久ai换脸| 国模吧精品人体gogo| 亚洲国产精品久久一线不卡| 国产一级片自拍| 国产精品中文字幕制服诱惑| 久久久国产精品一区| 国产视频1区2区| 成人av网站在线| 99视频精品全部免费看| 欧美爱爱视频| 亚洲三级 欧美三级| 欧美一级高潮片| 日韩电影一区二区三区四区| 狼狼综合久久久久综合网| 免费在线国产视频| 在线91免费看| 亚欧精品视频一区二区三区| 亚洲精品欧洲| 成人资源视频网站免费| 在线观看国产原创自拍视频| 午夜精品久久久久久久99水蜜桃| 久久久久亚洲av片无码v| 在线观看一区欧美| 麻豆系列在线观看| 亚洲成av人片| 野外做受又硬又粗又大视频√| 素人啪啪色综合| 精品久久久久99| 91精品国产高清一区二区三蜜臀| 精品在线免费观看| 欧美二区在线| 免费亚洲电影| 亚洲色图av在线| 国产成人在线观看网站| 9人人澡人人爽人人精品| 国产成年人在线观看| 宅男噜噜噜66国产精品免费| 国产亚洲欧美另类中文| 日韩黄色一级视频| 日本一区二区在线不卡| 国产精品视频分类| 日本欧美国产| 成人精品aaaa网站| 麻豆传媒在线观看| 欧美一区二区三区播放老司机| 手机av在线看| 国产福利精品导航| 国产成人在线小视频| 久久精品九色| 色综合久久久888| 刘亦菲毛片一区二区三区| 亚洲成人精品影院| 特级西西人体wwwww| 老司机精品导航| 亚洲高清在线观看一区| 精品国产鲁一鲁****| 久久久久女教师免费一区| 亚洲黄色在线观看视频| 亚洲国产欧美另类丝袜| 高潮毛片无遮挡| 亚洲免费婷婷| 一区一区视频| 日韩欧美久久| 欧美有码在线观看视频| 99视频在线观看地址| 日韩一区二区三区高清免费看看| 欧美成欧美va| 久久这里只有精品视频网| 久草福利视频在线| 欧美成人午夜| 成人91免费视频| 丝袜美腿一区| 欧美成人午夜视频| 精品三级久久久久久久电影聊斋| 欧美日韩亚洲高清一区二区| 久草免费新视频| 91丨porny丨首页| 日韩av.com| 国产精品亚洲综合色区韩国| 亚洲精品无人区| youjizz亚洲| 国产精品三级美女白浆呻吟| 美女精品导航| 色噜噜亚洲精品中文字幕| 欧美一区二区三区激情| 欧美三级中文字| 国产精品第56页| 国产精品成人在线观看| 在线观看国产免费视频| 久久国产精品99久久人人澡| 97视频久久久| 不卡视频在线| 精品亚洲一区二区三区四区五区高| 久草综合在线| 日韩av不卡电影| 色爱综合区网| 亚洲欧美日韩成人| 黑人操亚洲女人| 在线播放中文字幕一区| 黄色av一级片| 图片区日韩欧美亚洲| 久久日免费视频| 91亚洲精品一区二区乱码| 中国老熟女重囗味hdxx| 久久国产视频网| 激情网站五月天| 亚洲神马久久| a级片一区二区| 久久麻豆精品| 国产精品亚洲一区| www.成人在线视频| 国产成人一区二区三区电影| aa视频在线观看| 色综合久久久888| 国产免费av在线| 亚洲免费小视频| 先锋av资源站| 亚洲护士老师的毛茸茸最新章节| 国产av精国产传媒| 欧美一级欧美一级在线播放| 一级片在线观看视频| 一本一道波多野结衣一区二区| www.国产成人| 午夜精品一区二区三区免费视频| 亚洲一二三在线观看| 成人在线综合网| 国产欧美精品一二三| 激情另类小说区图片区视频区| 亚洲天堂av线| 久久国产精品免费| 国产精品久久久久久9999| 麻豆精品一二三| 亚洲午夜激情影院| 国产精品自在在线| 性高潮久久久久久| 国产传媒一区在线| 免费黄色av网址| 日韩精品欧美成人高清一区二区| 尤物av无码色av无码| 亚洲裸体俱乐部裸体舞表演av| 激情小视频网站| 亚洲巨乳在线| 成人在线免费观看网址| 中文字幕人成人乱码| 视频一区视频二区视频| 亚洲aa在线| 欧美日韩在线高清| 不卡一区2区| 亚洲天堂第一区| 激情视频一区| 欧美精品一区免费| 日本免费在线视频不卡一不卡二 | 成人在线视频免费看| 日韩av快播网址| 久久电影天堂| 91在线中文字幕| 狠狠久久伊人| 久久av免费一区| 日韩欧美不卡| 成人av在线播放观看| 影音先锋一区| 黄色av免费在线播放| 久久99蜜桃精品| 福利视频999| 97久久精品人人爽人人爽蜜臀| 少妇人妻好深好紧精品无码| 国产精品福利影院| 国产乡下妇女做爰毛片| 午夜伦理一区二区| 日批视频免费观看| 91精品国产91热久久久做人人| 国产乱码精品一区二区| 亚洲电影免费观看高清| 幼a在线观看| 91wwwcom在线观看| 欧美亚洲二区| 久久av一区二区| 亚洲国产精品成人| 免费观看国产精品视频| 日韩精品福利网| 苍井空张开腿实干12次| 91美女片黄在线| 极品盗摄国产盗摄合集| 粉嫩av一区二区三区免费野| 国产精品久久久久久久久毛片| 亚洲精品一区二区三区影院 | 国产精品国产三级国产普通话99 | 欧美激情精品久久久六区热门| 男人天堂999| 国产高清在线观看免费不卡| 艳妇乳肉亭妇荡乳av| 亚洲色图视频网| www.国产高清| 欧美无人高清视频在线观看| 日本毛片在线观看| 不用播放器成人网| 日本一区二区三区视频在线| 成人国产精品一区二区| 国产精品超碰| 一区不卡视频| 视频一区在线视频| av在线网站免费观看| 欧美国产在线观看| 国产尤物在线视频| 欧美人伦禁忌dvd放荡欲情| 亚洲av片一区二区三区| 日韩在线视频免费观看高清中文| 久久毛片亚洲| 国产精品久久久久av福利动漫| 天天综合久久| gogogo高清免费观看在线视频| 成人美女视频在线观看| 中文字幕av免费在线观看| 欧美高清一级片在线| eeuss影院www在线播放| 欧美一性一乱一交一视频| 男人的天堂久久| 欧美精品一区二区性色a+v| 美国三级日本三级久久99 | 亚洲卡通动漫在线| 97人妻精品一区二区三区| 这里只有精品在线观看| 日韩欧美一区二区三区免费观看 | 亚洲制服丝袜在线播放| 一区二区三区欧美亚洲| 国产理论视频在线观看| 久久久精品一区| 国产91欧美| 一级日韩一区在线观看| 极品少妇xxxx偷拍精品少妇| gv天堂gv无码男同在线观看| 欧美无砖专区一中文字| 麻豆网站在线| 91在线视频精品| 欧美另类专区| 在线成人免费av| 亚洲卡通动漫在线| 日本人妻丰满熟妇久久久久久| 国产+人+亚洲| 天堂成人娱乐在线视频免费播放网站| 美女黄色免费看| 99久久精品一区| 亚洲精品中文字幕乱码三区91| 欧美精品一区二区三| 色偷偷色偷偷色偷偷在线视频| 狠狠色综合色区| 天堂成人国产精品一区| 毛片aaaaaa| 欧美日韩一区二区免费视频| 国产一级二级三级在线观看| 国产精品久久久久久av| 日韩一区电影| 91性高潮久久久久久久| 亚洲成精国产精品女| 黄色的视频在线免费观看| 国产精品色悠悠| 欧美日韩1区| 无码人妻精品一区二区三区温州 | 国产黄色片网站| 7777精品久久久久久| 极品美女一区二区三区| 成人免费在线小视频| 国产日韩欧美不卡在线| 国产三级漂亮女教师| 国内自拍欧美激情| 五月激激激综合网色播| 久草综合在线观看| 亚洲精品视频免费看| www.com欧美| 热久久免费视频精品| 日韩中文在线电影| 人妻 丝袜美腿 中文字幕| 亚洲日本va午夜在线影院| 天天操天天操天天干| 热久久美女精品天天吊色| 成人av二区| 亚洲国产欧美91| 色综合久久中文字幕综合网| 超碰人人在线| 蜜桃视频在线观看91| 国产一区二区三区在线看麻豆| 日韩免费不卡视频|