久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

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

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

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

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

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

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

MeasureSpec

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

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 }}

下面我們實現(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樹的布局是如何實現(xiàn)的。

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

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

至此View的布局相關(guān)方法實現(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

下面我們實現(xiàn)ViewGroup,只有一個抽象方法,即將View中的onLayout空實現(xiàn)聲明為抽象的,即要求子類自行實現(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)}

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

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

Text

下面我們實現(xiàn)一個TextView,這里因為我們只是為了說明View測量的原理,因此只支持兩個屬性text與textSize。

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

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

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

如此,整個TextView的測量過程完畢。對于布局過程,由于,layout方法內(nèi)已經(jīng)設(shè)置了自身的坐標(biāo),onLayout保持空實現(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

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

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

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

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

(3)處該方法接收3個參數(shù),spec為Column自身的受到的父View的限制,padding為測量到該View時,Column已經(jīng)用完的大小(因為Column是要將View一個挨著一個排布的,肯定需要這個值),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)層,實現(xiàn)更為簡潔。

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

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

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

如此就得到了(1)處傳給各自View的限制,開始子View的測量,當(dāng)前遍歷到的子View測量完成后,需要獲取測得的子View高度來更新已使用的高度值(9),因為Column是單行縱向排布的,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方法,因為已經(jīng)知道各子View的測量寬高,只需要在此遍歷各子View,逐個設(shè)置坐標(biāo)即可,Column本身的坐標(biāo)設(shè)置已經(jīng)在View中l(wèi)ayout方法中實現(xiàn)。

如此整個類Android的布局重寫完畢。

使用

下面驗證我們代碼:

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)處定義一個布局page,就像在Android中寫的布局文件那樣,只不過這里更像是Flutter中聲明式UI的書寫方式。

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

運行查看打印,與預(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é) 整個View和ViewGroup關(guān)于布局(包含measure,layout)的框架代碼是十分簡單的,具體的布局算法需要各子類自行實現(xiàn)。 ViewGroup關(guān)于子View的遍歷,因為需要重寫,均發(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)的過程。 整個布局流程的根本目的在于確定View中的4個坐標(biāo)值,而這個值是在layout方法中設(shè)置的,因此對layout方法的調(diào)用決定了布局流程的結(jié)果,measure可以說是對這個流程的輔助。

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

