黄a在线观看-黄a在线-黄a大片-黄色片在线看-黄色毛片免费-黄色大片网站

您的位置:首頁技術(shù)文章
文章詳情頁

自己實(shí)現(xiàn)Android View布局流程

瀏覽:3日期:2022-09-20 10:51:22

相關(guān)閱讀:嘗試自己實(shí)現(xiàn)Android View Touch事件分發(fā)流程

Android View的布局以ViewRootImpl為起點(diǎn),開啟整個(gè)View樹的布局過程,而布局過程本身分為測量(measure)和布局(layout)兩個(gè)部分,以View樹本身的層次結(jié)構(gòu)遞歸布局,確定View在界面中的位置。

下面嘗試通過最少的代碼,自己實(shí)現(xiàn)這套機(jī)制,注意下面類均為自定義類,未使用Android 源碼中的同名類。

MeasureSpec

首先定義MeasureSpec,它是描述父布局對子布局約束的類,在Android源碼中它是一個(gè)int值,通過位運(yùn)算獲取mode和size,這里我們?yōu)榱朔奖闫鹨妼?shí)現(xiàn)為一個(gè)類:

class MeasureSpec(var mode: Int = UNSPECIFIED, var size: Int = 0) { companion object { const val UNSPECIFIED = 0 const val EXACTLY = 1 const val AT_MOST = 2 }}

同樣包含三種mode,分別表示父布局對子布局沒有限制,父布局對子布局要求為固定值,父布局對子布局有最大值限制。

LayoutParam

LayoutParam在源碼中定義在各種ViewGroup的內(nèi)部,是靜態(tài)內(nèi)部類,用于在該ViewGroup布局中的子View中使用,這里我們定義為頂層類,并且只包含寬高兩種屬性,對應(yīng)于xml文件中的layout_width和layout_height屬性。同樣定義MATCH_PARENT與WRAP_CONTENT。

class LayoutParam(var width: Int, var height: Int) { companion object { const val MATCH_PARENT = -1 const val WRAP_CONTENT = -2 }}

下面我們實(shí)現(xiàn)View與ViewGroup。

View

(1)處我們定義的View的坐標(biāo),和源碼中一致,這里表示的是相對于父View的坐標(biāo),與上篇View相關(guān)文章嘗試自己寫Android View Touch事件分發(fā)中不同,那篇的View的坐標(biāo)是絕對坐標(biāo)。

(2)處定義了padding,(3)處表示measure過程的測量寬高,(4)為布局文件中指定的layoutParam

這些屬性,總結(jié)下來就是(2)(4)由開發(fā)者在布局中指定,(3)通過測量過程由View自己測得,(1)通過布局過程最終確定,也就是我們的目的所在,包括(3)存在的意義也是為了確定(4)中的值。

下面開始編寫測量過程,雖然這些代碼都是重寫的,進(jìn)行了大量的簡化,但整體流程依然和源碼是一致的,能夠更清晰的理解Android的View樹的布局是如何實(shí)現(xiàn)的。

(5)處measure直接調(diào)用onMeasure開始測量過程,而onMeasure這里簡單直接設(shè)置了MeasureSpec中父ViewGroup中的限制值作為測量值就結(jié)束了自己的測量過程(6),因?yàn)閛nMeasure是需要繼承使用的,不同View的測量方式并不相同,所以這里簡單處理。

(7)處開始布局過程,首先調(diào)用setFrame方法將坐標(biāo)保存(8),并調(diào)用onLayout回調(diào),這里為空實(shí)現(xiàn)(9)。

至此View的布局相關(guān)方法實(shí)現(xiàn)完畢。

