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

從自定義ViewGroup看Layout作用

開發(fā) 前端
關(guān)于layout,很多朋友知道它是負(fù)責(zé)布局的,那么具體是怎么布局的?viewGroup和view的layout方法又有什么不同?一起來看看吧。

[[400334]]

我回來了

這次感冒可耽誤我太多時(shí)間了,中間斷斷續(xù)續(xù)去了幾趟醫(yī)院和診所,終于差不多好了,于是心里又暗暗下定決定,一定要好好養(yǎng)身體(可能過兩天又忘了??)

總之大家也都多注意身體吧,身體垮了啥也干不了。

廢話不多說,開始今天的Android之旅~

前言

上次我們說到View的Mearsure流程,今天接著說說layout。

關(guān)于layout,很多朋友知道它是負(fù)責(zé)布局的,那么具體是怎么布局的?viewGroup和view的layout方法又有什么不同?一起來看看吧。

View layout方法

首先,還是從ViewRootImpl說起,界面的繪制會(huì)觸發(fā)performMeasure、performLayout方法,而在performLayout方法中就會(huì)調(diào)用mView的layout方法開始一層層View的布局工作。

  1. private void performLayout(WindowManager.LayoutParams lp, int desiredWindowWidth, 
  2.            int desiredWindowHeight) { 
  3.         
  4.        final View host = mView; 
  5.        host.layout(0, 0, host.getMeasuredWidth(), host.getMeasuredHeight()); 
  6.    } 

mView我們都知道了,就是頂層View——DecorView,那么就進(jìn)去看看DecorView的layout方法:

不好意思,DecorView中并沒有l(wèi)ayout方法...

所以,我們直接看看View的layout方法:

  1. public void layout(int l, int t, int r, int b) { 
  2.  
  3.        boolean changed = isLayoutModeOptical(mParent) ? 
  4.                setOpticalFrame(l, t, r, b) : setFrame(l, t, r, b); 
  5.  
  6.        if (changed || (mPrivateFlags & PFLAG_LAYOUT_REQUIRED) == PFLAG_LAYOUT_REQUIRED) { 
  7.            onLayout(changed, l, t, r, b); 
  8.        } 
  9.    } 
  10.  
  11.    protected void onLayout(boolean changed, int leftint topint rightint bottom) { 
  12.    } 
  • 首先,方法傳入了四個(gè)參數(shù),分別代表view的左、上、下、右四個(gè)值。
  • 然后通過setOpticalFrame方法或者setFrame方法判斷布局參數(shù)是否改變。

具體判斷過程就是通過老的上下左右值和新的上下左右值進(jìn)行比較,邏輯就在setFrame方法中:

  1. protected boolean setFrame(int leftint topint rightint bottom) { 
  2.         boolean changed = false
  3.  
  4.         if (mLeft != left || mRight != right || mTop != top || mBottom != bottom) { 
  5.             changed = true
  6.  
  7.             // Remember our drawn bit 
  8.             int drawn = mPrivateFlags & PFLAG_DRAWN; 
  9.  
  10.             int oldWidth = mRight - mLeft; 
  11.             int oldHeight = mBottom - mTop; 
  12.             int newWidth = right - left
  13.             int newHeight = bottom - top
  14.             boolean sizeChanged = (newWidth != oldWidth) || (newHeight != oldHeight); 
  15.  
  16.             // Invalidate our old position 
  17.             invalidate(sizeChanged); 
  18.  
  19.             mLeft = left
  20.             mTop = top
  21.             mRight = right
  22.             mBottom = bottom; 
  23.             mRenderNode.setLeftTopRightBottom(mLeft, mTop, mRight, mBottom); 
  24.         } 
  25.         return changed; 
  26.     } 

如果上下左右有一個(gè)參數(shù)值發(fā)生了改變,就說明這個(gè)View的布局發(fā)生了改變,然后重新計(jì)算View的寬度高度(newWidth、newHeight),并賦值了View新的上下左右參數(shù)值。

