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

一篇文章徹底搞懂Android事件分發(fā)機(jī)制

移動(dòng)開(kāi)發(fā) Android
在android開(kāi)發(fā)中會(huì)經(jīng)常遇到滑動(dòng)沖突(比如ScrollView或是SliddingMenu與ListView的嵌套)的問(wèn)題,需要我們深入的了解android事件響應(yīng)機(jī)制才能解決,事件響應(yīng)機(jī)制已經(jīng)是android開(kāi)發(fā)者必不可少的知識(shí)。

前言

在android開(kāi)發(fā)中會(huì)經(jīng)常遇到滑動(dòng)沖突(比如ScrollView或是SliddingMenu與ListView的嵌套)的問(wèn)題,需要我們深入的了解android事件響應(yīng)機(jī)制才能解決,事件響應(yīng)機(jī)制已經(jīng)是android開(kāi)發(fā)者必不可少的知識(shí)。面試找工作的時(shí)候也是面試官經(jīng)常會(huì)問(wèn)的一個(gè)問(wèn)題。

涉及到事件響應(yīng)的常用方法構(gòu)成

用戶在手指與屏幕接觸過(guò)程中通過(guò)MotionEvent對(duì)象產(chǎn)生一系列事件,它有四種狀態(tài):

  • MotionEvent.ACTION_DOWN:手指按下屏幕的瞬間(一切事件的開(kāi)始)
  • MotionEvent.ACTION_MOVE:手指在屏幕上移動(dòng)
  • MotionEvent.ACTION_UP:手指離開(kāi)屏幕瞬間
  • MotionEvent.ACTION_CANCEL :取消手勢(shì),一般由程序產(chǎn)生,不會(huì)由用戶產(chǎn)生

Android中的事件onClick, onLongClick,onScroll, onFling等等,都是由許多個(gè)Touch事件構(gòu)成的(一個(gè)ACTION_DOWN, n個(gè)ACTION_MOVE,1個(gè)ACTION_UP)。

android 事件響應(yīng)機(jī)制是先 分發(fā)(先由外部的View接收,然后依次傳遞給其內(nèi)層的最小View)再 處理 (從最小View單元(事件源)開(kāi)始依次向外層傳遞。)的形式實(shí)現(xiàn)的。

復(fù)雜性表現(xiàn)在:可以控制每層事件是否繼續(xù)傳遞(分發(fā)和攔截協(xié)同實(shí)現(xiàn)),以及事件的具體消費(fèi)(事件分發(fā)也具有事件消費(fèi)能力)。

android事件處理涉及到的三個(gè)重要函數(shù)

事件分發(fā):public boolean dispatchTouchEvent(MotionEvent ev)

當(dāng)有監(jiān)聽(tīng)到事件時(shí),首先由Activity進(jìn)行捕獲,進(jìn)入事件分發(fā)處理流程。(因?yàn)閍ctivity沒(méi)有事件攔截,View和ViewGroup有)會(huì)將事件傳遞給最外層View的dispatchTouchEvent(MotionEvent ev)方法,該方法對(duì)事件進(jìn)行分發(fā)。

  • return true :表示該View內(nèi)部消化掉了所有事件。
  • return false :事件在本層不再繼續(xù)進(jìn)行分發(fā),并交由上層控件的onTouchEvent方法進(jìn)行消費(fèi)(如果本層控件已經(jīng)是Activity,那么事件將被系統(tǒng)消費(fèi)或處理)。
  • 如果事件分發(fā)返回系統(tǒng)默認(rèn)的 super.dispatchTouchEvent(ev),事件將分發(fā)給本層的事件攔截onInterceptTouchEvent 方法進(jìn)行處理

事件攔截:public boolean onInterceptTouchEvent(MotionEvent ev)

  • return true :表示將事件進(jìn)行攔截,并將攔截到的事件交由本層控件 的 onTouchEvent 進(jìn)行處理;
  • return false :則表示不對(duì)事件進(jìn)行攔截,事件得以成功分發(fā)到子View。并由子View的dispatchTouchEvent進(jìn)行處理。
  • 如果返回super.onInterceptTouchEvent(ev),默認(rèn)表示攔截該事件,并將事件傳遞給當(dāng)前View的onTouchEvent方法,和return true一樣。

事件響應(yīng):public boolean onTouchEvent(MotionEvent ev)