標(biāo)簽: Android
相關(guān)文章:
主站蜘蛛池模板: 黄色大片网站在线观看 | 亚洲一区二区三区免费视频 | 国产精品一码二码三码在线 | 亚州精品视频 | 国产精品久久久久久久久久久免费看 | 91精品国产色综合久久不卡98口 | 欧美 日韩 亚洲 一区 | 久久精品国产77777蜜臀 | 成人av电影网址 | 欧洲一级黄 | 久久伊人在 | 久久久久久久久久久久网站 | 色综合久久88色综合天天 | 国产欧美精品一区 | 国产精品久久精品 | 97在线免费观看 | 在线免费观看一区 | 亚洲一区电影 | 国产区视频在线观看 | 欧美第一视频 | 国产精品久久久久久久久久久久 | 欧美一级黄色网 | 国产一区二区三区四区三区 | 精品一二区 | 女同理伦片在线观看禁男之园 | 7777av | 99久久精品一区二区成人 | 日本久久综合 | 欧美日韩第一页 | 伊人精品视频 | 一级片在线免费观看视频 | 日韩不卡一区 | 国产女爽爽视频精品免费 | 在线激情视频 | 91在线视频免费播放 | 免费观看一级毛片 | 一级片欧美 | 黄色一级大片视频 | 精品免费国产一区二区三区四区 | 中文字幕电影在线 | 91精品一区二区 | 日韩不卡| 日韩欧美一区二区三区免费观看 | 99久久婷婷国产综合精品电影 | 欧美午夜精品久久久久免费视 | 国产成人精品一区二区视频免费 | 亚洲国产精品一区二区www | 国产综合精品一区二区三区 | 99精品在线 | 91中文字幕在线 | 乱人伦xxxx国语对白 | 一区二区久久 | 日本精品久久 | 999在线观看精品免费不卡网站 | 欧美a区| 亚洲精品一区二区三区中文字幕 | 亚洲欧美国产精品久久 | 国产一区在线观看视频 | 一级大毛片 | 国产激情精品 | 国产在线观看一区二区三区 | 国产精品久久久久久久久久久久久 | 国产精品91久久久久 | 欧美成人免费在线视频 | 91免费观看视频 | 天天澡天天狠天天天做 | 亚洲精品一区二区三区99 | 亚洲精品乱码久久久久久蜜桃91 | 91porn在线 | 国内自拍第一页 | 婷婷色国产偷v国产偷v小说 | www.国产精品 | 国产传媒一区 | 国产精品一区二区三 | 久久久精品一区 | 日本不卡一区二区 | 国产精品一区二区视频 | 青青久草 | 91嫩草在线 | 日韩精品一二三区 | 99亚洲国产 | 黄色一级网站视频 | 天天射射天天 | 大乳videos巨大吃奶 | 国产成人亚洲综合 | 精品一二三区 | 久操视频在线观看 | 羞羞视频免费观 | 国产精品久久久久久久久久久久午夜片 | 操到爽| 欧美日韩亚洲视频 | 成人在线播放 | 精品视频一区二区在线观看 | 久久久久久久久久国产精品 | 99爱视频 | 日韩精品一二三 | 国产免费自拍视频 | 一区二区三区四区在线 | 欧美在线播放一区二区三区 | 日韩av一区二区在线观看 | 国产成人精品久久 | 国产天天操 | 欧美在线综合 | 亚洲36d大奶网| 亚洲国产精品久久久久久 | 在线中文字幕视频 | 中文字幕91视频 | 日韩成人一区 | 男人的天堂视频网站 | 精品免费一区二区 | 欧美1级 | 奇米影视奇米色777欧美 | 国产欧美精品一区二区三区 | 999国产一区二区三区四区 | 日韩成人精品视频在线观看 | www.伊人.com| 欧美日韩成人一区 | 亚洲第一中文字幕 | 天天操妹子 | 久久久国产一区二区三区 | 成人av网站免费观看 | 国产一区 欧美 | 五月天婷婷免费视频 | 国产精品1 | 免费观看成人性生生活片 | 欧美在线 | 亚洲 | 亚洲国产字幕 | 99re在线| 九九热re| 福利影院在线观看 | 色综合天天综合网国产成人网 | 日本激情视频一区二区三区 | 网站av | a毛片国产 | 精品一级 | 九九99 | 一区二区在线免费观看 | 国产精品69毛片高清亚洲 | 精品国产31久久久久久 | 日韩精品一区二区三区在线播放 | 国产精品一区在线 | 国产精品毛片在线 | 久久久久一区二区三区 | 亚洲专区国产精品 | 欧美亚洲国产一区 | 欧美午夜影院 | 久久综合九色综合欧美狠狠 | 成人免费视频网站在线观看 | 久久国产一 | 高清国产午夜精品久久久久久 | 日韩中文字幕电影 | 午夜不卡一区二区 | 国内精品一级毛片国产99 | 精品一二三区在线观看 | 女人毛片| 一级黄色影片在线观看 | a黄视频| 国产精品美女久久久久久久久久久 | 免费观看一级特黄欧美大片 | 三级欧美在线观看 | 欧美一级在线观看视频 | 日视频 | av一道本| 日本黄色免费播放 | 亚洲精选久久 | 久久久99精品免费观看 | 日韩国产一区二区三区 | 久久久国产一区二区三区 | 久久影视精品 | 色婷婷狠狠 | 一级黄视频 | 九色av| 成人免费看电影 | 成年人网站在线免费观看 | 国产日韩欧美一区 | 欧美日韩视频在线观看一区 | av一二三区| 久久视频精品 | 久久久久久久久国产成人免费 | 中文字幕在线精品 | 九九久久精品 | 四虎884a| 成人a视频在线观看 | 国产精品久久久久久一区二区三区 | 久久99这里只有精品 | 成人一级电影在线观看 | 美女主播精品视频一二三四 | 91视频黄色| 国产精品亚洲第一 | a级在线免费视频 | 亚洲精品影院在线 | 欧美午夜视频在线观看 | 国产精品一区二区三区四区 | 国产91综合一区在线观看 | 国产成人久久 | 久久人人爽人人爽人人片亚洲 | 国产一区二区视频免费 | 国产精品久久电影观看 | 国产乱码一区二区三区 | 久久69精品久久久久久久电影好 | 一区中文字幕 | 亚洲精品片 | v亚洲| 日本在线观看一区二区 | 精品国内| 国产69精品99久久久久久宅男 | 亚洲欧洲日本国产 | 国产精品片aa在线观看 | 久久免费视频观看 | 91精品国产人妻国产毛片在线 | 欧美黄色片免费观看 | 老司机精品福利视频 | 国产成人在线看 | 亚洲精品乱 | 91性高湖久久久久久久久网站 | 欧美日韩高清在线一区 | 国产日韩欧美一区 | 日韩亚洲视频 | 亚洲精品国精品久久99热 | 久久精品免费一区二区 | 日韩欧美一区二区三区视频 | 国产成人精品综合 | 91精品国产人妻国产毛片在线 | 99r精品在线| 欧美成人激情视频 | 久久久久久久久一区二区三区 | 看毛片网 | 欧美一级淫片007 | 国产成人免费视频网站高清观看视频 | 中文天堂av | 国产片在线观看 | 国产一区不卡视频 | 国产偷国产偷精品高清尤物 | 亚洲国产精品视频 | 欧美一级全黄 | 久久人人爽人人爽人人片av不 | 亚洲啊v| 精品久久久久久久久久久 | 激情毛片| 亚洲欧美综合 | 亚洲国产91 | 中文字幕av在线播放 | 性做久久久久久久免费看 | 美女91 | 亚洲国产一区二区三区, | 日韩一区二区精品 | 黄色小视频免费观看 | 国产猛男猛女超爽免费视频网站 | 99日韩| 中文字幕免费在线观看视频 | 久久综合久久久 | 色女人的天堂 | 日韩av免费在线播放 | 色视频一区二区三区 | av中文在线 | a成人| 狠狠躁天天躁夜夜添人人 | 国产精品视频免费看 | 久久se精品一区精品二区 | 国产一二在线 | 99爱视频| 亚洲成人精品在线观看 | 九九热精品在线 | 亚洲精品国产电影 | 中文字幕在线观看 | 精品99视频| 国产亚洲欧美一区 | 国产精品不卡视频 | 操到爽| 偷拍自拍网站 | 午夜私人影院在线观看 | 欧洲毛片 | 国产不卡在线 | 国产成人精品一区二区三区四区 | 岛国av免费 | 午夜成年人| 欧洲黄色 级黄色99片 | 日本三级在线观看中文字 | 日韩一区二区三区在线视频 | 欧美人妖在线 | 亚洲91在线 | 成人午夜影院 | 国产大片黄色 | 久久久精品网 | 成人影院www在线观看 | 日韩精品亚洲专区在线观看 | 亚洲免费视频在线观看 | 国产免费拔擦拔擦8x高清在线人 | 一区二区三区中文字幕 | 欧美精品一区二区在线观看 | 国产精品久久久久久久久免费桃花 | 91精品国产99久久久久久红楼 | 最新午夜综合福利视频 | av中文字幕在线观看 | 国产一级一级片 | 亚洲一区在线日韩在线深爱 | 国产精品久久久久久久久久久久 | www.中文字幕.com | 欧美日韩免费一区二区三区 | 91综合视频在线观看 | 日本在线播放 | 亚洲精品国产a久久久久久 国产毛片毛片 | 亚洲黄色高清视频 | 国产一级中文字幕 | 国产综合视频 | 日韩精品一区二区三区中文在线 | 午夜影院在线观看 | 精品免费久久久久 | 国产精品久久久久毛片软件 | 欧美一区二区伦理片 | 成人黄色一级网站 | 天堂√在线观看一区二区 | 日本黄色一级 | 日日人人 | 在线观看不卡一区 | 成人h动漫免费观看网站 | 精品久久久精品 | 污视频免费网站观看 | 国产美女av| 操操操日日日 | 国产不卡视频在线观看 | 国产一级片播放 | 精品中文字幕在线 | 欧美一级播放 | 欧美一区二区精品 | 国产91网址| 免费av电影观看 | 亚洲国产成人av好男人在线观看 | 国产精品久久久久久久免费大片 | 欧美精品tv | 亚洲成人福利 | 久久成人免费 | 欧美日韩午夜 | 欧美一级片在线观看 | 999视频网| 精品久久久久久久 | 久久久久久久99精品免费观看 | 四色成人av永久网址 | 午夜精品久久久久久久星辰影院 | 成人午夜精品一区二区三区 | 中文字幕在线导航 | 国产日韩一区 | 精品久久久久久久久久久院品网 | 国产精久久久久 | 久久久久久电影 | 亚洲一区二区三区久久 | 日本一级毛片视频 | 国产成人中文字幕 | 成人精品国产 | 国产精品高清在线 | 国产毛片一区二区 | 精品日韩一区二区三区 | 超碰免费在线观看 | 91最新网站 | 亚洲欧美第一页 | 狠狠爱www人成狠狠爱综合网 | 日本成人小视频 | 亚洲a网 | 久久久国产一区二区 | 中文精品一区二区三区 | 天天综合网91 | 国产精品美女久久久久久久久久久 | www.色94色.com| 久久国产精品99久久久久久老狼 | www.视频在线观看 | 亚洲成人网一区 | 91久久精品一区 | 久久亚洲天堂 | 亚洲欧美自拍视频 | 久久久久久久成人 | 91激情视频| 亚洲电影一区二区 | 黄色毛片免费看 | 欧美日韩综合视频 | 中文字幕日韩欧美一区二区三区 | 狠狠av| 美女福利网站 | 亚洲高清视频一区 | 一级毛片一级毛片一级毛片 | 欧美日韩一区二区电影 | 我要看免费黄色片 | 亚州国产精品视频 | 国产精品久久久久久久久免费桃花 | 欧美日韩精品一区二区在线播放 | 亚洲最新中文字幕 | 日韩日韩日韩日韩日韩日韩日韩 | 一区二区免费视频 | 亚洲福利一区 | 国产在线一区二区三区 | www.国产 | 女人毛片a毛片久久人人 | 天天干网 | 日韩天堂| 欧美激情一区 | 欧美日韩国产综合在线 | 国产乱叫456 | 欧美大片一区 | 成人看片在线观看 | 亚洲男人天堂2023 | 女人夜夜春高潮爽av片 | 91久久| 九色91在线 | 激情999 | 久久久久久久久久影院 | 亚洲视频在线观看 | 欧美久久久久久久久久伊人 | 91天堂在线观看 | 国产成人91 | 69av在线视频 | 欧美日韩成人在线 | 精品国产不卡一区二区三区 | 国产精品久久久久久久久 | 久久噜噜噜精品国产亚洲综合 | 日本久久网站 | 亚洲精彩视频 | 欧美综合久久 | 日韩一区二区免费视频 | 国产精品国产成人国产三级 | 亚洲精品福利在线 | 在线视频亚洲 | 日本精品一区 | 色com| 久日精品 | 国产精品久久久久久久午夜 | 视频一区久久 | 亚洲精品在线免费观看视频 | 国产免费视频 | 老司机福利在线视频 | 国产精品久久精品久久 | 久久久国产精品视频 | 久久精品99 | 天天操网 | 国产精品欧美一区二区三区不卡 | 亚洲大片免费观看 | 久久精品一级 | 伊人网在线视频免费观看 | 欧美国产日韩在线 | 99国产精品 | 97人人做人人人难人人做 | 久久手机视频 | 麻豆一区 | 中文在线a在线 | 91亚洲高清 | 国产精品久久 | 中文在线播放 | 午夜国产精品成人 | av在线一区二区三区 | 91色在线 | 中文字幕亚洲精品 | 午夜精品一区二区三区免费视频 | 伊人网av | 日韩在线播放欧美字幕 | 国产精品毛片久久久久久久 | 男女羞羞视频在线观看 | 日韩精品一区二区三区在线观看 | 97色综合 | 欧美精品一区在线 | 久久精品视频亚洲 | 国变精品美女久久久久av爽 | 天天射天天干 | 黄色免费观看 | 操人网| www.avtt天堂网 | 国产女人爽到高潮免费视频 | 久久久精品网 | 一区在线免费观看 | 91.com在线观看 | 亚洲欧美日韩电影 | 91精品国产综合久久福利软件 | 亚洲精品成人无限看 | 国产精品高潮呻吟久久av野狼 | 久久久久久免费看 | 国产精品www | 99久久国产综合精品女不卡 | 国产激情网址 | 一级黄色片a级 | 超碰人人爱 | 久久在线视频 | 国产xxxx精品 | 簧片av| 午夜影院普通用户体验区 | 欧美一级h| 成人黄色片网站 | 国产一级片 | 国产在线精品一区 | 久草在线免费福利资源 | 操操网站 | 偷派自拍| 男女视频在线 | 色婷婷欧美 | 91精品国产高清久久久久久久久 | 国内精品亚洲 | 久久精品视 | 视频国产一区 | 国产韩国精品一区二区三区 | 国产妇女乱码一区二区三区 | 欧美久久一区二区三区 | 在线精品亚洲欧美日韩国产 | 夜夜天天操 | 欧美日韩在线免费观看 | 成人免费视频网 | 五月天婷婷国产精品 | 亚洲综合视频 | 久久电影一区 | 国产在线免费 | 日韩一二 | 黄a免费| 国产免费拔擦拔擦8x高清在线人 | av黄色一级 | 日韩精品av一区二区三区 | av在线一区二区三区 | 精品久久久久久久久久 | a免费网站| 欧美视频在线免费 | 国产精品com | 亚洲国产高清高潮精品美女 | 日本毛片视频 | 亚洲福利在线播放 | 午夜影晥 | 亚洲狠狠爱 | 欧美黑人一级爽快片淫片高清 | 亚洲欧洲精品一区二区 | 国产精品自产拍在线观看 | 国产精品日产欧美久久久久 | 国产精品毛片久久久久久久 | 国产日韩欧美视频 | 亚洲精品日韩在线 | 欧美日韩亚洲一区 | 欧美国产精品一区二区三区 | 国产精品久久久久久久竹霞 | 天天插狠狠插 | 国产精品久久久久久久久久久免费看 | 第一色网站 | 1000部精品久久久久久久久 | 7777久久| 亚洲成人免费在线观看 | 日韩一区在线视频 | 国产精品视频免费 | 特黄级国产片 | 亚洲精品视频免费看 | 337p日本粉嫩噜噜噜 | 精品视频一区二区 | 中文字幕精品一区久久久久 | 国产激情在线 | 欧美一区二区三区免费电影 | 一级毛片在线播放 | 9999国产精品欧美久久久久久 | 国产亚洲欧美一区二区 | 成人黄色电影小说 | 亚洲三区视频 | 精品国产一区二区三区日日嗨 | 欧美国产在线观看 | 国产精品美女久久久久久久网站 | a一级片在线观看 | 国产日韩一区二区 | www.国产 | 久色91| 九九视频这里只有精品 | 91中文字幕网 | 国产精品亚洲成人 | 中文字幕欧美激情 | 成人片免费看 | 亚洲成人精品影视 | 在线看欧美 | 天天插天天操 | 婷婷国产| 碰在线视频 | 人人草人人 | 国产一区二区精品在线观看 | 亚洲一区二区三区福利 | 日韩欧美国产网站 | 国产一区二区三区在线视频 | 成人av免费在线观看 | 国产高清视频在线 | 天天操天天拍 | 一级电影院 | 亚洲人成人一区二区在线观看 | 国产欧美日韩综合精品一区二区 | 9 1在线观看 | 国产一级毛片国语一级 | 蜜桃av在线播放 | 国产高清自拍 | 99精品热视频 | 成人精品一区二区三区中文字幕 | 免费一区二区 | 亚洲第一页在线 | 亚洲久久 | 亚洲国产精品久久久久久久 | 玖玖精品 | 欧美高清成人 | 国产在线一区二区 | 日本久久久久久 | 日韩一区二区三区在线观看 | 欧美精品一区二区三区四区在线 | 久久精品com| 欧美日韩一区在线 | 国产在线一区二区 | 超碰在线播 | 一级片在线免费观看视频 | 亚洲激情视频在线播放 | 国产日韩欧美综合 | 日本久久久久久 | 亚洲精品乱码久久久久久金桔影视 | 日韩欧美高清视频 | 国产精品久久久久久久久 | 日韩免费在线观看视频 | 情趣视频在线免费观看 | 中文字幕在线免费观看 | 夜夜骑天天操 | 成人福利在线观看 | 久久久一| 中文字幕日韩一区二区 | 91色乱码一区二区三区 | 久久久久久久一区二区 | 午夜影视|