在這個(gè)layout方法中主要涉及到了四個(gè)參數(shù):mLeft、mTop、mBottom、mRight,分別代表了View的左坐標(biāo)、上坐標(biāo)、下坐標(biāo)和右坐標(biāo),你可以把View理解為一個(gè)矩形,確定了這四個(gè)值,就能確定View矩形的四個(gè)頂點(diǎn)值,也就能確定View在畫布中的具體位置。

所以,layout方法到底干了啥?

就是傳入上下左右值、然后賦值上下左右值、完畢。

然后我們就可以根據(jù)這些值獲取View的一系列參數(shù),比如View寬度:

  1. public final int getWidth() { 
  2.       return mRight - mLeft; 
  3.   } 

至此,View的layout方法就結(jié)束了,主要就是通過對(duì)上下左右參數(shù)的賦值完成對(duì)View的布局,非常簡單。

下面看看ViewGroup。

ViewGroup layout方法

  1. @Override 
  2.    public final void layout(int l, int t, int r, int b) { 
  3.        if (!mSuppressLayout && (mTransition == null || !mTransition.isChangingLayout())) { 
  4.            if (mTransition != null) { 
  5.                mTransition.layoutChange(this); 
  6.            } 
  7.            super.layout(l, t, r, b); 
  8.        } else { 
  9.            mLayoutCalledWhileSuppressed = true
  10.        } 
  11.    } 

額,還是調(diào)用到View的layout方法,難道說ViewGroup和View的布局過程是一樣的,就是確定了本身的位置?

那ViewGroup的子View怎么辦呢?不急,我們剛才說layout方法的時(shí)候還漏了一個(gè)onLayout方法,只不過這個(gè)方法在View里面是空實(shí)現(xiàn),而到了ViewGroup中變成了一個(gè)抽象方法:

  1. @Override 
  2.     protected abstract void onLayout(boolean changed, 
  3.             int l, int t, int r, int b); 

也就是任何ViewGroup都必須實(shí)現(xiàn)這個(gè)方法,來完成對(duì)子View的布局?jǐn)[放。

具體的布局?jǐn)[放邏輯就是在onLayout方法中一個(gè)個(gè)調(diào)用子View的layout方法,然后完成每個(gè)子View的布局,最終完成繪制工作。

接下來我們就來自己實(shí)現(xiàn)一個(gè)垂直線性布局(類似LinearLayout),正好復(fù)習(xí)下上一節(jié)的onMearsure和這一節(jié)的onLayout。

自定義垂直布局VerticalLayout

首先,我們要確定我們這個(gè)自定義ViewGroup的作用,是類似垂直方向的LinearLayout功能,在該ViewGroup下的子View可以按垂直線性順序依次往下排放。我們給它起個(gè)名字叫VerticalLayout~

繼承ViewGroup

首先,我們這個(gè)布局肯定要繼承自ViewGroup,并且實(shí)現(xiàn)相應(yīng)的構(gòu)造方法:

  1. public class VerticalLayout : ViewGroup { 
  2.  
  3.     constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int = 0) : super( 
  4.         context, 
  5.         attrs, 
  6.         defStyleAttr 
  7.     ) 
  8.  
  9.     constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) { 
  10.     } 

重寫generateLayoutParams方法

自定義ViewGroup還需要重寫的一個(gè)方法是generateLayoutParams,這一步是為了讓我們的ViewGroup支持Margin,后續(xù)我們就可以通過MarginLayoutParams來獲取子View的Margin值。

  1. override fun generateLayoutParams(attrs: AttributeSet?): LayoutParams? { 
  2.       return MarginLayoutParams(context, attrs) 
  3.   } 

重寫測量方法onMeasure

然后,我們需要對(duì)我們的布局進(jìn)行測量,也就是重寫onMeasure方法。

在該方法中,我們需要對(duì)我們的布局進(jìn)行測量,并且將測量好的寬高傳入setMeasuredDimension方法,完成測量。

  1. protected final void setMeasuredDimension(int measuredWidth, int measuredHeight) 

之前我們說過,onMeasure方法會(huì)傳進(jìn)來兩個(gè)參數(shù),widthMeasureSpec和heightMeasureSpec。

里面包含了父View根據(jù)當(dāng)前View的LayoutParams和父View的測量規(guī)格進(jìn)行計(jì)算,得出的對(duì)當(dāng)前View期望的測量模式和測量大小:

  • 當(dāng)測量模式為MeasureSpec.EXACTLY