在dispatchTouchEvent(事件分發(fā))返回super.dispatchTouchEvent(ev)并且onInterceptTouchEvent(事件攔截返回true或super.onInterceptTouchEvent(ev)的情況下,那么事件會(huì)傳遞到onTouchEvent方法,該方法對(duì)事件進(jìn)行響應(yīng)。

  • 如果return true,表示onTouchEvent處理完事件后消費(fèi)了此次事件。此時(shí)事件終結(jié);
  • 如果return fasle,則表示不響應(yīng)事件,那么該事件將會(huì)不斷向上層View的onTouchEvent方法傳遞,直到某個(gè)View的onTouchEvent方法返回true,如果到了最頂層View還是返回false,那么認(rèn)為該事件不消耗,則在同一個(gè)事件系列中,當(dāng)前View無(wú)法再次接收到事件,該事件會(huì)交由Activity的onTouchEvent進(jìn)行處理;
  • 如果return super.dispatchTouchEvent(ev),則表示不響應(yīng)事件,結(jié)果與return false一樣。

從以上過(guò)程中可以看出,dispatchTouchEvent無(wú)論返回true還是false,事件都不再進(jìn)行分發(fā),只有當(dāng)其返回super.dispatchTouchEvent(ev),才表明其具有向下層分發(fā)的愿望,但是是否能夠分發(fā)成功,則需要經(jīng)過(guò)事件攔截onInterceptTouchEvent的審核。事件是否向上傳遞處理是由onTouchEvent的返回值決定的。

 

View源碼分析

Android中ImageView、textView、Button等繼承于View但沒(méi)有重寫(xiě)的dispatchTouchEvent方法,所以都用的View的該方法進(jìn)行事件分發(fā)。

看View重要函數(shù)部分源碼:

  1. public boolean dispatchTouchEvent(MotionEvent event) { 
  2.       //返回true,表示該View內(nèi)部消化掉了所有事件。返回false,表示View內(nèi)部只處理了ACTION_DOWN事件,事件繼續(xù)傳遞,向上級(jí)View(ViewGroup)傳遞。 
  3.     if (mOnTouchListener != null && (mViewFlags & ENABLED_MASK) == ENABLED && 
  4.             mOnTouchListener.onTouch(this, event)) {   
  5.              //此處的onTouch方式就是回調(diào)的我們注冊(cè)O(shè)nTouchListener時(shí)重寫(xiě)的onTouch()方法 
  6.          return true
  7.     }    return onTouchEvent(event); 
  8.  

首先進(jìn)行三個(gè)條件的判斷:

(1)查看是否給button設(shè)置了OnTouchListener()事件;

(2)控件是否Enable;(控件默認(rèn)都是enable的)

(3)button里面實(shí)現(xiàn)的OnTouchListener監(jiān)聽(tīng)里的onTouch()方法是否返回true;

如果條件都滿足,則該事件被消耗掉,不再進(jìn)入onTouchEvent中處理。否則將事件將交給onTouchEvent方法處理。

  1. public boolean onTouchEvent(MotionEvent event) { 
  2.     ... 
  3.  
  4.    /* 當(dāng)前onTouch的組件必須是可點(diǎn)擊的比如Button,ImageButton等等,此處CLICKABLE為true,才會(huì)進(jìn)入if方法,***返回true。 
  5.  如果是ImageView、TexitView這些默認(rèn)為不可點(diǎn)擊的View,此處CLICKABLE為false,***返回false。當(dāng)然會(huì)有特殊情況,如果給這些View設(shè)置了onClick監(jiān)聽(tīng)器,此處CLICKABLE也將為true  */  
  6.     if (((viewFlags & CLICKABLE) == CLICKABLE ||   
  7.              (viewFlags & LONG_CLICKABLE) == LONG_CLICKABLE)) {         
  8.          switch (event.getAction()) {             
  9.             case MotionEvent.ACTION_UP: 
  10.                ...                             
  11.                    if (!post(mPerformClick)) { 
  12.                          performClick();// 實(shí)際就是回調(diào)了我們注冊(cè)的OnClickListener中重新的onClick()方法 
  13.                    } 
  14.                 ...                 
  15.                  break;  
  16.             case MotionEvent.ACTION_DOWN: 
  17.                 ...                 
  18.                  break;  
  19.             case MotionEvent.ACTION_CANCEL: 
  20.                 ...                 
  21.                 break;  
  22.             case MotionEvent.ACTION_MOVE: 
  23.                  ...                 
  24.                  break; 
  25.         }         
  26.         return true
  27.     }  
  28.     return false
  29.  
  1. public boolean performClick() { 
  2.     ... 
  3.  //    if (li != null && li.mOnClickListener != null) { 
  4.         ... 
  5.         li.mOnClickListener.onClick(this);         
  6.             return true
  7.     }  
  8.     return false
  9.  
  1. public void setOnClickListener(OnClickListener l) { if (!isClickable()) { 
  2.  
  3. setClickable(true); 
  4.  
  5.  
  6. getListenerInfo().mOnClickListener = l; 
  7.  
  8.  

只有我們注冊(cè)O(shè)nTouchListener時(shí)重寫(xiě)的

onTouch()方法中

返回false —> 執(zhí)行onTouchEvent方法 —> 導(dǎo)致onClick()回調(diào)方法執(zhí)行

返回true —> onTouchEvent方法不執(zhí)行 —> 導(dǎo)致onClick()回調(diào)方法不會(huì)執(zhí)行

ViewGroup源碼分析

Android中諸如LinearLayout等的五大布局控件,都是繼承自ViewGroup,而ViewGroup本身是繼承自View,所以ViewGroup的事件處理機(jī)制對(duì)這些控件都有效。

部分源碼:

  1. public boolean dispatchTouchEvent(MotionEvent ev) {   
  2.        final int action = ev.getAction();   
  3.        final float xf = ev.getX();   
  4.        final float yf = ev.getY();   
  5.        final float scrolledXFloat = xf + mScrollX;   
  6.        final float scrolledYFloat = yf + mScrollY;   
  7.        final Rect frame = mTempRect;   
  8.    
  9.        //這個(gè)值默認(rèn)是false, 然后我們可以通過(guò)requestDisallowInterceptTouchEvent(boolean disallowIntercept)方法   
  10.        //來(lái)改變disallowIntercept的值   
  11.        boolean disallowIntercept = (mGroupFlags & FLAG_DISALLOW_INTERCEPT) != 0;   
  12.    
  13.        //這里是ACTION_DOWN的處理邏輯   
  14.        if (action == MotionEvent.ACTION_DOWN) {   
  15.         //清除mMotionTarget, 每次ACTION_DOWN都很設(shè)置mMotionTarget為null   
  16.            if (mMotionTarget != null) {   
  17.                mMotionTarget = null;   
  18.            }   
  19.    
  20.            //disallowIntercept默認(rèn)是false, 就看ViewGroup的onInterceptTouchEvent()方法   
  21.            if (disallowIntercept || !onInterceptTouchEvent(ev)) {  //***點(diǎn) 
  22.                ev.setAction(MotionEvent.ACTION_DOWN);   
  23.                final int scrolledXInt = (int) scrolledXFloat;   
  24.                final int scrolledYInt = (int) scrolledYFloat;   
  25.                final View[] children = mChildren;   
  26.                final int count = mChildrenCount;   
  27.                //遍歷其子View   
  28.                for (int i = count - 1; i >= 0; i--) {  //第二點(diǎn) 
  29.                    final View child = children[i];   
  30.                       
  31.                    //如果該子View是VISIBLE或者該子View正在執(zhí)行動(dòng)畫(huà), 表示該View才   
  32.                    //可以接受到Touch事件   
  33.                    if ((child.mViewFlags & VISIBILITY_MASK) == VISIBLE   
  34.                            || child.getAnimation() != null) {   
  35.                     //獲取子View的位置范圍   
  36.                        child.getHitRect(frame);   
  37.                           
  38.                        //如Touch到屏幕上的點(diǎn)在該子View上面   
  39.                        if (frame.contains(scrolledXInt, scrolledYInt)) {   
  40.                            // offset the event to the view's coordinate system   
  41.                            final float xc = scrolledXFloat - child.mLeft;   
  42.                            final float yc = scrolledYFloat - child.mTop;   
  43.                            ev.setLocation(xc, yc);   
  44.                            child.mPrivateFlags &= ~CANCEL_NEXT_UP_EVENT;   
  45.                               
  46.                            //調(diào)用該子View的dispatchTouchEvent()方法   
  47.                            if (child.dispatchTouchEvent(ev))  {   
  48.                                // 如果child.dispatchTouchEvent(ev)返回true表示   
  49.                             //該事件被消費(fèi)了,設(shè)置mMotionTarget為該子View   
  50.                                mMotionTarget = child;   
  51.                                //直接返回true   
  52.                                return true;   
  53.                            }   
  54.                            // The event didn't get handled, try the next view.   
  55.                            // Don't reset the event's location, it's not   
  56.                            // necessary here.   
  57.                        }   
  58.                    }   
  59.                }   
  60.            }   
  61.        }   
  62.    
  63.        //判斷是否為ACTION_UP或者ACTION_CANCEL   
  64.        boolean isUpOrCancel = (action == MotionEvent.ACTION_UP) ||   
  65.                (action == MotionEvent.ACTION_CANCEL);   
  66.    
  67.        if (isUpOrCancel) {   
  68.         //如果是ACTION_UP或者ACTION_CANCEL, 將disallowIntercept設(shè)置為默認(rèn)的false   
  69.         //假如我們調(diào)用了requestDisallowInterceptTouchEvent()方法來(lái)設(shè)置disallowIntercept為true   
  70.         //當(dāng)我們抬起手指或者取消Touch事件的時(shí)候要將disallowIntercept重置為false   
  71.         //所以說(shuō)上面的disallowIntercept默認(rèn)在我們每次ACTION_DOWN的時(shí)候都是false   
  72.            mGroupFlags &= ~FLAG_DISALLOW_INTERCEPT;   
  73.        }   
  74.    
  75.        // The event wasn't an ACTION_DOWN, dispatch it to our target if   
  76.        // we have one.   
  77.        final View target = mMotionTarget;   
  78.        //mMotionTarget為null意味著沒(méi)有找到消費(fèi)Touch事件的View, 所以我們需要調(diào)用ViewGroup父類的   
  79.        //dispatchTouchEvent()方法,也就是View的dispatchTouchEvent()方法   
  80.        if (target == null) {   
  81.            // We don't have a target, this means we're handling the   
  82.            // event as a regular view.   
  83.            ev.setLocation(xf, yf);   
  84.            if ((mPrivateFlags & CANCEL_NEXT_UP_EVENT) != 0) {   
  85.                ev.setAction(MotionEvent.ACTION_CANCEL);   
  86.                mPrivateFlags &= ~CANCEL_NEXT_UP_EVENT;   
  87.            }   
  88.            return super.dispatchTouchEvent(ev);   
  89.        }   
  90.    
  91.        //這個(gè)if里面的代碼ACTION_DOWN不會(huì)執(zhí)行,只有ACTION_MOVE   
  92.        //ACTION_UP才會(huì)走到這里, 假如在ACTION_MOVE或者ACTION_UP攔截的   
  93.        //Touch事件, 將ACTION_CANCEL派發(fā)給target,然后直接返回true   
  94.        //表示消費(fèi)了此Touch事件   
  95.        if (!disallowIntercept && onInterceptTouchEvent(ev)) {   
  96.            final float xc = scrolledXFloat - (float) target.mLeft;   
  97.            final float yc = scrolledYFloat - (float) target.mTop;   
  98.            mPrivateFlags &= ~CANCEL_NEXT_UP_EVENT;   
  99.            ev.setAction(MotionEvent.ACTION_CANCEL);   
  100.            ev.setLocation(xc, yc);   
  101.               
  102.            if (!target.dispatchTouchEvent(ev)) {   
  103.            }   
  104.            // clear the target   
  105.            mMotionTarget = null;   
  106.            // Don't dispatch this event to our own view, because we already   
  107.            // saw it when intercepting; we just want to give the following   
  108.            // event to the normal onTouchEvent().   
  109.            return true;   
  110.        }   
  111.    
  112.        if (isUpOrCancel) {   
  113.            mMotionTarget = null;   
  114.        }   
  115.    
  116.        // finally offset the event to the target's coordinate system and   
  117.        // dispatch the event.   
  118.        final float xc = scrolledXFloat - (float) target.mLeft;   
  119.        final float yc = scrolledYFloat - (float) target.mTop;   
  120.        ev.setLocation(xc, yc);   
  121.    
  122.        if ((target.mPrivateFlags & CANCEL_NEXT_UP_EVENT) != 0) {   
  123.            ev.setAction(MotionEvent.ACTION_CANCEL);   
  124.            target.mPrivateFlags &= ~CANCEL_NEXT_UP_EVENT;   
  125.            mMotionTarget = null;   
  126.        }   
  127.    
  128.        //如果沒(méi)有攔截ACTION_MOVE, ACTION_DOWN的話,直接將Touch事件派發(fā)給target   
  129.        return target.dispatchTouchEvent(ev);   
  130.    }  

1、dispatchTouchEvent作用:決定事件是否由onInterceptTouchEvent來(lái)攔截處理。

返回super.dispatchTouchEvent時(shí),由onInterceptTouchEvent來(lái)決定事件的流向

返回false時(shí),會(huì)繼續(xù)分發(fā)事件,自己內(nèi)部只處理了ACTION_DOWN

返回true時(shí),不會(huì)繼續(xù)分發(fā)事件,自己內(nèi)部處理了所有事件(ACTION_DOWN,ACTION_MOVE,ACTION_UP)

2、onInterceptTouchEvent作用:攔截事件,用來(lái)決定事件是否傳向子View

返回true時(shí),攔截后交給自己的onTouchEvent處理

返回false時(shí),攔截后交給子View來(lái)處理

3、onTouchEvent作用:事件最終到達(dá)這個(gè)方法

返回true時(shí),內(nèi)部處理所有的事件,換句話說(shuō),后續(xù)事件將繼續(xù)傳遞給該view的onTouchEvent()處理

返回false時(shí),事件會(huì)向上傳遞,由onToucEvent來(lái)接受,如果最上面View中的onTouchEvent也返回false的話,那么事件就會(huì)消失

總結(jié)

  • 如果ViewGroup找到了能夠處理該事件的View,則直接交給子View處理,自己的onTouchEvent不會(huì)被觸發(fā);
  • 可以通過(guò)復(fù)寫(xiě)onInterceptTouchEvent(ev)方法,攔截子View的事件(即return true),把事件交給自己處理,則會(huì)執(zhí)行自己對(duì)應(yīng)的onTouchEvent方法。
  • 子View可以通過(guò)調(diào)用getParent().requestDisallowInterceptTouchEvent(true); 阻止ViewGroup對(duì)其MOVE或者UP事件進(jìn)行攔截;
  • 一個(gè)點(diǎn)擊事件產(chǎn)生后,它的傳遞過(guò)程如下:
  • Activity->Window->View。***View接收到事件之后,就會(huì)按相應(yīng)規(guī)則去分發(fā)事件。如果一個(gè)View的onTouchEvent方法返回false,那么將會(huì)交給父容器的onTouchEvent方法進(jìn)行處理,逐級(jí)往上,如果所有的View都不處理該事件,則交由Activity的onTouchEvent進(jìn)行處理。
  • 如果某一個(gè)View開(kāi)始處理事件,如果他不消耗ACTION_DOWN事件(也就是onTouchEvent返回false),則同一事件序列比如接下來(lái)進(jìn)行ACTION_MOVE,則不會(huì)再交給該View處理。
  • ViewGroup默認(rèn)不攔截任何事件。
  • 諸如TextView、ImageView這些不作為容器的View,一旦接受到事件,就調(diào)用onTouchEvent方法,它們本身沒(méi)有onInterceptTouchEvent方法。正常情況下,它們都會(huì)消耗事件(返回true),除非它們是不可點(diǎn)擊的(clickable和longClickable都為false),那么就會(huì)交由父容器的onTouchEvent處理。
  • 點(diǎn)擊事件分發(fā)過(guò)程如下 dispatchTouchEvent—->OnTouchListener的onTouch方法—->onTouchEvent-->OnClickListener的onClick方法。也就是說(shuō),我們平時(shí)調(diào)用的setOnClickListener,優(yōu)先級(jí)是***的,所以,onTouchEvent或OnTouchListener的onTouch方法如果返回true,則不響應(yīng)onClick方法. 
責(zé)任編輯:龐桂玉 來(lái)源: 安卓巴士Android開(kāi)發(fā)者門戶
相關(guān)推薦

2019-07-23 08:55:46

Base64編碼底層

2024-06-25 08:18:55

2024-05-17 10:05:06

Java機(jī)制應(yīng)用

2020-06-03 11:06:26

DNS域名緩存

2013-04-15 10:59:08

iOS開(kāi)發(fā)ARC版本說(shuō)明

2024-05-10 08:19:59

arthasjava字節(jié)碼

2025-03-07 08:24:10

Javavolatilecount++

2021-05-27 09:01:14

Python文件讀寫(xiě)Python基礎(chǔ)

2021-08-30 10:01:01

Map接口HashMap

2021-03-08 09:15:46

日志Filebeat運(yùn)維

2021-08-17 09:55:05

JavaScript MicrotaskPromise

2024-10-23 16:02:40

JavaScriptPromiserejection

2021-05-18 09:00:28

Pythonclass

2021-08-02 10:01:09

Iterator接口Java項(xiàng)目開(kāi)發(fā)

2021-03-23 10:01:41

JavaScript事件監(jiān)聽(tīng)開(kāi)發(fā)技術(shù)

2025-03-07 10:04:12

2019-08-13 09:00:01

內(nèi)網(wǎng)外網(wǎng)通信

2020-06-23 16:28:25

Nginx負(fù)載均衡服務(wù)器

2023-11-01 15:52:35

2020-07-28 17:27:53

Nginx 負(fù)載均衡模塊
點(diǎn)贊
收藏

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

日韩av网站在线播放| 亚欧在线免费观看| 天天色综合av| 久久亚洲欧洲| 九色精品美女在线| 搡老熟女老女人一区二区| 精品国产第一福利网站| 综合久久国产九一剧情麻豆| 国产精品亚洲综合| 中文字幕在线播出| 精品999成人| 日韩综合视频在线观看| 999精品免费视频| 亚洲欧美一级| 欧美性色19p| 国产内射老熟女aaaa| 男男激情在线| 国产 欧美在线| 国产精品网址在线| 亚洲精品男人的天堂| 一区二区影视| 中文字幕日韩在线观看| 免费无码一区二区三区| 国产精久久久| 欧美性大战xxxxx久久久| 一卡二卡三卡视频| 成人免费在线| 国产精品私房写真福利视频| 国外成人免费视频| a级片在线播放| 麻豆国产精品777777在线| 91精品国产色综合| 免费无遮挡无码永久在线观看视频| 红桃视频在线观看一区二区| 亚洲大尺度美女在线| 日韩精品在线播放视频| 福利一区二区三区视频在线观看| 亚洲国产一区二区在线播放| 只有这里有精品| av在线免费一区| 国产午夜精品一区二区| 久久久综合亚洲91久久98| 亚洲精品成av人片天堂无码| 国产一区999| 91香蕉亚洲精品| 91片黄在线观看喷潮| 免费人成在线不卡| 国产精品jizz在线观看麻豆| 国产剧情在线视频| 香蕉成人久久| 欧美有码在线视频| 成人精品在线看| 亚洲激情不卡| 91精品国产色综合久久不卡98| 亚洲国产综合久久| 激情亚洲网站| 51午夜精品视频| 久草手机在线视频| 老牛国产精品一区的观看方式| 欧美诱惑福利视频| 国产免费一级视频| 日韩精品电影一区亚洲| 国产精品久久久久久av| 91片黄在线观看喷潮| 国产一区二区三区四区五区美女 | 欧美三级免费看| 在线观看日韩| 久久久视频精品| 欧美特黄aaaaaa| 老司机亚洲精品| 国产精品露脸自拍| 97人妻精品一区二区三区软件 | 国产精品久久无码| 亚洲动漫在线观看| 中文字幕日韩欧美精品在线观看| 精品亚洲乱码一区二区| 欧美日韩爆操| 538国产精品一区二区免费视频| 亚洲天堂一区在线观看| 奇米四色…亚洲| 91亚洲精品一区| 欧美一级视频免费| 久久精品人人做人人综合| 一区二区精品在线| 成人女同在线观看| 日本道免费精品一区二区三区| 99sesese| 福利片在线一区二区| 亚洲人午夜精品| 国产va在线播放| 国产日韩欧美一区| 成人午夜在线视频一区| 天堂av手机版| 国产精品久久毛片av大全日韩| 美女av免费观看| 日韩高清成人| 精品国产露脸精彩对白| 日韩中文字幕有码| 黄色成人91| 国产精品在线看| 日本加勒比一区| 国产精品乱码一区二区三区软件 | 精品一区二区不卡| 日本高清中文字幕在线| 午夜精品福利一区二区三区蜜桃| 欧美美女一级片| 一本久久青青| 欧美大片在线影院| 91亚洲视频在线观看| 久久亚洲免费视频| 可以看毛片的网址| 爱情电影网av一区二区| 亚洲性日韩精品一区二区| 精品99在线观看| 久久超级碰视频| 日本中文不卡| 国产传媒在线| 精品久久一区二区三区| 国精产品久拍自产在线网站| 久久国产一二区| aa成人免费视频| 好吊日视频在线观看| 日本韩国欧美国产| 亚洲精品理论片| 精品成人免费| 99视频免费观看| 成人video亚洲精品| 欧美日韩中文精品| 卡一卡二卡三在线观看| 亚洲永久字幕| 久久99蜜桃综合影院免费观看| 欧美黑人猛交的在线视频| 欧美一区二区视频免费观看| 蜜桃av免费观看| 男女男精品网站| 日韩欧美一区二区三区久久婷婷| 国产精品迅雷| 日韩精品在线观| 婷婷激情五月网| 26uuu国产在线精品一区二区| 拔插拔插海外华人免费| 成人看片黄a免费看视频| 欧美成人午夜激情视频| 国产黄色一区二区| 一区二区三区色| 亚洲AV成人精品| 欧美成熟视频| 国产精品美女久久久久av福利| 特级毛片在线| 精品国产成人在线影院 | 欧美日韩精选| 97人人干人人| 波多野结衣乳巨码无在线观看| 亚洲成人av片在线观看| 国产稀缺真实呦乱在线| 93久久精品日日躁夜夜躁欧美| 亚洲熟妇av一区二区三区漫画| 日韩欧美在线精品| 国产成人精品视频在线| 日韩伦理在线观看| 欧美精品99久久久**| 国产探花在线免费观看| 福利一区福利二区| 久久久亚洲精品无码| 免费成人网www| 国产精品中文字幕在线| wwwav在线| 亚洲电影天堂av| 国产中文字幕视频| 国产午夜精品久久久久久免费视 | 日本欧美黄色片| 国产成人精品999在线观看| 国产日韩精品电影| 色屁屁www国产馆在线观看| 亚洲国产成人爱av在线播放| 国产中文字幕视频| 亚洲免费观看高清完整版在线| 欧美人与性动交α欧美精品| 国产亚洲精品v| 一本色道久久综合亚洲精品婷婷| 亚洲精品一区在线| 国产成人精品久久二区二区91| 好操啊在线观看免费视频| 亚洲国产成人在线播放| 最新国产中文字幕| 夜夜精品视频一区二区 | 一区二区三区久久| 91久久免费视频| 国模一区二区三区白浆| 国产综合av在线| 91亚洲国产| 精品一区二区国产| 欧美片网站免费| 国产精品99久久久久久人 | 全球成人中文在线| gogo在线高清视频| 亚洲人成五月天| 亚洲精品国产一区二| 欧美三区在线观看| 日韩av一二三区| 亚洲欧美综合网| 中文字幕国产综合| 成人国产一区二区三区精品| 午夜免费福利在线| 久久不射网站| 欧美亚洲色图视频| 国产精品99久久| 日韩在线导航| 亚洲区小说区| 国产成人一区二区三区免费看| 巨大黑人极品videos精品| 欧美亚州一区二区三区| 黑人极品ⅴideos精品欧美棵| 最近的2019中文字幕免费一页| 水中色av综合| 精品美女一区二区三区| 国产人妻精品一区二区三区| 91福利国产精品| 五月婷婷色丁香| 五月天亚洲婷婷| 久久国产精品二区| 亚洲精品自拍动漫在线| 亚洲精品天堂网| 欧美韩日一区二区三区四区| 日本黄色网址大全| 成人免费看的视频| 丰满少妇中文字幕| 久久成人18免费观看| www.这里只有精品| 男人操女人的视频在线观看欧美| 国产精彩免费视频| 日韩专区欧美专区| 香蕉视频网站入口| 视频一区欧美精品| 欧美伦理视频在线观看| 久久亚洲二区| 欧美午夜性生活| 日韩国产精品久久| 欧美自拍小视频| 免费成人在线网站| 中文字幕中文在线| 国产一区欧美日韩| wwwww在线观看| 岛国一区二区在线观看| 亚洲啪av永久无码精品放毛片| 国产激情一区二区三区桃花岛亚洲| 国产不卡的av| 国产精品456露脸| xxxx国产视频| 粉嫩av一区二区三区| 精品无码人妻少妇久久久久久| 国产成人免费视频一区| 女同性恋一区二区三区| 91在线视频免费观看| 中文字幕一二三四区| 国产亚洲欧美一区在线观看| 99久久精品免费视频| 中文字幕av一区二区三区| 成年人二级毛片| 一区二区三区视频在线观看| 成年人午夜视频| 欧美性猛交xxxx| 中文在线免费看视频| 欧美乱妇15p| 亚洲美女性生活| 亚洲精品www| 成年人视频免费在线观看| xxxxxxxxx欧美| 蜜臀av在线| 国产成人+综合亚洲+天堂| 国产欧美在线观看免费| 91免费版黄色| 亚洲精品亚洲人成在线| 在线成人性视频| 99re国产精品| 手机av在线网| yourporn久久国产精品| 在线观看亚洲大片短视频| 亚洲精品一二三区| 天码人妻一区二区三区在线看| 欧美午夜在线一二页| 精品欧美在线观看| 一本色道久久88精品综合| av免费在线网站| 青草青草久热精品视频在线网站| 精品福利在线| 精品国产aⅴ麻豆| 91精品国产自产在线观看永久∴| 久艹在线免费观看| 美女视频黄 久久| 国产又粗又猛又色| 中文字幕在线一区| 久久夜靖品2区| 欧美剧情电影在线观看完整版免费励志电影| 丁香六月天婷婷| 中文字幕亚洲欧美一区二区三区| av中文字幕电影在线看| 国产精品免费久久久久久| 成人激情自拍| 国产精品99久久久久久大便| 国产农村妇女毛片精品久久莱园子| 午夜精品中文字幕| 国产亚洲综合在线| 日韩成年人视频| 日韩一二三四区| 91视频在线观看| 国产91九色视频| a级日韩大片| 日本一级淫片演员| 日韩高清欧美激情| 欧美高清性xxxx| 亚洲国产另类av| 国产成人精品毛片| 日韩在线观看免费| 韩日精品一区| 欧美福利精品| av成人黄色| 国产伦精品一区二区三区88av| 亚洲欧洲在线观看av| 波多野结衣影片| 亚洲欧美在线磁力| 制服丝袜专区在线| 黑人巨大精品欧美一区二区小视频| 亚洲精品一区二区妖精| 91香蕉视频污版| 国产欧美综合在线观看第十页 | 免费久久99精品国产自在现线| 国产成人精品一区二区在线小狼| 国产精品另类一区| 中文字幕乱码中文字幕| 亚洲欧美国产精品| 亚洲伊人av| 欧美精品欧美精品| 国产精品普通话对白| 你懂得在线视频| 精品成人久久av| 亚洲欧美日韩免费| 青青a在线精品免费观看| 日韩欧美美女在线观看| 青青草原av在线播放| 91亚洲精华国产精华精华液| 国产黄色片免费看| 国产婷婷色综合av蜜臀av| 自拍视频在线看| 日本成人看片网址| 美日韩一级片在线观看| 日本 欧美 国产| 日韩欧美一级二级三级| 日本性爱视频在线观看| 国产精品日韩欧美一区二区| 精品99视频| 久久精品国产亚洲AV熟女| 91精品福利在线| 日本视频在线观看| 1卡2卡3卡精品视频| 亚洲视频高清| 中文字幕在线看高清电影| 欧美专区亚洲专区| 黄色动漫在线| 粉嫩高清一区二区三区精品视频| 一本色道久久综合| 亚洲午夜精品久久久久久高潮| 欧美日免费三级在线| 免费观看在线午夜影视| 91黄在线观看| 亚洲美女视频在线免费观看| 无码国产69精品久久久久同性| 在线观看欧美精品| 91麻豆免费在线视频| 国产精品区一区二区三含羞草| 国产精品视频久久一区| 超碰人人人人人人人| 精品欧美久久久| 成人免费看视频网站| 国产又爽又黄ai换脸| 波多野结衣视频一区| 国产主播第一页| 欧美成人一区在线| 亚洲警察之高压线| 特级西西444www| 富二代精品短视频| 欧美极品视频| 久久精品二区| 国内一区二区在线| 国产精品久久久久久久久久久久久久久久久| 在线观看欧美成人| 精品少妇3p| 九九九九九国产| 狠狠躁夜夜躁人人爽天天天天97 | 亚洲色图欧美偷拍| 天天干,夜夜爽| 91精品视频大全| 久久夜色精品| 精品少妇theporn| 色999日韩欧美国产| 久久综合社区| 超碰在线资源站| 欧美主播一区二区三区美女| 啦啦啦中文在线观看日本| 亚洲一区二区在线免费观看|