亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統(tǒng) > Android > 正文

一篇文章弄懂Android自定義viewgroup的相關(guān)難點

2019-10-21 21:49:57
字體:
供稿:網(wǎng)友

本文的目的

目的在于教會大家到底如何自定義viewgroup,自定義布局和自定義測量到底如何寫。很多網(wǎng)上隨便搜搜的概念和流程圖
這里不再過多描述了,建議大家看本文之前,先看看基本的自定義viewgroup流程,心中有個大概即可。本文注重于實踐
viewgroup 的測量布局流程基本梳理

稍微回顧下,基本的viewgroup繪制和布局流程中的重點:

1.view 在onMeasure()方法中進(jìn)行自我測量和保存,也就是說對于view(不是viewgroup噢)來說一定在onMeasure方法中計算出自己的尺寸并且保存下來

2.viewgroup實際上最終也是循環(huán)從上大小來調(diào)用子view的measure方法,注意子view的measure其實最終調(diào)用的是子view的onMeasure 方法。所以我們理解這個過程為:

viewgroup循環(huán)遍歷調(diào)用所有子view的onmeasure方法,利用onmeasure方法計算出來的大小,來確定這些子view最終可以占用的大小和所處的布局的位置。

3.measure方法是一個final方法,可以理解為做測量工作準(zhǔn)備工作的,既然是final方法所以我們無法重寫它,不需要過多
關(guān)注他,因為measure最終要調(diào)用onmeasure ,這個onmeasure我們是可以重寫的。要關(guān)注這個。layout和onlayout是一樣的關(guān)系。

4.父view調(diào)用子view的layout方法的時候會把之前measure階段確定的位置和大小都傳遞給子view。

5.對于自定義view/viewgroup來說 我們幾乎只需要關(guān)注下面三種需求:

  • 對于已有的android自帶的view,我們只需要重寫他的onMeasure方法即可。修改一下這個尺寸即可完成需求。
  • 對于android系統(tǒng)沒有的,屬于我們自定義的view,比上面那個要復(fù)雜一點,要完全重寫onMeasure方法。
  • 第三種最復(fù)雜,需要重寫onmeasure和onlayout2個方法,來完成一個復(fù)雜viewgroup的測量和布局。

6.onMeasure方法的特殊說明:

Android,自定義,viewgroup

7.如何理解父view對子view的限制?

onMeasure的兩個參數(shù)既然是父view對子view的限制,那么這個限制的值到底是哪來的呢?

實際上,父view對子view的限制絕大多數(shù)就來自于我們開發(fā)者所設(shè)置的layout開頭的這些屬性

比方說我們給一個imageview設(shè)置了他的layout_width和layout_height 這2個屬性,那這2個屬性其實就是我們開發(fā)者
所期望的寬高屬性,但是要注意了,

設(shè)置的這2個屬性是給父view看的,實際上對于絕大多數(shù)的layout開頭的屬性這些屬性都是設(shè)置給父view看的

為什么要給父view看?因為父view要知道這些屬性以后才知道要對子view的測量加以什么限制?

到底是不限制(UNSPECIFIED)?還是限制個最大值(AT_MOST),讓子view不超過這個值?還是直接限制死,我讓你是多少就得是多少(EXACTLY)。

自定義一個BannerImageView 修改onMeasure方法

所謂bannerImageview,就是很多電商其實都會放廣告圖,這個廣告圖的寬高比都是可變的,我們在日常開發(fā)過程中
也會經(jīng)常接觸到這種需求:imageview的寬高比 在高保真中都標(biāo)注出來,但是考慮到很多手機(jī)的屏幕寬度或者高度都不確定

所以我們通常都要手動來計算出這個imageview高度或者寬度,然后動態(tài)改變width或者h(yuǎn)eight的值。這種方法可用但是很麻煩

這里給出一個自定義的imageview,通過設(shè)置一個ratio的屬性即可動態(tài)的設(shè)置iv的高度。很是方便

Android,自定義,viewgroup

看下效果

Android,自定義,viewgroup

最后看下代碼,重要的部分都寫在注釋里了,不再過多講了。