open class View { open var tag = javaClass.simpleName var left = 0 var right = 0 var top = 0 var bottom = 0//1 var paddingLeft = 0 var paddingRight = 0 var paddingTop = 0 var paddingBottom = 0//2 var measuredWidth = 0 var measuredHeight = 0//3 var layoutParam = LayoutParam( LayoutParam.WRAP_CONTENT, LayoutParam.WRAP_CONTENT )//4 fun measure(widthMeasureSpec: MeasureSpec, heightMeasureSpec: MeasureSpec) { onMeasure(widthMeasureSpec, heightMeasureSpec) }//5 open fun onMeasure(widthMeasureSpec: MeasureSpec, heightMeasureSpec: MeasureSpec) { setMeasuredDimension(widthMeasureSpec.size, heightMeasureSpec.size)//6 } fun setMeasuredDimension(measuredWidth: Int, measuredHeight: Int) { this.measuredWidth = measuredWidth this.measuredHeight = measuredHeight } fun layout(l: Int, t: Int, r: Int, b: Int) { val changed = setFrame(l, t, r, b)//8 onLayout(changed, l, t, r, b) }//7 private fun setFrame(l: Int, t: Int, r: Int, b: Int): Boolean { var changed = false if (l != left || t != top || r != right || b != bottom) { left = l top = t right = r bottom = b changed = true } println('$tag = L: $l, T: $t, R: $r, B: $b') return changed } open fun onLayout(changed: Boolean, l: Int, t: Int, r: Int, b: Int) {}//9 fun resolveSize(size: Int, measureSpec: MeasureSpec): Int { return when (measureSpec.mode) { MeasureSpec.EXACTLY -> measureSpec.size MeasureSpec.AT_MOST -> minOf(size, measureSpec.size) else -> size } }//10}ViewGroup

下面我們實(shí)現(xiàn)ViewGroup,只有一個(gè)抽象方法,即將View中的onLayout空實(shí)現(xiàn)聲明為抽象的,即要求子類自行實(shí)現(xiàn)布局算法,而ViewGroup本身不允許當(dāng)做布局使用。

abstract class ViewGroup(vararg val children: View) : View() { abstract override fun onLayout(changed: Boolean, l: Int, t: Int, r: Int, b: Int)}

如此,整個(gè)Android的View層次結(jié)構(gòu)的骨架已經(jīng)搭建完成了,在源碼中,對于View的布局方面,主要也就干了這么點(diǎn)事情。其他各種各樣的View與ViewGroup均是通過繼承,實(shí)現(xiàn)各自的測量算法(即子View實(shí)現(xiàn)onMeasure),和布局算法(即子ViewGroup實(shí)現(xiàn)onMeasure與onLayout)。

下面我們依托這個(gè)框架各實(shí)現(xiàn)一個(gè)View與ViewGroup。

Text

下面我們實(shí)現(xiàn)一個(gè)TextView,這里因?yàn)槲覀冎皇菫榱苏f明View測量的原理,因此只支持兩個(gè)屬性text與textSize。

只需實(shí)現(xiàn)onMeasure即可,將左右padding相加,并加上字符串長度與字號的乘積作為寬(1),將上下padding相加,并加上字號作為高,當(dāng)然這里我們只是簡單這樣計(jì)算示意,實(shí)際計(jì)算TextView長寬肯定不能這樣來算。

如此算得的長寬就是Text自身理想的長寬,但是,還需要施加上父布局的限制才行,即MeasureSpec,這里即調(diào)用resolveSize,將限制與理想值傳入即可(2)。

resolveSize定義在View節(jié)的(10)處,里面處理邏輯即,當(dāng)限制為固定值時(shí),測量值取限制值,當(dāng)限制上限時(shí),測量值為限制值與理想值取小,當(dāng)限制為不限時(shí),取理想值。

如此,整個(gè)TextView的測量過程完畢。對于布局過程,由于,layout方法內(nèi)已經(jīng)設(shè)置了自身的坐標(biāo),onLayout保持空實(shí)現(xiàn)即可,并不需要重寫。

class Text(private val text: String, private val textSize: Int = 10) : View() { override var tag: String = 'Text($text)' override fun onMeasure(widthMeasureSpec: MeasureSpec, heightMeasureSpec: MeasureSpec) { val width = paddingLeft + paddingRight + text.length * textSize//1 val height = paddingTop + paddingBottom + textSize setMeasuredDimension( resolveSize(width, widthMeasureSpec),//2 resolveSize(height, heightMeasureSpec) ) }}Column

下面定義一個(gè)類似于orientation為vertical的LinearLayout來說明ViewGroup的布局過程。

對于源碼中的LinearLayout,子布局中使用的layout_開頭的布局屬性,對應(yīng)的是LinearLayout內(nèi)部類中的LayoutParams,而這里我們直接使用上面已經(jīng)定義的LayoutParams,相當(dāng)于LinearLayout中有部分功能并未實(shí)現(xiàn),比如layout_margin,layout_weight,layout_gravity,這里我們簡單處理。

在onMeasure中,要做兩件事,第一件事是向父類View一樣測量自己的長寬,即需要調(diào)用setMeasuredDimension;第二件事是對于每個(gè)子View,開始它們的測量,其實(shí),第二件事本身就是第一件的前提,因?yàn)樽覸iew的測量沒有結(jié)束的話,自己的長寬根本就無法確定。

(1)處在循環(huán)中調(diào)用子View的measure開啟它們的測量過程,但需要傳遞給它們限制,即childWidthMeasureSpec和childHeightMeasureSpec,這里通過getChildMeasureSpec方法確定長與寬的限制(2),該方法在源碼中是定義在ViewGroup中的。

(3)處該方法接收3個(gè)參數(shù),spec為Column自身的受到的父View的限制,padding為測量到該View時(shí),Column已經(jīng)用完的大小(因?yàn)镃olumn是要將View一個(gè)挨著一個(gè)排布的,肯定需要這個(gè)值),childDimension是開發(fā)者在布局文件中指定的layout_width或layout_height值。