也就是當(dāng)寬或者高為確定值時(shí),那么當(dāng)前布局View的寬高也就是設(shè)定為父View給我們設(shè)置好的測量大小即可。比如寬為400dp,那么我們無需重新測量直接調(diào)用setMeasuredDimension傳入這個(gè)固定值即可。

  • 當(dāng)測量模式為MeasureSpec.AT_MOST 或者 UNSPECIFIED:

這時(shí)候,說明父View對(duì)當(dāng)前View的要求不固定,是可以為任意大小或者不超過最大值的情況,比如設(shè)置這個(gè)VerticalLayout的高度為wrap_content。那么我們就必須重新進(jìn)行高度測量了,因?yàn)橹挥形覀冊O(shè)計(jì)者知道這個(gè)自適應(yīng)高度需要怎么計(jì)算。具體就是VerticalLayout是一個(gè)垂直線性布局,所以高度很自然就是所有子View的高度之和。

至此,onMeasure方法的邏輯也基本摸清了:

  1. override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) { 
  2.         super.onMeasure(widthMeasureSpec, heightMeasureSpec) 
  3.         //獲取寬高的測量模式和測量大小 
  4.         val widthMode = MeasureSpec.getMode(widthMeasureSpec) 
  5.         val heightMode = MeasureSpec.getMode(heightMeasureSpec) 
  6.         val sizeWidth = MeasureSpec.getSize(widthMeasureSpec) 
  7.         val sizeHeight = MeasureSpec.getSize(heightMeasureSpec) 
  8.  
  9.         var mHeight = 0 
  10.         var mWidth = 0 
  11.  
  12.         //遍歷子View,獲取總高度 
  13.         for (i in 0 until childCount) { 
  14.             val childView = getChildAt(i) 
  15.             //測量子View的寬和高 
  16.             measureChild(childView, widthMeasureSpec, heightMeasureSpec) 
  17.             val lp = childView.layoutParams as MarginLayoutParams 
  18.             val childWidth = childView.measuredWidth + lp.leftMargin + lp.rightMargin 
  19.             val childHeight = childView.measuredHeight + lp.topMargin + lp.bottomMargin 
  20.  
  21.             //計(jì)算得出最大寬度 
  22.             mWidth = Math.max(mWidth, childWidth) 
  23.             //累計(jì)計(jì)算高度 
  24.             mHeight += childHeight 
  25.         } 
  26.  
  27.         //設(shè)置寬高 
  28.         setMeasuredDimension( 
  29.             if (widthMode == MeasureSpec.EXACTLY) sizeWidth else mWidth, 
  30.             if (heightMode == MeasureSpec.EXACTLY) sizeHeight else mHeight 
  31.         ) 
  32.     } 

主要的邏輯就是遍歷子View,得出VerticalLayout的實(shí)際寬高:

最終ViewGroup的高 = 所有子View的 (高 + margin值)

最終ViewGroup的寬 = 最大子View的 (寬 + margin值)

最后調(diào)用setMeasuredDimension 根據(jù)測量模式 傳入寬高。

重寫布局方法onLayout