public class BannerImageView extends ImageView { //寬高比 float ratio; public BannerImageView(Context context) { super(context); } public BannerImageView(Context context, AttributeSet attrs) { super(context, attrs); TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.BannerImageView); ratio = typedArray.getFloat(R.styleable.BannerImageView_ratio, 1.0f); typedArray.recycle(); } public BannerImageView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { //人家自己的測量還是要自己走一遍的,因為這個方法內(nèi)部會調(diào)用setMeasuredDimension方法來保存測量結(jié)果了 //只有保存了以后 我們才能取得這個測量結(jié)果 否則你下面是取不到的 super.onMeasure(widthMeasureSpec, heightMeasureSpec); //取測量結(jié)果 int mWidth = getMeasuredWidth(); int mHeight = (int) (mWidth * ratio); //保存了以后,父view就可以拿到這個測量的寬高了。不保存是拿不到的噢。 setMeasuredDimension(mWidth, mHeight); }}

自定義view,完全自己寫onMeasure方法

首先明確一個結(jié)論:

對于完全自定義的view,完全自己寫的onMeasure方法來說,你保存的寬高必須要符合父view的限制,否則會發(fā)生bug,
保存父view對子view的限制的方法也很簡單直接調(diào)用resolveSize方法即可。

Android,自定義,viewgroup

Android,自定義,viewgroup

所以對于完全自定義的view onMeasure方法也不難寫了,

  • 先算自己想要的寬高,比如你畫了個圓,那么寬高就肯定是半徑的兩倍大小, 要是圓下面還有字,
  • 那么高度肯定除了半徑的兩倍還要有字體的大小。對吧。很簡單。這個純看你自定義view是啥樣的
  • 算完自己想要的寬高以后 直接拿resolveSize 方法處理一下 即可。
  • 最后setMeasuredDimension 保存。

范例:

public class LoadingView extends View { //圓形的半徑 int radius; //圓形外部矩形rect的起點 int left = 10, top = 30; Paint mPaint = new Paint(); public LoadingView(Context context) { super(context); } public LoadingView(Context context, AttributeSet attrs) { super(context, attrs); TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.LoadingView); radius = typedArray.getInt(R.styleable.LoadingView_radius, 0); } public LoadingView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); int width = left + radius * 2; int height = top + radius * 2; //一定要用resolveSize方法來格式化一下你的view寬高噢,否則遇到某些layout的時候一定會出現(xiàn)奇怪的bug的。 //因為不用這個 你就完全沒有父view的感受了 最后強(qiáng)調(diào)一遍 width = resolveSize(width, widthMeasureSpec); height = resolveSize(height, heightMeasureSpec); setMeasuredDimension(width, height); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); RectF oval = new RectF(left, top,  left + radius * 2, top + radius * 2); mPaint.setColor(Color.BLUE); canvas.drawRect(oval, mPaint); //先畫圓弧 mPaint.setColor(Color.RED); mPaint.setStyle(Paint.Style.STROKE); mPaint.setStrokeWidth(2); canvas.drawArc(oval, -90, 360, false, mPaint); }}

布局文件:

<LinearLayout  android:layout_width="200dp"  android:layout_height="200dp"  android:background="#000000"  android:orientation="horizontal">  <com.example.a16040657.customviewtest.LoadingView   android:layout_width="wrap_content"   android:layout_height="wrap_content"   android:src="@mipmap/dly"   app:radius="200"></com.example.a16040657.customviewtest.LoadingView>  <com.example.a16040657.customviewtest.LoadingView   android:layout_marginLeft="10dp"   android:layout_width="wrap_content"   android:layout_height="wrap_content"   android:src="@mipmap/dly"   app:radius="200"></com.example.a16040657.customviewtest.LoadingView> </LinearLayout>

最后效果:

Android,自定義,viewgroup

自定義一個viewgroup

這個其實也就是稍微復(fù)雜了一點,但是還是有跡可循的,只是稍微需要一點額外的耐心。

自定義一個viewgroup 需要注意的點如下:

  • 一定是先重寫onMeasure確定子view的寬高和自己的寬高以后 才可以繼續(xù)寫onlayout 對這些子view進(jìn)行布局噢~~
  • viewgroup 的onMeasure其實就是遍歷自己的view 對自己的每一個子view進(jìn)行measure,絕大多數(shù)時候?qū)ψ觱iew的measure都可以直接用 measureChild()這個方法來替代,簡化我們的寫法,如果你的viewgroup很復(fù)雜的話無法就是自己寫一遍measureChild 而不是調(diào)用measureChild 罷了。
  • 計算出viewgroup自己的尺寸并且保存,保存的方法還是哪個setMeasuredDimension 不要忘記了
  • 逼不得已要重寫measureChild方法的時候,其實也不難無非就是對父view的測量和子view的測量 做一個取舍關(guān)系而已,你看懂了基礎(chǔ)的measureChild方法,以后就肯定會寫自己的復(fù)雜的measureChild方法了。

下面是一個極簡的例子,一個很簡單的flowlayout的實現(xiàn),沒有對margin paddding做處理,也假設(shè)了每一個tag的高度
是固定的,可以說是極為簡單了,但是麻雀雖小 五臟俱全,足夠你們好好理解自定義viewgroup的關(guān)鍵點了。

/** * 寫一個簡單的flowlayout 從左到右的簡單layout,如果寬度不夠放 就直接另起一行l(wèi)ayout * 這個類似的開源控件有很多,有很多寫的出色的,我這里只僅僅實現(xiàn)一個初級的flowlayout * 也是最簡單的,目的是為了理解自定義viewgroup的關(guān)鍵核心點。 * <p> * 比方說這里并沒有對padding或者margin做特殊處理,你們自己寫viewgroup的時候 記得把這些屬性的處理都加上 * 否則一旦有人用了這些屬性 發(fā)現(xiàn)沒有生效就比較難看了。。。。。。 */public class SimpleFlowLayout extends ViewGroup { public SimpleFlowLayout(Context context) {  super(context); } public SimpleFlowLayout(Context context, AttributeSet attrs) {  super(context, attrs); } public SimpleFlowLayout(Context context, AttributeSet attrs, int defStyleAttr) {  super(context, attrs, defStyleAttr); } /**  * layout的算法 其實就是 不夠放剩下一行 那另外放一行 這個過程一定要自己寫一遍才能體會,  * 個人有個人的寫法,說不定你的寫法比開源的項目還要好  * 其實也沒什么夸張的,無法就是前面onMeasure結(jié)束以后 你可以拿到所有子view和自己的 測量寬高 然后就算唄  *  * @param changed  * @param l  * @param t  * @param r  * @param b  */ @Override protected void onLayout(boolean changed, int l, int t, int r, int b) {  int childTop = 0;  int childLeft = 0;  int childRight = 0;  int childBottom = 0;  //已使用 width  int usedWidth = 0;  //customlayout 自己可使用的寬度  int layoutWidth = getMeasuredWidth();  Log.v("wuyue", "layoutWidth==" + layoutWidth);  for (int i = 0; i < getChildCount(); i++) {   View childView = getChildAt(i);   //取得這個子view要求的寬度和高度   int childWidth = childView.getMeasuredWidth();   int childHeight = childView.getMeasuredHeight();   //如果寬度不夠了 就另外啟動一行   if (layoutWidth - usedWidth < childWidth) {    childLeft = 0;    usedWidth = 0;    childTop += childHeight;    childRight = childWidth;    childBottom = childTop + childHeight;    childView.layout(0, childTop, childRight, childBottom);    usedWidth = usedWidth + childWidth;    childLeft = childWidth;    continue;   }   childRight = childLeft + childWidth;   childBottom = childTop + childHeight;   childView.layout(childLeft, childTop, childRight, childBottom);   childLeft = childLeft + childWidth;   usedWidth = usedWidth + childWidth;  } } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {  //先取出SimpleFlowLayout的父view 對SimpleFlowLayout 的測量限制 這一步很重要噢。  //你只有知道自己的寬高 才能限制你子view的寬高  int widthMode = MeasureSpec.getMode(widthMeasureSpec);  int heightMode = MeasureSpec.getMode(heightMeasureSpec);  int widthSize = MeasureSpec.getSize(widthMeasureSpec);  int heightSize = MeasureSpec.getSize(heightMeasureSpec);  int usedWidth = 0;  //已使用的寬度  int remaining = 0;  //剩余可用寬度  int totalHeight = 0; //總高度  int lineHeight = 0;  //當(dāng)前行高  for (int i = 0; i < getChildCount(); i++) {   View childView = getChildAt(i);   LayoutParams lp = childView.getLayoutParams();   //先測量子view   measureChild(childView, widthMeasureSpec, heightMeasureSpec);   //然后計算一下寬度里面 還有多少是可用的 也就是剩余可用寬度   remaining = widthSize - usedWidth;   //如果一行不夠放了,也就是說這個子view測量的寬度 大于 這一行 剩下的寬度的時候 我們就要另外啟一行了   if (childView.getMeasuredWidth() > remaining) {    //另外啟動一行的時候,使用過的寬度 當(dāng)然要設(shè)置為0    usedWidth = 0;    //另外啟動一行了 我們的總高度也要加一下,不然高度就不對了    totalHeight = totalHeight + lineHeight;   }   //已使用 width 進(jìn)行 累加   usedWidth = usedWidth + childView.getMeasuredWidth();   //當(dāng)前 view 的高度   lineHeight = childView.getMeasuredHeight();  }  //如果SimpleFlowLayout 的高度 為wrap cotent的時候 才用我們疊加的高度,否則,我們當(dāng)然用父view對如果SimpleFlowLayout 限制的高度  if (heightMode == MeasureSpec.AT_MOST) {   heightSize = totalHeight;  }  setMeasuredDimension(widthSize, heightSize); }}

最后看下效果

Android,自定義,viewgroup

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對VEVB武林網(wǎng)的支持。


注:相關(guān)教程知識閱讀請移步到Android開發(fā)頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
白白色亚洲国产精品| 成人黄页在线观看| 欧美做受xxxxxⅹ性视频| 99国产精品久久久久久久成人| 在线免费观看日韩视频| 四虎精品永久免费| 夜夜嗨av一区二区三区四季av| 久久伊人精品| 熟妇熟女乱妇乱女网站| 九九热这里有精品视频| 亚洲最新合集| 久久久久久久久久久av| 男生和女生一起差差差视频| 久久综合激情| 久久久人成影片一区二区三区观看| 黄色一级视频在线播放| eeuss影院95999部| 蜜乳av一区二区三区| 欧美精品v日韩精品v韩国精品v| 国产精品2020| 成人性生交大片免费观看网站| 粉嫩一区二区三区四区公司1| 国产欧美一区二区三区国产幕精品| 喜爱夜蒲2在线| 99精品视频免费| 国产精品成久久久久| 精久久久久久| 日本不卡的三区四区五区| 成人在线小视频| 秘密影院久久综合亚洲综合| 亚洲free性xxxx护士hd| 国产白丝袜美女久久久久| 国产主播自拍av| 久久久久国产精品人| 手机在线播放av| 亚洲高清免费视频| 国产又粗又猛又爽又黄视频| 国产综合色激情| 中文在线资源| 免费观看黄色的网站| 极品美女销魂一区二区三区免费| 国产91色在线播放| 欧美大人香蕉在线| 亚洲精品字幕在线观看| 香蕉成人在线视频| 亚洲第一二三区| 国产三级精品三级在线| 美女视频一区二区三区| 在线a免费看| 久久男人资源视频| 超碰精品在线观看| 精品国产免费人成电影在线观看四季| 国产精品无码久久av| 性高潮免费视频| 成人av一级片| 欧美日韩欧美一区二区| 成人高清在线| 在线视频欧美一区| 看看黄色一级片| 国产精品成人69xxx免费视频| 国产精品女主播av| 成年在线播放小视频| 国产chinese精品一区二区| 5566av亚洲| 香蕉视频网页版| 国模私拍在线观看| 国产日本亚洲| 亚洲免费网站| 在线视频1区2区| 999国产精品亚洲77777| 日本黄色免费录像| 免费看男男www网站入口在线| 伊人久久在线观看| 一区二区三区在线视频播放| 免费永久在线观看黄网| 亚洲一区二区中文字幕在线观看| 搞黄网站在线看| 四虎影院成人在线观看| 国产精品伦一区二区三区视频| 中文字幕亚洲无线码a| 欧美国产在线一区| 久久aⅴ乱码一区二区三区| 中文乱码人妻一区二区三区视频| 在线一二三区| 欧美爱爱视频网站| 亚洲狼人综合干| 国产一二三av| 精品国产一区二区精华| 精品无码人妻一区二区三区品| 国产欧美日韩精品综合| 精品无人乱码一区二区三区的优势| 国产精品18久久久久久首页狼| 香蕉久久视频| 国产制服丝袜一区| 中文字幕亚洲第一| 偷窥少妇高潮呻吟av久久免费| 精品视频中文字幕| www.啪啪.com| 真人bbbbbbbbb毛片| 水莓100国产免费av在线播放| 岛国av免费在线观看| 久久久久久久久网站| 在线成人综合色一区| 成人p站proumb入口| 久久久久久久久久影院| 美女在线视频免费| 久久亚洲私人国产精品va媚药| 中文字幕日韩欧美精品高清在线| 亚洲国产一区二区精品视频| 免费在线a视频| 麻豆专区一区二区三区四区五区| 欧美极品视频在线观看| 爱搞国产精品| 国产精品麻豆免费版| 亚洲精品一区二区三区影院| 欧美丝袜足交| 久精品免费视频| 国产视频911| 免费高清在线观看电视| 亚洲va欧美va国产综合久久| 亚洲精品99久久久久| 日韩欧美一二三区| 美女露隐私免费网站| 9.1成人看片| 日av在线播放中文不卡| 中文字幕久久久av一区| 亚洲爽爆av| 中国精品18videos性欧美| 亚洲国产精品久久久天堂| 在线国产福利网站| 国产福利一区二区三区视频| 一级黄色小视频| 日本在线高清视频一区| 日韩av在线导航| 黄色欧美网站| 先锋影音亚洲资源| 中文字幕第一页在线播放| 116极品美女视频在线观看| 久久99精品一区二区三区| 精品国产美女在线| 欧美成人精品欧美一级乱| 色屁屁一区二区| 久草中文视频| 欧美网站免费观看| 77777少妇光屁股久久一区| 久久国产精品72免费观看| 天天躁日日躁狠狠躁伊人| 91精品国产高清一区二区三密臀| 欧美一级视频免费在线观看| 永久久久免费浮力影院| 亚洲男人天堂网站| 国产精品成人在线观看| 色播色播色播色播色播在线| 咪咪色在线视频| 亚洲国产精品影院| 国产精品三级电影| 亚洲国产成人精品女人久久久| 7799国产精品久久久久99| 91精品国产99久久久久久红楼| 亚洲三区在线观看| 亚洲激情小视频| 精品成人国产| 欧美一二三区在线观看| 久久午夜免费视频| 黄色成人在线免费| 欧美多人猛交狂配| 亚洲天堂一区二区三区| 成人在线app| 免费在线观看不卡| 日韩成人av一区二区| 日韩av电影免费播放| 九色视频网站在线观看| 亚洲欧洲日韩一区二区三区| 欧美视频亚洲色图| 91欧美国产| 欧美日韩精品免费观看视欧美高清免费大片| 精品影片在线观看的网站| 五月天丁香视频| 久99久精品视频免费观看| 蜜桃视频m3u8在线观看| 视频一区亚洲| 国产女主播在线写真| 青青久精品观看视频最新| 高清精品xnxxcom| 成人美女视频在线观看18| 国产91精品一区二区| 东方欧美亚洲色图在线| 中文字幕这里只有精品| 精品女厕一区二区三区| 欧美巨胸大乳hitomi| 91久久国语露脸精品国产高跟| 亚洲欧美日韩视频一区| 欧美在线精品一区二区三区| 在线视频中文字幕第一页| 亚洲高清视频在线播放| 欧美性猛交xxxx免费看| 免费一看一级毛片| 久久久久亚洲av成人无码电影| 国产福利微拍精品一区二区| 中文字幕观看在线| 亚洲欧美国产中文| 中国女人精69xxxxxx视频| 人妻少妇精品无码专区久久| 少妇极品熟妇人妻无码| 亚洲国产成人精品女人久久| 久久性天堂网| 91国语精品自产拍在线观看性色| 亚洲电影视频在线| 在线观看免费观看在线| 久久久久久久黄色片| 性刺激综合网| 日韩一区二区三区电影| 91久久精品久久国产性色也91| 成人性a激情免费视频| 放荡的美妇在线播放| swag国产精品一区二区| 国产一二区在线| 久久综合社区| 国产成年人免费视频| 国产精品入口麻豆九色| 天天操夜夜添| 国产精品国产三级国产aⅴ| 五月天亚洲精品| 日日夜夜一区| 国产日产精品一区二区三区四区的观看方式| 成人黄色大片在线免费观看| 18av.com视频| 欧美一区二区三区在线观看| 超碰在线一区| 伊人久久综合| 亚洲一区色图| 男人的天堂成人| 污污的视频网站在线观看| aa日韩免费精品视频一| av资源新版天堂在线| 欧美电影免费观看高清完整| 波多野结衣一本| 无码 制服 丝袜 国产 另类| 久久精品丝袜高跟鞋| а天堂中文最新一区二区三区| 国产精品国产精品国产专区蜜臀ah| 99精品国产91久久久久久| 日韩免费黄色av| 亚洲成人先锋电影| 奇米影视第四色777| 免费观看污网站| ww国产内射精品后入国产| 91精品国产综合久久男男| eeuss影院一区二区三区| 亚洲精品自拍第一页| 在线一区亚洲| 亚洲欧美日韩综合在线| 成人黄色片在线观看| 3d动漫精品啪啪一区二区三区免费| 一本一道久久a久久精品综合| 国产三级电影在线| 91亚洲精品在看在线观看高清| 欧美一区二区三区系列电影| 日日爱66.cn| 性欧美video另类hd尤物| 韩国女主播成人在线| 欧美夫妻性生活xx| 日b视频免费观看| 99香蕉国产精品偷在线观看| 亚洲福利视频久久| 久久国产精品影片| 全亚洲最色的网站在线观看| 国产精品都在这里| 国外视频精品毛片| 中文字幕国产精品久久| 亚洲精品小区久久久久久| 中文字幕免费观看视频| 亚洲国产欧美日韩精品| 日韩欧美aaaaaa| 一区二区免费在线观看| 97久久精品人人澡人人爽| 性做久久久久久免费观看欧美| 最新国产在线| 美国av一区二区| 国产精品一区二区在线观看| 日韩av大片免费看| 青青草视频在线免费观看| av激情在线| 在线观看视频你懂得| 国产对白在线播放| 在线视频影院| 国产精品调教视频| 国产成都精品91一区二区三| 美女脱光内衣内裤视频久久网站| 99综合精品| 欧美一级黄色影院| 亚洲v国产v在线观看| 裸体大乳女做爰69| 久久露脸国语精品国产91| 美女诱惑一区| 日韩肉感妇bbwbbwbbw| 欧美激情精品久久久久久小说| 欧美黄色高清视频| 日本精品中文字幕| 少妇激情一区二区三区| 无码h肉动漫在线观看| 国产又黄又嫩又滑又白| 91九色蝌蚪| 亚洲无中文字幕| 桥本有菜亚洲精品av在线| 欧美日韩一区在线观看视频| 亚洲精品v天堂中文字幕| 精品国产一二三四区| 激情视频在线观看一区二区三区| 自拍偷拍一区| 日韩精品成人| 另类专区欧美蜜桃臀第一页| 亚洲无线观看| 国产精品无码一区二区在线| 亚洲一区二区欧美日韩| 精品乱色一区二区中文字幕| 国产欧美日韩精品a在线观看| 成人福利av| 国产精品久久免费视频| 欧美一区二区三区久久久| 欧美做爰爽爽爽爽爽爽| 成人c视频免费高清在线观看| 亚洲女在线观看| 欧美成人性生活| 国新精品乱码一区二区三区18| 久久久久久久免费视频| 99久久久无码国产精品不卡| 性生活黄色大片|