因此spec有UNSPECIFIED,EXACTLY,AT_MOST三種類型,childDimension有MATCH_PARENT,WRAP_CONTENT和精確值3種類型,這些交織的情況都需要分別考慮。在源碼中,將spec放在外層,childDimension放在內(nèi)層,這里我們將childDimension放在放在外層(4),spec放在內(nèi)層,實(shí)現(xiàn)更為簡潔。

(5)當(dāng)childDimension為MATCH_PARENT,只要忠實(shí)將限制mode傳遞下去即可,大小使用(6)處計(jì)算的剩余大小。

(6)當(dāng)childDimension為WRAP_CONTENT,需限制mode設(shè)為AT_MOST,同樣使用(6)處計(jì)算的剩余大小,但是需要考慮spec.mode為UNSPECIFIED的情況,需要將這種不限制給傳遞下去(7)。

(8)最后對應(yīng)于childDimension為開發(fā)者指定精確值的情況,只要如實(shí)傳遞開發(fā)者指定值即可,不必考慮父布局限制。

如此就得到了(1)處傳給各自View的限制,開始子View的測量,當(dāng)前遍歷到的子View測量完成后,需要獲取測得的子View高度來更新已使用的高度值(9),因?yàn)镃olumn是單行縱向排布的,usedWidth就不需要更新。但需要更新width值,作為Column本身的期望寬度。

(10)當(dāng)遍歷完成后,和上節(jié)Text一樣,將resolveSize返回值傳入setMeasuredDimension即可,如此就完成了Column的測量過程。

class Column(vararg children: View) : ViewGroup(*children) { override fun onMeasure(widthMeasureSpec: MeasureSpec, heightMeasureSpec: MeasureSpec) { var usedHeight = paddingTop + paddingBottom val usedWidth = paddingLeft + paddingRight var width = 0 children.forEach { child -> val childWidthMeasureSpec = getChildMeasureSpec(widthMeasureSpec, usedWidth, child.layoutParam.width) val childHeightMeasureSpec = getChildMeasureSpec(heightMeasureSpec, usedHeight, child.layoutParam.height) child.measure(childWidthMeasureSpec, childHeightMeasureSpec)//1 usedHeight += child.measuredHeight//9 width = maxOf(width, child.measuredWidth) } setMeasuredDimension( resolveSize(width, widthMeasureSpec), resolveSize(usedHeight, heightMeasureSpec) )//10 } private fun getChildMeasureSpec( spec: MeasureSpec, padding: Int, childDimension: Int ): MeasureSpec {//3 val childWidthSpec = MeasureSpec() val size = spec.size - padding//6 when (childDimension) {//4 LayoutParam.MATCH_PARENT -> { childWidthSpec.mode = spec.mode childWidthSpec.size = size }//5 LayoutParam.WRAP_CONTENT -> { if (spec.mode == MeasureSpec.AT_MOST || spec.mode == MeasureSpec.EXACTLY) { childWidthSpec.mode = MeasureSpec.AT_MOST childWidthSpec.size = size } else if (spec.mode == MeasureSpec.UNSPECIFIED) { childWidthSpec.mode = MeasureSpec.UNSPECIFIED childWidthSpec.size = 0//7 } } else -> { childWidthSpec.mode = MeasureSpec.EXACTLY childWidthSpec.size = childDimension//8 } } return childWidthSpec }//2 override fun onLayout(changed: Boolean, l: Int, t: Int, r: Int, b: Int) { var childTop = paddingTop children.forEach { child -> child.layout( paddingLeft, childTop, paddingLeft + child.measuredWidth, childTop + child.measuredHeight ) childTop += child.measuredHeight } }}

而對于onLayout方法,因?yàn)橐呀?jīng)知道各子View的測量寬高,只需要在此遍歷各子View,逐個(gè)設(shè)置坐標(biāo)即可,Column本身的坐標(biāo)設(shè)置已經(jīng)在View中l(wèi)ayout方法中實(shí)現(xiàn)。

如此整個(gè)類Android的布局重寫完畢。

使用

下面驗(yàn)證我們代碼:

fun main() { val page = Column( Text('Marshmallow').apply { layoutParam = LayoutParam( LayoutParam.WRAP_CONTENT, LayoutParam.WRAP_CONTENT ) }, Text('Nougat').apply { layoutParam = LayoutParam( LayoutParam.WRAP_CONTENT, LayoutParam.WRAP_CONTENT ) }, Text('Oreo').apply { layoutParam = LayoutParam( LayoutParam.WRAP_CONTENT, LayoutParam.WRAP_CONTENT ) paddingTop = 10 paddingBottom = 10 }, Text('Pie').apply { layoutParam = LayoutParam( LayoutParam.WRAP_CONTENT, LayoutParam.WRAP_CONTENT ) } ).apply { layoutParam = LayoutParam( LayoutParam.WRAP_CONTENT, LayoutParam.WRAP_CONTENT ) paddingLeft = 10 paddingRight = 10 paddingBottom = 10 }//1 val root = Column(page)//2 root.measure(MeasureSpec(MeasureSpec.AT_MOST, 1080), MeasureSpec(MeasureSpec.AT_MOST, 1920)) root.layout(0, 0, 1080, 1920)//3}

(1)處定義一個(gè)布局page,就像在Android中寫的布局文件那樣,只不過這里更像是Flutter中聲明式UI的書寫方式。

在源碼中布局流程可以簡單的認(rèn)為在ViewRootImpl中發(fā)起,內(nèi)部有performMeasure,performLayout從DecorView開啟整個(gè)布局流程,這里在(2)處的Column就類似于DecorView,下面兩行就類似于ViewRootImpl中perform開頭的方法發(fā)起的布局流程(這里因?yàn)闊o關(guān),我們不考慮draw部分)。

運(yùn)行查看打印,與預(yù)想一致。

Column = L: 0, T: 0, R: 1080, B: 1920Column = L: 0, T: 0, R: 110, B: 70Text(Marshmallow) = L: 10, T: 0, R: 120, B: 10Text(Nougat) = L: 10, T: 10, R: 70, B: 20Text(Oreo) = L: 10, T: 20, R: 50, B: 50Text(Pie) = L: 10, T: 50, R: 40, B: 60總結(jié) 整個(gè)View和ViewGroup關(guān)于布局(包含measure,layout)的框架代碼是十分簡單的,具體的布局算法需要各子類自行實(shí)現(xiàn)。 ViewGroup關(guān)于子View的遍歷,因?yàn)樾枰貙懀l(fā)生在on開頭的方法內(nèi)。而父View的測量寬高的確定本身需要子View的測量寬高,因此,setMeasuredDimension的調(diào)用在onMeasure中的遍歷之后;而父View坐標(biāo)的確定就不需要另外關(guān)注子View了,因此和View一樣在layout方法中設(shè)置,發(fā)生在onLayout對子View的遍歷之前。 measure過程即限制的傳遞過程以及View的期望大小(代碼中的width,height)匹配限制得到測量大小(measuredWidth,measuredHeight)的過程。 整個(gè)布局流程的根本目的在于確定View中的4個(gè)坐標(biāo)值,而這個(gè)值是在layout方法中設(shè)置的,因此對layout方法的調(diào)用決定了布局流程的結(jié)果,measure可以說是對這個(gè)流程的輔助。

