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

Android源碼進階之深入理解View的繪制流程(Draw)機制

開發 前端
三大工作流程始于ViewRootImpl#performTraversals,在這個方法內部會分別調用performMeasure,performLayout,performDraw三個方法來分別完成測量,布局,繪制流程。那么我們現在先從performDraw方法看起。

[[426758]]

前言

前幾篇文章,講述了measure,layout流程等,接下來將詳細分析繪制流程。

測量流程決定了View的大小,布局流程決定了View的位置,那么繪制流程將決定View的樣子,一個View該顯示什么由繪制流程完成;

那我們就開始開車了;

一、performDraw

三大工作流程始于ViewRootImpl#performTraversals,在這個方法內部會分別調用performMeasure,performLayout,performDraw三個方法來分別完成測量,布局,繪制流程。那么我們現在先從performDraw方法看起;

performDraw

  1. private void performDraw() { 
  2.     //... 
  3.     final boolean fullRedrawNeeded = mFullRedrawNeeded; 
  4.     try { 
  5.         draw(fullRedrawNeeded); 
  6.     } finally { 
  7.         mIsDrawing = false
  8.         Trace.traceEnd(Trace.TRACE_TAG_VIEW); 
  9.     } 

里面又調用了ViewRootImpl#draw方法,我們來看看ViewRootImpl#draw:

  1. private void draw(boolean fullRedrawNeeded) { 
  2.     ... 
  3.     //獲取mDirty,該值表示需要重繪的區域 
  4.     final Rect dirty = mDirty; 
  5.     if (mSurfaceHolder != null) { 
  6.         // The app owns the surface, we won't draw. 
  7.         dirty.setEmpty(); 
  8.         if (animating) { 
  9.             if (mScroller != null) { 
  10.                 mScroller.abortAnimation(); 
  11.             } 
  12.             disposeResizeBuffer(); 
  13.         } 
  14.         return
  15.     } 
  16.     //如果fullRedrawNeeded為真,則把dirty區域置為整個屏幕,表示整個視圖都需要繪制 
  17.     //第一次繪制流程,需要繪制所有視圖 
  18.     if (fullRedrawNeeded) { 
  19.         mAttachInfo.mIgnoreDirtyState = true
  20.         dirty.set(0, 0, (int) (mWidth * appScale + 0.5f), (int) (mHeight * appScale + 0.5f)); 
  21.     } 
  22.     //... 
  23.     if (!drawSoftware(surface, mAttachInfo, xOffset, yOffset, scalingRequired, dirty)) { 
  24.                 return
  25.         } 

根據fullRedrawNeeded來判斷是否需要重置dirty區域,最后調用了ViewRootImpl#drawSoftware方法,并把相關參數傳遞進去,包括dirty區域,我們接著看該方法的源碼;

  1. private boolean drawSoftware(Surface surface, AttachInfo attachInfo, int xoff, int yoff, 
  2.             boolean scalingRequired, Rect dirty) { 
  3.     // Draw with software renderer. 
  4.     final Canvas canvas; 
  5.     try { 
  6.         final int left = dirty.left
  7.         final int top = dirty.top
  8.         final int right = dirty.right
  9.         final int bottom = dirty.bottom; 
  10.         //鎖定canvas區域,由dirty區域決定 
  11.         canvas = mSurface.lockCanvas(dirty); 
  12.         // The dirty rectangle can be modified by Surface.lockCanvas() 
  13.         //noinspection ConstantConditions 
  14.         if (left != dirty.left || top != dirty.top || right != dirty.right 
  15.                 || bottom != dirty.bottom) { 
  16.             attachInfo.mIgnoreDirtyState = true
  17.         } 
  18.         canvas.setDensity(mDensity); 
  19.     }  
  20.     try { 
  21.         if (!canvas.isOpaque() || yoff != 0 || xoff != 0) { 
  22.             canvas.drawColor(0, PorterDuff.Mode.CLEAR); 
  23.         } 
  24.         dirty.setEmpty(); 
  25.         mIsAnimating = false
  26.         attachInfo.mDrawingTime = SystemClock.uptimeMillis(); 
  27.         mView.mPrivateFlags |= View.PFLAG_DRAWN; 
  28.         try { 
  29.             canvas.translate(-xoff, -yoff); 
  30.             if (mTranslator != null) { 
  31.                 mTranslator.translateCanvas(canvas); 
  32.             } 
  33.             canvas.setScreenDensity(scalingRequired ? mNoncompatDensity : 0); 
  34.             attachInfo.mSetIgnoreDirtyState = false
  35.             //正式開始繪制 
  36.             mView.draw(canvas); 
  37.         } 
  38.     }  
  39.     return true

實例化了Canvas對象,然后鎖定該canvas的區域,由dirty區域決定,接著對canvas進行一系列的屬性賦值,最后調用了mView.draw(canvas)方法,

mView就是DecorView,也就是說從DecorView開始繪制;

二、draw源碼詳解

由于ViewGroup沒有重寫draw方法,因此所有的View都是調用View#draw方法,因此,我們直接看它的源碼

  1. public void draw(Canvas canvas) { 
  2.     ....  
  3.     // 1. 繪制本身View背景 
  4.     if (!dirtyOpaque) { 
  5.         drawBackground(canvas); 
  6.     } 
  7.     if (!verticalEdges && !horizontalEdges) { 
  8.         // Step 3, draw the content 
  9.         // 2. 繪制內容,默認空實現 需復寫 
  10.         if (!dirtyOpaque) onDraw(canvas); 
  11.         // 3. 繪制 children  
  12.         dispatchDraw(canvas); 
  13.         drawAutofilledHighlight(canvas); 
  14.         // 4. 分發Draw (單一View空實現,ViewGroup見下面分析) 
  15.         if (mOverlay != null && !mOverlay.isEmpty()) { 
  16.             mOverlay.getOverlayView().dispatchDraw(canvas); 
  17.         } 
  18.         // 5. 繪制裝飾 (前景色,滾動條) 
  19.         onDrawForeground(canvas); 
  20.         return
  21.     } 
  22.     .... 

可以看到,draw過程比較復雜,但是邏輯十分清晰。首先來看一開始的標記位dirtyOpaque,

該標記位的作用是判斷當前View是否是透明的,如果View是透明的,那么根據下面的邏輯可以看出,將不會執行一些步驟,比如繪制背景、繪制內容等;

繪制流程的五個步驟:

  • 對View的背景進行繪制;
  • 繪制View的內容;
  • 對View的子View進行繪制(如果有子View);
  • 分發Draw;

繪制View的裝飾(例如:前景色,滾動條);

1、繪制背景

  1. //繪制背景 
  2. private void drawBackground(Canvas canvas) { 
  3.     final Drawable background = mBackground; 
  4.     if (background == null) { 
  5.         return
  6.     } 
  7.     // 根據在 layout 過程中獲取的 View 的位置參數,來設置背景的邊界 
  8.     setBackgroundBounds(); 
  9.     // 先嘗試用HWUI繪制 
  10.     if (canvas.isHardwareAccelerated() && mAttachInfo != null 
  11.             && mAttachInfo.mThreadedRenderer != null) { 
  12.         mBackgroundRenderNode = getDrawableRenderNode(background, mBackgroundRenderNode); 
  13.         final RenderNode renderNode = mBackgroundRenderNode; 
  14.         if (renderNode != null && renderNode.isValid()) { 
  15.             setBackgroundRenderNodeProperties(renderNode); 
  16.             ((DisplayListCanvas) canvas).drawRenderNode(renderNode); 
  17.             return
  18.         } 
  19.     } 
  20.     final int scrollX = mScrollX; 
  21.     final int scrollY = mScrollY; 
  22.     if ((scrollX | scrollY) == 0) { 
  23.         //調用 Drawable 的 draw 方法來進行背景的繪制 
  24.         background.draw(canvas); 
  25.     } else { 
  26.         // 若 mScrollX 和 mScrollY 有值,則對 canvas 的坐標進行偏移平移畫布 
  27.         canvas.translate(scrollX, scrollY); 
  28.         //調用 Drawable 的 draw 方法來進行背景的繪制 
  29.         background.draw(canvas); 
  30.         canvas.translate(-scrollX, -scrollY); 
  31.     } 

2、繪制View的內容

  1. // 繪制View本身內容,空實現,子類必須復寫 
  2. protected void onDraw(Canvas canvas) { 

這里調用了View#onDraw方法,View中該方法是一個空實現,因為不同的View有著不同的內容,這需要我們自己去實現,即在自定義View中重寫該方法來實現;

3、子View進行繪制

當前的View是一個ViewGroup類型,那么就需要繪制它的子View,這里調用了dispatchDraw,而View中該方法是空實現,實際是ViewGroup重寫了這個方法,那么我們來看看;

  1. @Override 
  2. protected void dispatchDraw(Canvas canvas) { 
  3.     ... 
  4.     //  遍歷子View 
  5.     final int childrenCount = mChildrenCount; 
  6.     ... 
  7.     for (int i = 0; i < childrenCount; i++) { 
  8.         while (transientIndex >= 0 && mTransientIndices.get(transientIndex) == i) { 
  9.             final View transientChild = mTransientViews.get(transientIndex); 
  10.             if ((transientChild.mViewFlags & VISIBILITY_MASK) == VISIBLE || 
  11.                     transientChild.getAnimation() != null) { 
  12.                 more |= drawChild(canvas, transientChild, drawingTime); 
  13.             } 
  14.             transientIndex++; 
  15.             if (transientIndex >= transientCount) { 
  16.                 transientIndex = -1; 
  17.             } 
  18.         } 
  19.         final int childIndex = getAndVerifyPreorderedIndex(childrenCount, i, customOrder); 
  20.         final View child = getAndVerifyPreorderedView(preorderedList, children, childIndex); 
  21.         if ((child.mViewFlags & VISIBILITY_MASK) == VISIBLE || child.getAnimation() != null) { 
  22.             // 調用 drawChild 方法,進行子元素繪制 
  23.             more |= drawChild(canvas, child, drawingTime); 
  24.         } 
  25.     } 
  26.     .... 

4、分發Draw

  1. @Override 
  2. protected void dispatchDraw(Canvas canvas) { 
  3.     ... 
  4.     // 1. 遍歷子View 
  5.     final int childrenCount = mChildrenCount; 
  6.     ... 
  7.     for (int i = 0; i < childrenCount; i++) { 
  8.         while (transientIndex >= 0 && mTransientIndices.get(transientIndex) == i) { 
  9.             final View transientChild = mTransientViews.get(transientIndex); 
  10.             if ((transientChild.mViewFlags & VISIBILITY_MASK) == VISIBLE || 
  11.                     transientChild.getAnimation() != null) { 
  12.                 more |= drawChild(canvas, transientChild, drawingTime); 
  13.             } 
  14.             transientIndex++; 
  15.             if (transientIndex >= transientCount) { 
  16.                 transientIndex = -1; 
  17.             } 
  18.         } 
  19.         final int childIndex = getAndVerifyPreorderedIndex(childrenCount, i, customOrder); 
  20.         final View child = getAndVerifyPreorderedView(preorderedList, children, childIndex); 
  21.         if ((child.mViewFlags & VISIBILITY_MASK) == VISIBLE || child.getAnimation() != null) { 
  22.             // 調用 drawChild 方法,進行子元素繪制 
  23.             more |= drawChild(canvas, child, drawingTime); 
  24.         } 
  25.     } 
  26.     .... 

5、繪制View

所謂的繪制裝飾,就是指View除了背景、內容、子View的其余部分,例如滾動條等,我們看View#onDrawForeground

  1. public void onDrawForeground(Canvas canvas) { 
  2.     //繪制指示器 
  3.     onDrawScrollIndicators(canvas); 
  4.     //繪制滾動條 
  5.     onDrawScrollBars(canvas); 
  6.     final Drawable foreground = mForegroundInfo != null ? mForegroundInfo.mDrawable : null
  7.     if (foreground != null) { 
  8.         if (mForegroundInfo.mBoundsChanged) { 
  9.             mForegroundInfo.mBoundsChanged = false
  10.             final Rect selfBounds = mForegroundInfo.mSelfBounds; 
  11.             final Rect overlayBounds = mForegroundInfo.mOverlayBounds; 
  12.             if (mForegroundInfo.mInsidePadding) { 
  13.                 selfBounds.set(0, 0, getWidth(), getHeight()); 
  14.             } else { 
  15.                 selfBounds.set(getPaddingLeft(), getPaddingTop(), 
  16.                         getWidth() - getPaddingRight(), getHeight() - getPaddingBottom()); 
  17.             } 
  18.             final int ld = getLayoutDirection(); 
  19.             Gravity.apply(mForegroundInfo.mGravity, foreground.getIntrinsicWidth(), 
  20.                     foreground.getIntrinsicHeight(), selfBounds, overlayBounds, ld); 
  21.             foreground.setBounds(overlayBounds); 
  22.         } 
  23.         //調用 Drawable 的 draw 方法,繪制前景色 
  24.         foreground.draw(canvas); 
  25.     } 

到目前為止,View的繪制流程也講述完畢了;

總結

其實繪制這塊還是很重要的,下次還是要繼續講解下;

學如逆水行舟,不進則退;心似平原走馬,易放難收;

一起加油老鐵們

本文轉載自微信公眾號「Android開發編程」

【編輯推薦】

 

責任編輯:姜華 來源: Android開發編程
相關推薦

2021-09-16 06:44:04

Android進階流程

2021-10-15 09:19:17

AndroidSharedPrefe分析源碼

2021-09-17 06:55:50

AndroidLayoutView

2021-09-08 06:51:52

AndroidRetrofit原理

2021-08-24 07:53:28

AndroidActivity生命周期

2021-09-15 07:31:33

Android窗口管理

2021-09-24 08:10:40

Java 語言 Java 基礎

2021-09-10 07:31:54

AndroidAppStartup原理

2021-09-18 06:56:01

JavaCAS機制

2017-05-03 17:00:16

Android渲染機制

2024-12-30 08:02:40

2022-10-11 07:43:34

AndroidSyncGradle 構建

2021-08-17 13:41:11

AndroidView事件

2017-01-13 22:42:15

iosswift

2014-07-15 17:17:31

AdapterAndroid

2017-08-08 09:15:41

前端JavaScript頁面渲染

2021-02-17 11:25:33

前端JavaScriptthis

2017-07-12 14:58:21

AndroidInstant Run

2016-10-26 20:49:24

ReactJavascript前端

2024-06-06 09:58:13

點贊
收藏

51CTO技術棧公眾號

尤物九九久久国产精品的分类 | av网站有哪些| 日本特黄特色aaa大片免费| 蜜桃视频成人m3u8| 亚洲免费播放| 91精品国产综合久久精品| 欧美日韩综合精品| 国产大片aaa| 亚洲综合影院| 1000精品久久久久久久久| 日本午夜精品理论片a级appf发布| 日韩视频在线观看一区二区三区| 国产乱视频在线观看| 中文字幕日韩在线| 欧美视频中文字幕在线| 国产福利一区二区三区在线观看| 日日噜噜夜夜狠狠久久波多野| 校园春色亚洲色图| 91麻豆国产精品久久| 亚洲3p在线观看| 日本少妇xxxx软件| av在线麻豆| 国产一区二区视频在线| 色婷婷综合成人| 欧美三级午夜理伦三级富婆| av资源网站在线观看| 爽好多水快深点欧美视频| 亚洲欧美日韩久久久久久| 好吊妞无缓冲视频观看| 天天干,夜夜爽| 在线日韩av| 日韩精品亚洲元码| 国产福利视频在线播放| 欧美xxx.com| 三级欧美韩日大片在线看| 亚洲精品在线观看视频| 精品视频在线观看一区| 五月婷婷在线观看视频| 美女网站久久| 一区二区三区高清国产| 国产chinesehd精品露脸| 激情久久一区二区| 亚洲欧美区自拍先锋| 亚洲综合中文字幕68页| 久久伊人成人网| 麻豆精品少妇| 在线国产亚洲欧美| 一区二区三区在线视频111| 国产三级视频在线播放| 欧美另类亚洲| 亚洲乱码国产乱码精品精天堂| 91精产国品一二三| 精品视频一区二区三区| 狠狠久久亚洲欧美专区| 五月婷婷综合色| 精品二区在线观看| 亚洲综合二区| 久久伊人精品天天| 亚洲一级Av无码毛片久久精品| 综合毛片免费视频| 国产精品国产自产拍在线| 999在线观看免费大全电视剧| 日韩精品一卡二卡| 欧美日韩亚洲国产精品| 九九热这里只有在线精品视| 性久久久久久久久久| 在线免费观看亚洲| 色综合中文综合网| 九九久久九九久久| 蝌蚪视频在线播放| 国产亚洲午夜高清国产拍精品| 国产一区二区在线免费视频| 久久国产精品波多野结衣| 欧美精美视频| 欧美不卡一区二区三区四区| 成人性做爰aaa片免费看不忠| 中文字幕有码在线视频| 国产日韩精品一区二区三区在线| 欧美精品一区二区三区久久| 国产视频福利在线| 国产精品第一页第二页第三页| 四虎影视永久免费在线观看一区二区三区| 黄色美女网站在线观看| 成人国产精品免费观看视频| 国产欧美欧洲在线观看| 日韩精品成人一区| 国产婷婷精品| 欧美黑人狂野猛交老妇| 99久久99久久精品免费看小说. | 亚洲va欧美va国产综合剧情| www.精品久久| 欧美aⅴ一区二区三区视频| 久久久久久欧美| 伊人在线视频观看| 亚洲三级视频| 国产欧美在线播放| 成人精品在线播放| 国产一区视频网站| 久久国产精品高清| 日本wwwxxxx| 国产91综合一区在线观看| 国产在线久久久| 欧美熟女一区二区| 国产精品网曝门| 天堂av一区二区| 中文字幕中文字幕在线十八区| 五月天激情小说综合| 人妻激情另类乱人伦人妻| 成人在线直播| 欧美性少妇18aaaa视频| 免费网站在线观看黄| 人人精品久久| 欧美精品乱码久久久久久| 免费看黄色一级大片| 丝袜美腿一区| 精品国产凹凸成av人导航| 欧美成人另类视频| 久久香蕉国产| 久久精品久久久久久| 亚洲综合久久av一区二区三区| 成人一区不卡| 日韩专区在线播放| 日韩视频在线观看免费视频| 韩国久久久久| 4438全国亚洲精品在线观看视频| 久久亚洲精品国产| 亚洲综合电影一区二区三区| 91入口在线观看| 亚洲欧美另类综合| 亚洲日本一区二区三区| 国产精品videossex国产高清| av在线一区不卡| 欧美日韩电影一区| 中文字幕一二三| 精品国产一区二区三区不卡蜜臂| 日韩综合中文字幕| 成人黄色激情视频| 国产剧情一区二区三区| 国产视色精品亚洲一区二区| 毛片在线播放网站| 性做久久久久久久久| 男人的天堂日韩| 校园春色另类视频| www.午夜精品| 最近中文在线观看| 欧美激情一区在线观看| 加勒比海盗1在线观看免费国语版| 成人午夜毛片| 精品少妇一区二区三区免费观看| 一级性生活免费视频| 麻豆成人久久精品二区三区红| 亚洲xxxxx性| 成人在线免费看片| 日韩免费观看高清完整版在线观看| 国产xxxxxxxxx| 视频在线不卡免费观看| 国产精品福利片| 欧美一级特黄aaaaaa| 亚洲主播在线观看| 色一情一乱一伦一区二区三区日本 | 免费看日韩av| 午夜视频一区在线观看| 天堂久久久久久| 久久狠狠婷婷| 亚洲欧美99| free性m.freesex欧美| 在线观看日韩高清av| 日韩欧美黄色网址| 国产在线精品视频| 天堂8在线天堂资源bt| 玖玖玖免费嫩草在线影院一区| 97超级碰碰碰久久久| 国产精品一品二区三区的使用体验| av午夜一区麻豆| 亚洲一区二区三区乱码| 麻豆视频在线观看免费网站黄| 在线免费观看日本一区| 中文字幕有码在线播放| 亚洲高清久久| 96pao国产成视频永久免费| 成人在线观看亚洲| 亚洲国产毛片完整版| 影音先锋男人资源在线观看| 亚洲久久视频| 日本精品视频一区| а√在线天堂官网| 精品国产精品网麻豆系列| 五月天婷婷综合网| 懂色一区二区三区免费观看| 国产黄视频在线| av不卡一区二区| 欧美xxxx18性欧美| 96亚洲精品久久久蜜桃| 欧美激情一区三区| 乳色吐息在线观看| 毛片一区二区| 日本福利视频在线观看| 57pao成人永久免费| 97久久精品人人澡人人爽缅北| 9i精品一二三区| 在线观看国产日韩| 久草免费新视频| 国产欧美日本一区二区三区| 国产人妖在线观看| 麻豆一区二区三区| 国内外成人激情视频| 欧美午夜18电影| 96精品视频在线| 免费av不卡| 4438x成人网最大色成网站| 蜜桃av.com| 99久久免费国产| 三日本三级少妇三级99| 久久一二三四| 日韩欧美一区二| 亚洲五月综合| 亚洲最大福利网站| 欧洲成人一区| 91国产一区在线| 青春草视频在线观看| 精品国免费一区二区三区| 在线观看国产成人| 综合在线观看色| 美女久久久久久久久久| 久久久久久穴| 国产69精品久久久久久久| 91精品啪在线观看国产18| 亚洲精品欧美一区二区三区| 性欧美hd调教| 日本久久久久久久| 欧美freesex黑人又粗又大| 欧美激情网友自拍| 超碰在线免费公开| www日韩中文字幕在线看| 91精品大全| 色先锋资源久久综合5566| 国产在线一在线二| 亚洲精品永久免费| 天天综合网天天综合| 亚洲国产美女精品久久久久∴| 蜜臀久久99精品久久久| 精品久久人人做人人爽| 99精品在线视频观看| 欧美精品xxxxbbbb| 一级黄色片在线观看| 欧美日韩一区在线观看| 青青操视频在线播放| www激情久久| 特级西西人体wwwww| 99精品国产热久久91蜜凸| 欧美日韩亚洲一| 亚洲网站在线| 国产精品又粗又长| 国产精品亚洲综合色区韩国| 缅甸午夜性猛交xxxx| 一本色道久久精品| 精品人妻一区二区三区四区在线| 一本色道88久久加勒比精品| 情侣黄网站免费看| 免费一区二区视频| 99九九精品视频| 国产成人午夜精品影院观看视频| 日韩伦理在线免费观看| 亚洲国产裸拍裸体视频在线观看乱了中文 | 亚洲欧美自偷自拍| 亚洲欧美综合v| 亚洲精品综合网| 91高清视频在线| 久久免费公开视频| 午夜私人影院久久久久| 色老头在线视频| 亚洲va国产天堂va久久en| 日本道在线观看| 欧美亚一区二区| 国产黄色片免费看| 色综合天天综合网天天看片| 精品免费囯产一区二区三区| 一区二区日韩电影| 日韩三级一区二区三区| 91国产视频在线观看| 国产免费福利视频| 亚洲黄色在线看| jizz在线免费观看| 欧美国产日韩一区二区在线观看| 性xxxxfreexxxxx欧美丶| 欧美精品videosex极品1| 国产精品25p| 国产欧美韩国高清| 色天下一区二区三区| 在线免费一区| 国产精品久久国产愉拍| 一区二区在线免费看| 石原莉奈在线亚洲三区| 国产高清av片| 久久网这里都是精品| 欧美无人区码suv| 成人免费的视频| 无码人妻一区二区三区在线视频| 蜜桃一区二区三区四区| 四虎成人在线播放| 久久新电视剧免费观看| 青青青在线免费观看| 亚洲你懂的在线视频| 久久中文字幕免费| 精品乱人伦小说| 欧美黑人激情| 国产成人精品一区二区在线| 成人性生活av| 91精品综合久久| 日韩av在线播放网址| 亚洲国产午夜伦理片大全在线观看网站| 欧美69wwwcom| 久无码久无码av无码| 亚洲高清二区| 男人午夜视频在线观看| 国产午夜精品久久久久久免费视| 加勒比婷婷色综合久久| 欧美丝袜丝交足nylons图片| 视频国产在线观看| 亚洲全黄一级网站| www.综合网.com| 68精品久久久久久欧美 | 国产福利一区二区三区在线观看| 欧美顶级大胆免费视频| 欧美日韩在线免费播放| 最新av免费在线观看| 中文字幕不卡的av| 特级毛片www| 日韩大陆欧美高清视频区| 水莓100国产免费av在线播放| 久久影院模特热| 日韩av黄色| 亚洲一区二区三区乱码| 日本aⅴ亚洲精品中文乱码| aaa一级黄色片| 亚洲欧洲日韩一区二区三区| 中文字幕av影视| 日韩欧美国产一二三区| 日本综合在线| 国模精品视频一区二区| 性感美女一区二区在线观看| 久久精品magnetxturnbtih| 亚洲精品九九| 最新国产精品自拍| 91蝌蚪porny九色| 999这里只有精品| 亚洲另类欧美自拍| 伊人久久国产| 深田咏美在线x99av| 青青青伊人色综合久久| 精品视频第一页| 884aa四虎影成人精品一区| 成人国产免费电影| 亚洲bt天天射| 国内精品嫩模av私拍在线观看| 精品伦一区二区三区| 天天操天天色综合| 日本福利在线观看| 欧美精品一区二区免费| 视频精品国内| 午夜久久资源| 蜜臀国产一区二区三区在线播放 | 亚洲一区二区精品视频| 日韩久久久久久久久久| 一区二区三区动漫| 国产精品成人3p一区二区三区| 久久99久久精品国产| 亚洲少妇自拍| 亚洲成人黄色av| 偷拍与自拍一区| 免费一级在线观看播放网址| 国产精品欧美日韩一区二区| 欧洲亚洲视频| 99久久国产宗和精品1上映| 国产精品污网站| 国产 日韩 欧美 精品| 欧美与黑人午夜性猛交久久久| 欧美精品尤物在线观看 | 草莓视频丝瓜在线观看丝瓜18| 国内成+人亚洲| 青青草91视频| 久久无码精品丰满人妻| 国产丝袜高跟一区| 在线免费成人| 国产免费成人在线| 最新国产成人在线观看| 手机福利在线| 91在线视频一区| 国产精品国产三级国产在线观看| 成人在线激情网| 久久综合给合久久狠狠狠97色69| 正在播放木下凛凛xv99| 欧美乱人伦中文字幕在线| 亚洲精品亚洲人成在线观看| 黄页网站大全在线观看| 亚洲国产精品av| 天天操天天操天天干| 国产在线精品成人一区二区三区| 国产亚洲永久域名| 在线看的片片片免费|