上文說過,作為一個(gè)ViewGroup,必須重寫onLayout方法,來保證子View的正常布局?jǐn)[放。

垂直線性布局VerticalLayout亦是如此,那么在這個(gè)布局中onLayout方法的關(guān)鍵邏輯又是什么呢?

還是那句話,確定位置,也就是確定左、上、右、下四個(gè)參數(shù)值,而在VerticalLayout中,最關(guān)鍵的參數(shù)就是這個(gè)上,也就是top值。

每個(gè)View的top值必須是上一個(gè)View的bottom值,也就是接著上一個(gè)View進(jìn)行擺放,這樣才會(huì)是垂直線性的效果,所以我們需要做的就是動(dòng)態(tài)計(jì)算每個(gè)View的top值,其實(shí)也就是不斷累加View的高度,作為下一個(gè)View的top值。

  1. override fun onLayout(changed: Boolean, l: Int, t: Int, r: Int, b: Int) { 
  2.         var childWidth = 0 
  3.         var childHeight = 0 
  4.         var childTop = 0 
  5.         var lp: MarginLayoutParams 
  6.  
  7.         //遍歷子View,布局每個(gè)子View 
  8.         for (i in 0 until childCount) { 
  9.             val childView = getChildAt(i) 
  10.             childHeight = childView.measuredHeight 
  11.             childWidth = childView.measuredWidth 
  12.             lp = childView.layoutParams as MarginLayoutParams 
  13.  
  14.             //累計(jì)計(jì)算top值 
  15.             childTop += lp.topMargin 
  16.  
  17.             //布局子View 
  18.             childView.layout( 
  19.                 lp.leftMargin, 
  20.                 childTop, 
  21.                 lp.leftMargin + childWidth, 
  22.                 childTop + childHeight 
  23.             ); 
  24.  
  25.             childTop += childHeight + lp.bottomMargin 
  26.         } 
  27.     } 

邏輯還是挺簡單的,

left是固定的子View的leftMargin。

top是累加計(jì)算的子View的高度 + Margin值。

right是left + 子View的寬度。

bottom是top + 子View的高度。

最后調(diào)用子View的layout方法,對(duì)每個(gè)子View進(jìn)行布局。

大功告成,最后看看我們這個(gè)自定義垂直線性布局的效果吧~

效果展示

  1. <com.panda.studynote3.VerticalLayout 
  2.         android:layout_width="wrap_content" 
  3.         android:layout_height="wrap_content"
  4.  
  5.         <TextView 
  6.             android:layout_width="100dp" 
  7.             android:layout_height="100dp" 
  8.             android:text="啦啦啦" 
  9.             android:textSize="20sp" 
  10.             android:textColor="@color/white" 
  11.             android:background="@color/design_default_color_primary" 
  12.             /> 
  13.  
  14.         <TextView 
  15.             android:layout_width="300dp" 
  16.             android:layout_height="200dp" 
  17.             android:layout_marginTop="20dp" 
  18.             android:background="@color/cardview_dark_background" 
  19.             android:textSize="20sp" 
  20.             android:textColor="@color/white" 
  21.             android:text="你好啊" 
  22.             /> 
  23.  
  24.         <TextView 
  25.             android:layout_width="140dp" 
  26.             android:layout_height="100dp" 
  27.             android:text="嘻嘻" 
  28.             android:layout_marginLeft="10dp" 
  29.             android:layout_marginTop="10dp" 
  30.             android:textSize="20sp" 
  31.             android:gravity="center" 
  32.             android:textColor="@color/black" 
  33.             android:background="@color/teal_200" 
  34.             /> 
  35.  
  36.     </com.panda.studynote3.VerticalLayout> 

本文轉(zhuǎn)載自微信公眾號(hào)「碼上積木」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系碼上積木公眾號(hào)。

 

責(zé)任編輯:武曉燕 來源: 碼上積木
相關(guān)推薦

2015-02-12 15:33:43

微信SDK

2020-11-25 11:20:44

Spring注解Java

2015-02-12 15:38:26

微信SDK

2016-11-16 21:55:55

源碼分析自定義view androi

2016-12-26 15:25:59

Android自定義View

2011-06-23 10:49:13

Qt 自定義信號(hào)

2021-07-05 08:43:46

Spring Beanscope作用域

2017-02-28 10:05:56

Chrome源碼

2023-09-05 08:23:56

SpringScope方法

2021-12-07 18:23:50

自定義進(jìn)度條分段式

2009-07-06 16:59:26

JSP自定義標(biāo)簽

2025-03-03 00:00:00

Chrome工具前端

2023-09-06 10:33:40

夜鶯監(jiān)控數(shù)據(jù)庫

2013-06-27 11:10:01

iOS開發(fā)自定義UISlider

2013-04-19 10:14:24

2015-07-22 10:57:36

watchOS圖表自定義

2010-09-14 16:47:23

SQL自定義函數(shù)

2021-12-28 15:38:46

Traefik中間件插件

2015-01-14 15:06:48

定義相機(jī)

2009-06-08 20:13:36

Eclipse自定義控
點(diǎn)贊
收藏

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

可以在线观看的av网站| 好吊妞视频一区二区三区| 欧美91在线|欧美| 一区二区三区免费在线观看| 国精产品一区二区| 免费无码国产精品| 女人香蕉久久**毛片精品| 亚洲国产精品va在线看黑人动漫| 50路60路老熟妇啪啪| av网站网址在线观看| av色综合久久天堂av综合| 国产精品久久久久久久一区探花| 久久免费精彩视频| 青青草91久久久久久久久| 日韩欧美一二区| 国产精彩免费视频| 黄网av在线| 国产精品免费视频网站| 精品一区二区国产| 国产suv一区二区| 日日夜夜免费精品视频| 欧美精品第一页在线播放| 女人裸体性做爰全过| 欧美黑白配在线| 日韩欧美区一区二| 久久人人爽av| 欧美最新精品| 精品久久久精品| 大地资源网在线观看免费官网| 国产粉嫩一区二区三区在线观看| 成人永久免费视频| 亚洲a级在线播放观看| 自拍偷拍18p| 美女精品网站| 91av在线影院| 久久久久久久99| 欧美日韩福利| 久久av中文字幕| 天天爽天天爽天天爽| 国产亚洲一区| 亚洲视频精品在线| 无码人妻精品一区二区三区温州| 澳门成人av| 日韩免费看网站| 中文字幕一区二区三区四| 久久人体av| 欧美色综合天天久久综合精品| 免费黄色日本网站| 欧美aaaaa性bbbbb小妇| 亚洲成人av免费| 欧美亚洲色图视频| 国产区美女在线| 亚洲综合精品久久| 性高湖久久久久久久久aaaaa| 91麻豆一二三四在线| 亚洲欧美激情视频在线观看一区二区三区 | 亚洲欧美自拍视频| 国产视频一区欧美| 欧美重口另类videos人妖| 国产精品自拍99| 日日噜噜夜夜狠狠视频欧美人| 国产成人极品视频| 在线观看中文字幕码| 久久精品99久久久| 亚洲自拍在线观看| 丰满人妻一区二区三区四区53| 国产老肥熟一区二区三区| 147欧美人体大胆444| 亚洲资源在线播放| 国产精品亚洲视频| 国产欧美日本在线| 久久精品a一级国产免视看成人| 国产目拍亚洲精品99久久精品| 亚洲 国产 日韩 综合一区| 久久综合之合合综合久久| 一区二区三区蜜桃网| 97视频久久久| 日本黄色一区| 日韩限制级电影在线观看| 亚洲v在线观看| 天天做夜夜做人人爱精品| 一区二区欧美久久| 2021亚洲天堂| 免费在线成人| 成人在线激情视频| 天堂成人在线观看| 国产精品青草久久| 妞干网在线观看视频| gogo亚洲高清大胆美女人体| 欧美一级黄色录像| 一级做a爰片毛片| 久久国产电影| 久久人人爽人人爽人人片av高清| 久久精品无码av| 精品一区二区三区av| 国产伦精品一区二区三区四区视频 | 久久69av| 亚洲欧美日韩中文在线| 日韩欧美综合视频| 水蜜桃久久夜色精品一区的特点| 亚洲伊人第一页| 神马精品久久| 欧美国产一区二区在线观看| 日韩人妻无码精品久久久不卡| 校园春色亚洲色图| 精品久久一区二区三区| 国产jjizz一区二区三区视频| 欧美精品黄色| 国产精品免费福利| 视频福利在线| 亚洲一区免费视频| 99热一区二区| 免费看成人吃奶视频在线| 欧美日本黄视频| 在线观看中文字幕2021| 2欧美一区二区三区在线观看视频| 亚洲精品偷拍视频| 浪潮色综合久久天堂| 亚洲国产精彩中文乱码av在线播放| 美国一级片在线观看| 乱人伦精品视频在线观看| 国产在线精品一区二区三区| 国产精品一卡二卡三卡 | 成人在线观看a| 国产三级精品三级在线观看国产| 久久精品免费播放| 老熟妇一区二区三区啪啪| 91丨九色丨蝌蚪丨老版| 男女日批视频在线观看| 久久久久毛片免费观看| 久久精品国产91精品亚洲| 男人天堂视频网| 91蜜桃婷婷狠狠久久综合9色| 国产小视频免费| 精品91福利视频| 久久五月天综合| 91亚洲精品国偷拍自产在线观看| 国产无遮挡一区二区三区毛片日本| 国产免费黄色小视频| 99久久人爽人人添人人澡| 美日韩在线视频| 国产绿帽刺激高潮对白| 亚洲丝袜精品丝袜在线| 亚洲黄色av片| 欧美激情四色| 亚洲综合色av| 七七久久电影网| 欧美va在线播放| 国产一级特黄视频| 91原创在线视频| 欧洲黄色一级视频| 国产精选一区| 国产精品久久999| 爱爱爱免费视频在线观看| 欧美日韩在线播放一区| 少妇高潮一区二区三区喷水| 久久99久久久欧美国产| 一级全黄肉体裸体全过程| 精品视频在线一区| 久久久人成影片一区二区三区| 成人黄色免费视频| 污片在线观看一区二区| www.久久国产| 蜜桃av一区二区| 成人免费看片视频在线观看| 日韩在线网址| 97视频在线观看视频免费视频| 日韩porn| 欧美日韩三级视频| 麻豆成人在线视频| 91在线丨porny丨国产| 超碰av在线免费观看| 国产精品精品国产一区二区| 99re视频在线播放| 亚洲精品日产| 日韩在线小视频| 蜜桃视频在线观看www| 一本色道久久综合狠狠躁的推荐| 欧美亚洲色综久久精品国产| 国精产品一区一区三区mba视频| 亚洲成人动漫在线| 日韩av黄色在线| 国产精品免费在线免费| 羞羞电影在线观看www| 亚洲精品乱码久久久久久金桔影视| 日韩黄色片网站| 亚洲另类一区二区| 黄色正能量网站| 久久99精品久久只有精品| 成人免费在线网| 欧美一级精品| 国产伦精品一区二区三区四区免费| 人人鲁人人莫人人爱精品| 欧美巨猛xxxx猛交黑人97人| 你懂的在线网址| 日韩午夜av电影| 国产精品尤物视频| 亚洲国产精品一区二区尤物区| 毛片aaaaaa| eeuss影院一区二区三区| 中文字幕 日韩 欧美| aa亚洲婷婷| 好吊色视频988gao在线观看| 沈樵精品国产成av片| 亚洲影院色无极综合| 黑人巨大精品欧美一区二区桃花岛| 久久亚洲私人国产精品va| 婷婷亚洲一区二区三区| 日韩精品一区二区在线| 中文字幕在线观看你懂的| 精品国产鲁一鲁一区二区张丽| 国产精品视频一区二区三| 国产午夜久久久久| 手机免费看av片| 韩国一区二区三区| 亚洲一二三区av| 国产欧美日韩一级| 久久人人爽人人爽人人av| 欧美美女在线观看| 好吊色欧美一区二区三区| 欧美黄视频在线观看| 国产日韩欧美电影在线观看| 欧美二三四区| 青青a在线精品免费观看| 538在线视频| 欧美华人在线视频| av黄色在线| 久久久91精品国产一区不卡| 在线国产91| 中文字幕在线精品| av电影在线观看一区二区三区| 亚洲美女av电影| 日韩一级片免费在线观看| 日韩亚洲欧美中文三级| 国产精品热久久| 777xxx欧美| 一区二区三区日| 欧美喷潮久久久xxxxx| 怡春院在线视频| 欧美午夜精品一区二区蜜桃| 超碰在线观看91| 在线看国产一区| 伊人久久中文字幕| 欧美色老头old∨ideo| 国产情侣免费视频| 欧美日韩精品系列| 91av久久久| 欧美一区二区视频网站| 国产女人高潮时对白| 欧美一区二区人人喊爽| 国产99对白在线播放| 欧美片在线播放| 午夜久久久久久久久久| 精品国产网站在线观看| 蜜桃在线一区二区| 精品视频在线导航| 久草福利在线| xxxxxxxxx欧美| 三级资源在线| 18性欧美xxxⅹ性满足| 欧美亚洲韩国| 国产欧美中文字幕| 在线日韩成人| 久中文字幕一区| 欧美综合另类| 欧美xxxx吸乳| 亚洲经典在线| 天天碰免费视频| 激情都市一区二区| 欧美熟妇精品一区二区蜜桃视频| 成人h版在线观看| 亚洲成人黄色av| 亚洲欧洲成人精品av97| 久久精品无码人妻| 一本大道久久精品懂色aⅴ| 在线观看国产一区二区三区| 51精品秘密在线观看| 天天综合网在线| 中文字幕成人在线| 人妖欧美1区| 国产成人亚洲综合91精品| 91精品一久久香蕉国产线看观看 | 亚洲国产精品国自产拍久久| 亚洲老板91色精品久久| 日本激情视频在线观看| 国内外成人免费激情在线视频| 欧美大片免费观看网址| 91精品网站| 欧美日中文字幕| 日韩欧美不卡在线| 蜜桃视频第一区免费观看| 无码人妻丰满熟妇啪啪网站| 国产亚洲欧美日韩俺去了| 欧美人妻精品一区二区免费看| 欧美性感美女h网站在线观看免费| 中文字幕有码无码人妻av蜜桃| 精品国产不卡一区二区三区| 成人动漫在线播放| 91精品国产91久久久久久久久| 欧美成人家庭影院| 麻豆成人在线播放| 精品电影一区| 伊人色在线视频| 国产亚洲制服色| 91av在线免费视频| 91精品国产免费| www.视频在线.com| 欧美性视频在线| 粉嫩久久久久久久极品| 美女黄色片网站| 捆绑紧缚一区二区三区视频| 一二三不卡视频| 亚洲成人av在线电影| av 一区二区三区| xxx一区二区| 777午夜精品电影免费看| 久久国产主播精品| 91久久久久| 波多野结衣三级视频| 亚洲丝袜美腿综合| 亚洲天堂网在线视频| 亚洲人成电影网站色xx| 僵尸再翻生在线观看| av成人在线电影| 欧美在线免费| 污污的视频免费观看| 欧美经典一区二区| 亚洲综合久久网| 亚洲免费电影一区| 最新欧美色图| 精品伊人久久大线蕉色首页| 亚洲高清电影| 永久免费未满蜜桃| 亚洲国产精品久久久久婷婷884| 精品久久久免费视频| 久久综合久久88| 精品国产亚洲一区二区三区大结局| 亚洲综合视频一区| 美女久久久精品| 福利视频第一页| 欧美区在线观看| 国产盗摄在线观看| 成人免费淫片aa视频免费| 99精品在线观看| 在线免费看v片| 一级女性全黄久久生活片免费| 亚洲不卡免费视频| 97精品久久久| 久操精品在线| 五月天激情视频在线观看| 国产精品久久久久精k8 | 欧美高清你懂得| caopo在线| 高清国产在线一区| 在线欧美一区| 日本aaa视频| 欧美日韩一区视频| 成人ww免费完整版在线观看| 2019国产精品视频| 1024日韩| 欧美激情亚洲色图| 91麻豆精品国产自产在线| 日本在线视频网址| 久久久一本精品99久久精品66 | 亚洲欧美一级二级三级| 亚洲视频天天射| 日韩欧美中文第一页| 国产日本在线视频| 91免费看片在线| 亚洲小说欧美另类社区| 免费观看av网站| 欧美另类一区二区三区| 国内高清免费在线视频| 欧美性xxxx69| 国产一区免费电影| 日本一级黄色大片| 一本一本久久a久久精品综合小说| av国产精品| 欧美精品99久久| 中文字幕佐山爱一区二区免费| 成人毛片在线免费观看| 国产91精品在线播放| 91精品一区国产高清在线gif| 成人免费看片载| 在线观看视频一区二区| 永久免费网站在线| 欧美性bbwbbwbbwhd| 国产成人综合在线播放| 无码视频一区二区三区| 欧美精品免费在线观看| 国产精品入口久久| 日本黄色三级网站| 91福利精品第一导航| 欧美黑人猛交的在线视频| 日韩av大全| 成人午夜私人影院| 在线观看亚洲国产| 琪琪亚洲精品午夜在线| 国产精品99免费看| 免费黄色在线网址|