以上就是自己實(shí)現(xiàn)Android View布局流程的詳細(xì)內(nèi)容,更多關(guān)于實(shí)現(xiàn)Android View布局流程的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Android
相關(guān)文章:
主站蜘蛛池模板: 天天做天天爱天天综合色 | 天天爽夜夜爽夜夜爽精品视频 | 污视频网站免费 | 日韩精品在线视频 | 97在线看免费观看视频在线观看 | 76少妇精品导航 | 亚洲欧美校园春色 | 在线观看欧美成人 | 免费看片91 | 久久精品视频在线 | xxxxwww一片 | 国产熟人av一二三区 | 日韩精品乱码久久久久久 | 麻豆人人妻人人妻人人片av | 萌白酱国产一区二区 | 欧美人妻一区二区三区 | 亚洲男人天堂网 | 色五月丁香五月综合五月4438 | 同性情a三级a三级a三级 | 亚洲综合色站 | 亚洲无限看 | 久久曹 | 国产又大又粗又爽 | 国产欧精精久久久久久久 | 91夜色视频 | 精品一区二区免费看 | 华人永久免费视频 | 久久精品av | 国产精品国产片 | 久草网视频在线观看 | 天天天操操操 | 久久嫩草视频 | 中文字幕免费在线看线人动作大片 | 国产999精品久久久影片官网 | 国产九九在线观看 | 人禽高h交| 久久久噜噜噜久久 | 国产黄色一级大片 | 亚洲大尺度无码无码专线一区 | 国产精品久久天堂噜噜噜 | 精品国产乱码久久久久久竹菊影视 | 精品无人国产偷自产在线 | 国产放荡av国产精品 | 夜夜高潮夜夜爽国产伦精品 | 欧美激情视频网址 | yjizz国产| 成年午夜性影院 | 波多野结衣在线播放 | 久久嫩草精品久久久久 | 日本狂喷奶水在线播放212 | 媚药一区二区三区四区 | 人妖粗暴刺激videos呻吟 | 亚洲国产不卡 | 人人看人人看 | 国产精品乱码一区二区三区 | 久久加勒比| 在线观看911视频 | 亚洲人成久久婷婷精品五码 | 久久天天躁夜夜躁狠狠85麻豆 | 国模妙妙超大尺度啪啪人体 | 亚洲乱码日产精品bd在线观看 | 午夜色图 | 少妇做爰免费视频网站色黄 | 伊人55| 美女毛片在线看 | 精品一区二区三区波多野结衣 | 9久久久| 后进极品圆润翘臀在线播放 | 18禁免费观看网站 | 北条麻妃一区二区三区四区五区 | 小草社区在线观看播放 | 久久久亚洲成人 | 国产sm主人调教女m视频 | 又色又污又爽又黄的网站 | 偷看农村妇女牲交 | 亚洲高清网 | 日批网站在线观看 | 国产免费专区 | 激情综合一区二区三区 | 中文幕无线码中文字蜜桃 | 精品在线视频免费观看 | 久久99国产亚洲高清观看首页 | 99国产精品国产精品九九 | av在线免 | 伊人资源| 无码av波多野结衣 | 神马午夜激情 | 欧美高h| 国产精品 欧美精品 | 成人一级片网站 | 玖玖精品 | 各种含道具高h调教1v1男男 | 精品毛片一区二区 | 中文字幕女优 | 男男做性免费视频网 | 欧洲高潮视频在线看 | 国产精品高潮露脸在线观看 | 国产精品美女www爽爽爽软件 | 99精品欧美一区二区 | 无码精品人妻一区二区三区人妻斩 | 国产一区精品视频 | 无套内谢少妇毛片 | 毛片毛片毛片毛片毛片毛片毛片毛片 | 男人的天堂一区 | 午夜爱爱网 | 久久久橹橹橹久久久久高清 | 欧美精品在线一区二区三区 | 亚洲a无码综合a国产av中文 | 国产美女在线精品免费观看网址 | 男生女生羞羞网站 | 日日爱69| 亚洲精品无码久久久影院相关影片 | 国产精品污www一区二区三区 | 狠狠躁三区二区久久天天 | 蜜桃精品在线 | 亚洲免费观看av | 亚洲黄色片 | 欧美xxxx精品 | 国产精品精品软件 | 夜夜爽日日澡人人添 | 国产精品一二三区在线观看 | 成人动漫久久 | 日韩小视频在线观看 | 国产123在线 | 久久久亚洲裙底偷窥综合 | 色哟哟网站在线观看 | 波多野结衣一区二区三区在线观看 | 内射爽无广熟女亚洲 | 中文字幕乱码免费看电影 | 91视频污在线观看 | 91国内自产精华天堂 | 中文字幕人妻伦伦 | 亚洲国产美女久久久久 | 国模无码视频一区 | 国产精品一区久久久 | 黑人巨大精品欧美一区二区免费 | 亚洲欧美中文日韩在线v日本 | 日本理伦片973影视 日本理论片在线 | 欧美一区二区免费 | 无遮挡aaaaa大片免费看 | 中文无码成人免费视频在线观看 | 国产农村老太xxxxhdxx | 国产成人欧美一区二区三区一色天 | av伦理在线 | 国产露脸久久高潮 | 中文字幕在线免费观看视频 | 日本二区在线观看 | 欧美精品一区视频 | 天天射天天干天天操 | 黄色录像毛片 | 国产成人久久久精品二区三区 | 特黄特色大片免费视频大全 | 精品久久久久久亚洲综合网 | 殴美一级黄色片 | 欧美日韩精品一区二区在线播放 | 松岛枫av在线一区二区 | 欧美极品少妇性运交 | 午夜福利理论片高清在线 | 亚洲精品成人久久久 | 少妇高潮大叫好爽喷水 | 一本岛高清乱码2020叶美 | 色噜噜一区二区 | 少妇偷乱偷乱视频在线 | 日韩av免费网址 | 久久久久久久97 | 特大黑人娇小亚洲女 | 姑娘第5集高清在线观看 | 操到喷水| 毛片国产精品 | 亚洲第一成年人网站 | 精品无码黑人又粗又大又长 | 亚洲香蕉av | 翘臀后进少妇大白嫩屁股 | 国产三香港三韩国三级古装 | 91精品国产爱久久丝袜脚 | 久久香焦 | 日日干天天 | 国产一区二区三区高清在线观看 | 国产成人精品微拍视频网址 | 欧美最猛黑人xxxxx猛交 | 成人区人妻精品一区二区不卡网站 | 国产免费乱淫av | 亚洲欧美视频二区 | 亚洲日韩国产一区二区三区 | 中文成人无字幕乱码精品区 | 在线观看av网页 | 蜜桃精品免费久久久久影院 | 亚洲最大成人综合 | 欧美激情xxx| 99久久精品费精品国产 | 性欧美视频 | 四虎国产精品成人免费影视 | 九九re6热在线视频精品66 | 一本一本久久a久久精品综合不卡 | 国产精品高清网站 | 欧美精品一区二区三区制服首页 | 女性无套免费网站在线看动漫 | 牲交欧美兽交欧美 | 亚洲国产日韩一区 | 免费观看全黄做爰大片小说 | 亚洲已满18点击进入在线看片 | 国产精品麻豆色哟哟av | 日本www.小久久 | 色婷婷综合久久久久中文 | 亚洲小视频在线观看 | 午夜第一页 | 天天色综合天天 | 中文日韩v日本国产 | a√天堂中文 | 婷婷久久综合九色综合 | 国产欧美激情视频 | 农村末发育av片一区二区 | 超h高h污肉校园np在线观看 | sese国产| 天天躁恨躁夜躁2020优势对比 | 欧美人狂配大交3d怪物一区 | 亚洲天堂av片 | 国产一区二区三区欧美 | 亚洲视频中文字幕在线观看 | 成人aaa视频| 91视频播放 | 美国美女群体交乱 | 中国女人真人一级毛片 | 中文字幕日韩一区二区三区不卡 | 日韩欧美一卡二卡 | 精品国精品国产自在久国产87 | 自拍偷拍免费 | 欧美理论片在线观看 | 国产精品国产精品国产专区不卡 | 伊人精品久久久大香线蕉 | 日本亚洲欧洲无免费码在线 | 啪啪在线视频 | 狠狠色综合7777久夜色撩人 | 91免费高清视频 | 久久成人18免费网站 | 亚洲视频一二三 | 久久久久亚洲精品中文字幕 | va在线播放 | 乱亲女秽乱长久久久 | 色婷婷欧美在线播放内射 | 日韩视频一区二区在线观看 | 台湾一级视频 | 夜夜躁狠狠躁日日躁 | 天堂网在线播放 | 五月伊人网 | 一本到不卡 | 狠狠色丁香久久婷婷综合五月 | 国产综合久久久 | 五月丁香六月激情综合在线视频 | 亚洲熟妇av日韩熟妇在线 | 波多野结衣人妻 | 99视频免费观看 | 农村老女人av| 欧美绿帽合集xxxxx | 成年人免费看毛片 | 成人免费视频7777777 | 亚洲一卡一卡二新区无人区 | 日产国产亚洲精品系列 | 成人免费看黄yyy456 | 亚洲日本韩国欧美云霸高清 | 亚洲欧美日韩综合在线 | 欧美黑人又粗又大又爽免费 | 韩国v欧美v亚洲v日本v | 男男做性免费视频网 | 午夜小视频在线观看 | 亚洲va欧美va | 国产一级淫片免费放大片 | 在线无码va中文字幕无码 | 欧美成人免费在线视频 | 国产午夜精品久久久久久久久久 | 国产看真人毛片爱做a片 | 老司机黄色影院 | 亚洲国产精品久 | 精品国产乱码久久久久久老虎 | 国产精选免费进入 | 丰腴饱满的极品熟妇 | 国产精品人妖ts系列视频 | 国产白丝袜喷白浆毛片av | 国产成人精品免费看视频 | 中国精品久久久 | 午夜福利理论片高清在线观看 | 欧美男女交配视频 | 中文字幕日本在线观看 | 国产精品久久777777毛茸茸 | 毛片在线免费观看视频 | 乱淫av | 激情欧美日韩一区二区 | 黄色在线小视频 | 人与鲁性猛交xxxx | 亚洲 国产 日韩 欧美 | 肉体裸交137日本大胆摄影 | 欧美日韩在线视频观看 | 久久综合精品国产一区二区三区无码 | 国产精品成人av性教育 | 欧美99视频 | 中文字幕亚洲日韩无线码 | 色婷婷综合中文久久一本 | 波多野结衣av一区二区三区中文 | 亚洲午夜精品视频 | 日韩区一区二 | 男男做性免费视频网 | 年代肉高h喷汁呻吟快穿 | 成人网站免费观看入口 | 操操干干| 91色偷偷| 亚色中文成人yase999co | 亚洲女同在线观看 | 欧美三级在线播放 | 美女又爽又黄视频毛茸茸 | 欧美精品videossex88 | 乌克兰极品少妇xxxx做受小说 | 99国产精品久久久蜜芽 | 色婷婷蜜桃| 亚洲黄色成人 | 伊人久久爱 | 欧美一级网址 | 男女做www免费高清视频网站 | 国产精品久久久久久久妇 | 国产免费一级特黄录像 | 天天综合网网欲色 | 中文字日产幕乱五区 | 亚洲三级网| 亚洲欧美国产双大乳头 | 国产精品黑丝 | 欧美韩一区二区三区 | 92看片淫黄大片看国产片图片 | 深夜福利亚洲 | 欧洲熟妇精品视频 | 国产精品区一区二区三在线播放 | 亚洲富人天堂视频 | 日日摸日日碰夜夜爽无码 | 屁屁影院ccyy备用地址 | 国产99久久久久久免费看农村 | 毛片基地免费观看 | 日韩av在线看免费观看 | 精品人妻人人做人人爽 | 色图插插插 | 97久久超碰精品视觉盛宴 | xxxx18日本| 99热最新精品 | 亚洲精品无码午夜福利中文字幕 | 日韩久操 | 丰满熟妇偷拍洗澡毛茸茸 | 99在线国产| 影虎的最新视频 | 亚洲日本在线电影 | 欧美激情综合五月色丁香 | 色视频在线观看视频 | 人人干人人爽 | 情侣酒店偷拍一区二区在线播放 | 日韩视频免费观看 | 天天av天天翘 | 青草视频在线观看视频 | av黄色在线观看 | 天堂аⅴ在线最新版在线 | 日韩精品中文字幕无码一区 | 少妇诱惑av | avtt亚洲| 亚洲欧美国产免费综合视频 | 8av国产精品爽爽ⅴa在线观看 | 中文字幕精品一区久久久久 | 国产精品黑色丝袜久久 | 久福利| 熟妇人妻无乱码中文字幕 | 黄色网址在线免费看 | 东北女人毛多水多牲交视频 | 欧美亚洲欧美 | 天堂中文av在线 | 中文字幕无码无码专区 | 国产欧美精品区一区二区三区 | 性啪啪chinese东北老女人 | 熟妇人妻av中文字幕老熟妇 | 国产精品久久久久久无毒偷食禁果 | 蜜桃视频在线观看www社区 | 国产精品久久久久久久久久免费 | 午夜精品久久久久久久四虎 | 精品国产乱码91久久久久久网站 | 久久亚洲少妇 | 欧洲成人一区 | 特级毛片内射www无码 | 亚洲成人一区 | 美女100%挤奶水视频吃胸网站 | 色综合色狠狠天天综合色 | 亚洲国产成人精品无码区99 | 国产成人精品优优av | 538在线精品 | 亚洲自拍偷拍一区二区 | 精品国产免费第一区二区三区 | 欧美性受黑人性爽 | 毛茸茸亚洲孕妇孕交片 | 国产区女主播在线观看 | 中文字幕+乱码+中文字幕无忧 | 亚洲精品国偷拍自产在线观看蜜臀 | 久久综合九色综合久99 | 日韩视频在线观看免费 | 欧美一极片 | 国产成人av在线播放 | 最近中文字幕在线中文高清版 | 亚洲色鬼| 国内精品伊人久久久久av影院 | 国产清纯粉嫩学生白丝在线观看 | 亚洲精品乱码久久久久久日本 | 国产精品九九视频 | 日韩毛片儿 | 中国女人大白屁股ass | 天天干干干干干 | 麻豆视频在线观看 | 人妻插b视频一区二区三区 亚洲毛片av日韩av无码 | 宅男av在线| xxxx少妇高潮毛片新婚之夜 | 无码少妇一区二区三区免费 | 无码h黄肉动漫在线观看 | 国产淫语对白粗口video | 国产乱淫av片杨贵妃 | 国产免费人人看 | 麻豆视频官网 | 久久久久久久国产精品影院 | 一个添下面两个吃奶把腿扒开 | 久久久久久久久久久国产精品 | 88国产精品久久现线拍久青草 | 欧美内射深插日本少妇 | 欧美二区三区91 | 精品免费视频一区二区 | 懂色av一区二区三区免费观看 | 中文精品欧美无线码一区 | 国产高清女同学巨大乳在线观看 | 亚洲一区av在线观看 | 国产v综合v亚洲欧美久久 | 天天色棕合合合合合合合 | av午夜久久蜜桃传媒软件 | 亚洲欧美日韩国产成人精品 | 国产激情视频在线播放 | 国产精品综合在线 | 欧美丰满熟妇xxxx性 | 国产婷婷精品任我爽欧美 | 一区二区国产精品 | 女同重口另类在线观看 | 99久久精品免费看国产 | 国产suv精品一区二区五 | 91精品国产综合久久福利软件 | 免费人成在线观看视频高潮 | 啪在线视频 | 日本黄a三级三级三级 | 亚洲精品sm一区二区 | 欧美成人三级视频 | 国产精品一区在线看 | 久久最新网址 | 91九色丨porny丨朋友 | 在线观看麻豆 | 成人在线观看a | 欧美在线性视频 | 国产精品无套粉嫩白浆在线 | 7777奇米四色眼影国产馆 | 青青偷拍视频 | а天堂中文官网 | 亚洲综合小说 | 欧美成在线 | 青草av.久久免费一区 | 狠狠躁日日躁夜夜躁2022麻豆 | 制服诱惑一区二区 | 欧美日韩一区二区三区69堂 | 欧美性猛交xxxx乱大交极品 | 久久福利网 | 九一国产精品 | 亚洲激情一区二区 | 精品少妇人妻av一区二区三区 | 美女裸体跪姿扒开屁股无内裤 | 一区免费观看 | 在线免费观看av网 | 午夜视频在线免费 | 99热99re6国产在线播放 | 好吊妞视频在线观看 | 国内偷自拍性夫妇 | 天天拍夜夜添久久精品 | 希岛婚前侵犯中文字幕在线 | 四虎国产精品永久在线 | 国产91热爆ts人妖月奴 | 丁香婷婷深情五月亚洲 | 在线亚洲高清揄拍自拍一品区 | 日韩超碰 | 久久亚洲精中文字幕冲田杏梨 | 三女同志亚洲人狂欢 | 亚洲在av极品无码天堂手机版 | 亚洲日韩小电影在线观看 | 99久久久久久久久久久 | 男女无套免费视频网站 | 色婷婷激情一区二区三区 | 韩国不卡av | 日本精品一二三 | 熟妇与小伙子matur老熟妇e | 99热精品国产一区二区在线观看 | 日韩理论在线观看 | 国产精品第二页 | 国产精品第十页 | 日本少妇被黑人xxxxx | 丝袜av网站 | 日韩在线欧美在线 | 国产精品观看 | 亚洲国产婷婷六月丁香 | 天天久久| 狂野欧美性猛交xxxxhd | 综合久久国产九一剧情麻豆 | 黄色一级片免费播放 | 亚洲高清视频在线观看 | 日本一级淫片色费放 | 成年人视频在线播放 | 粉嫩绯色av一区二区在线观看 | 国产一区久久久 | 在线观看黄| 日韩成人大屁股内射喷水 | 日日夜夜干 | 吸咬奶头狂揉60分钟视频 | 欧美一级三级 | 日韩午夜一区二区三区 | 99久久精品国产免费 | 午夜肉体高潮免费毛片 | 欧美午夜aaaaaa免费视频 | 欧美三级乱人伦电影 | 在线观看免费黄色 | 蜜桃视频色 | 综合爱爱网 | 国产免费一级淫片a级中文 国产免费一区 | 亚洲精品拍拍拍在线观看 | 性猛交ⅹxxx富婆video | 欧美激情综合色综合啪啪五月 | 影音先锋成人资源网 | 女主和前任各种做高h | 免费国产黄色网址 | 18禁毛片无遮挡嫩草视频 | 农村激情伦hxvideos | 九九亚洲视频 | 香蕉久草| 台湾av毛片| 久久国产欧美日韩精品图片 | 日日碰狠狠丁香久燥 | 一本加勒比北条麻妃 | 久久国产劲爆∧v内射-百度 | 日韩欧美一区天天躁噜噜 | 亚洲精品久久久久久久久久久久久 | 91精品国产色综合久久久浪潮 | 麻豆91精品91久久久的优点 | 精品少妇ay一区二区三区 | 国产第四页 | 性开放少妇xxxxⅹ视频蜜桃 | www.com色| 久久久影院 | 懂色av噜噜一区二区三区av | 男人网站在线观看 | 久久不见久久见免费视频4 国产真人做爰毛片视频直播 | www夜插内射视频网站 | 亚洲爆乳无码精品aaa片蜜桃 | av在线亚洲欧洲日产一区二区 | 国产精品第12页 | 欧美精品黑人粗大 | 91免费国产视频 | 热久久久久久久久 | 欧美成人黄色 | 中文字幕av无码一区二区三区 | 女同久久另类99精品国产 | 福利一区二区 | 亚洲精品乱码久久久久久金桔影视 | 怡红院成永久免费人全部视频 | 噜噜噜视频在线观看 | 国产精品久久777777 | 青草av.久久免费一区 | 国产天堂一区 | 午夜精品久久久久久久99樱花 | 日韩精品一区二区三区色欲av | 中文人妻无码一区二区三区在线 | 成人一级免费视频 | 国产高潮在线 | 欧美一级做一级爱a做片性 欧美一极片 | 日本福利片在线观看 | 奇米影视777中文久久爱图片 | 亚洲精品456在线播放第一页 | 欧美精品久久久久久久久老牛影院 | 97久久精品人人 | 嫩草av久久伊人妇女超级a | 亚洲欧美一区二区成人片 | 亚洲丝袜天堂 | 天堂岛av| 午夜一二三 | 九九视频免费观看 | 中文字字幕在线中文 | 粉嫩欧美一区二区三区 | 久激情内射婷内射蜜桃人妖 | 色欲久久久天天天综合网精品 | 四面虎影最新播放网址 | 高潮白浆女日韩av免费看 | 免费观看一区二区三区 | 国产亚洲精品久久久97蜜臀 | 人妻少妇偷人精品视频 | 92成人午夜福利一区二区 | 国产老熟妇精品观看 | 无码人妻丰满熟妇区五十路 | 91中文在线观看 | 国产乱弄免费视频 | 精品不卡在线 | 婷婷久久网| 日日摸夜夜添夜夜添欧美毛片小说 | 日韩一区二区三区在线看 | 亚洲精品有限公司 | 欧美日韩少妇精品 | 国精品产品区三区 | 五月丁香六月激情综合在线视频 | 国产精品99在线观看 | 免费高清黄色 | 四虎网站在线 | 亚洲精品乱码久久久久v最新版 | 国产裸体写真av一区二区 | www.午夜av| 五月激情婷婷丁香综合基地 | 美女撒尿毛片视频免费看 | 国产九色蝌蚪 | 中文字幕视频免费 |