精品欧美一区二区三区在线观看 _久久久久国色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)

精品国产乱码久久久久久牛牛 | 欧美亚洲一区在线| 国产麻豆天美果冻无码视频 | 亚洲高清网站| 国产视频一区在线| 亚洲三级在线观看视频| 99久久精品免费看国产小宝寻花 | 欧美日产一区二区三区在线观看| 五月激情丁香网| 欧美日本一区二区高清播放视频| 亚洲精品日韩欧美| 韩国中文字幕av| 青青草原国产在线| 国产视频不卡一区| www国产亚洲精品| 日本丰满少妇做爰爽爽| 欧美日韩网站| www.欧美精品一二三区| a天堂视频在线观看| 中文成人在线| 在线亚洲高清视频| 国产极品尤物在线| 免费a级人成a大片在线观看| ww亚洲ww在线观看国产| 92国产精品久久久久首页| 国产成人免费看| 欧美成人日韩| 日韩中文字幕久久| 好吊日免费视频| 国产精品jk白丝蜜臀av小说| 欧美精品在线视频| 免费国产成人av| av综合电影网站| 婷婷一区二区三区| 国产一区二区三区乱码| fc2在线中文字幕| 久久久蜜桃精品| 精品国产一区二区三区四区精华| 国产夫妻在线观看| 国内成人精品2018免费看| 日本免费久久高清视频| 国产成人自拍视频在线| 亚洲精品日本| 91精品国产色综合久久不卡98| 一区二区三区影视| 久久要要av| 最新69国产成人精品视频免费| 亚洲精品成人无码| 美女精品一区最新中文字幕一区二区三区 | www.日本在线视频| 伊人影院在线视频| 亚洲精品国久久99热| 热这里只有精品| 国产精品久久久久久福利| 国产精品国产自产拍高清av| 亚洲国产高清国产精品| 亚洲免费视频一区二区三区| 中文字幕免费不卡在线| 亚洲精品视频一二三| 成人免费高清在线播放| 中文字幕av资源一区| 亚洲人成网站在线播放2019| 137大胆人体在线观看| 国产欧美精品在线观看| 亚洲国产一区二区精品视频| 香蕉视频在线播放| 亚洲欧洲日韩综合一区二区| 韩国黄色一级大片| 欧美韩日亚洲| 精品国产1区2区| 无码精品国产一区二区三区免费| 在线免费日韩片| 欧美亚洲一区二区三区四区| 日本人视频jizz页码69| 99精品国产九九国产精品| 欧美一区二区三区白人| 深田咏美中文字幕| 亚洲深夜福利在线观看| 在线看日韩av| 蜜臀av午夜精品久久| 在线欧美一区| 国产福利视频一区二区| 国产又色又爽又黄又免费| 国产成人免费在线观看| 精品欧美一区二区三区久久久| 蜜桃视频在线免费| 亚洲欧美日韩一区二区| 欧美 日韩 国产 高清| 欧美色片在线观看| 日韩欧美中文一区| 国产高清自拍视频| 日韩久久视频| 午夜精品一区二区三区视频免费看| 蜜臀精品一区二区三区| 紧缚奴在线一区二区三区| 国产日韩一区欧美| 午夜视频在线观看免费视频| 亚洲动漫第一页| 午夜宅男在线视频| 国产伦理久久久久久妇女| 一本久久综合亚洲鲁鲁| 成人免费看片98| 日本美女一区二区三区视频| 99免费在线观看视频| 男人的天堂在线| 一区二区三区不卡视频在线观看| 国产无套粉嫩白浆内谢的出处| 日韩欧美中文字幕一区二区三区| 亚洲性生活视频在线观看| 欧美日韩一级大片| 麻豆91精品91久久久的内涵| 国产一区二区三区奇米久涩| 免费高清完整在线观看| 日本高清免费不卡视频| 久草视频福利在线| 亚洲乱码精品| 国产精品日韩在线一区| 女人天堂在线| 亚洲国产精品久久久男人的天堂| 91高清国产视频| 日韩手机在线| 久久露脸国产精品| 国产巨乳在线观看| 国产精品麻豆久久久| 色欲av无码一区二区人妻| 一区二区三区高清在线观看| 日韩一区二区三区xxxx| 午夜精品免费观看| 99国产精品国产精品久久| 久操手机在线视频| 免费观看性欧美大片无片| 神马国产精品影院av| а中文在线天堂| 久久综合久久综合久久综合| 国产精品久久久久7777| 成人噜噜噜噜| 久久天天躁狠狠躁夜夜爽蜜月| 中日韩av在线| 中文av一区特黄| 色七七在线观看| 国产欧美日韩在线观看视频| 欧美一级淫片aaaaaaa视频| 无码国产精品高潮久久99| 亚洲午夜影视影院在线观看| 乱码一区二区三区| 欧美日韩国内| 成人免费视频网站| 人人超在线公开视频| 日韩一级视频免费观看在线| 青青草原国产视频| 高清不卡一区二区| 波多野结衣av一区二区全免费观看 | 亚洲午夜精品在线观看| 在线中文字幕亚洲| av成人综合网| 97人澡人人添人人爽欧美| 欧美精品一区二区三区一线天视频| 麻豆国产尤物av尤物在线观看| 丰满亚洲少妇av| 精品国产一二三四区| 日韩精品导航| 国产不卡av在线| 日韩伦理在线电影| 欧美一级欧美三级在线观看| 在线免费日韩av| 成人av免费网站| 一本色道无码道dvd在线观看| 成人一区不卡| 91九色在线观看| 国产粉嫩在线观看| 亚洲欧美日韩天堂| 一区二区www| 亚洲黄色性网站| 懂色av粉嫩av蜜乳av| 亚洲一区二区毛片| 亚洲第一综合| 国产精品流白浆在线观看| 欧美在线视频一区| 日本在线视频观看| 欧美精品一区男女天堂| 国产精品自拍第一页| 日韩美女视频一区二区| 亚洲激情 欧美| 蜜桃久久精品一区二区| 中国老女人av| 久久爱www成人| 91理论片午午论夜理片久久| 91超碰免费在线| 最近2019中文字幕大全第二页| 亚洲av少妇一区二区在线观看| 欧美性20hd另类| 成人在线观看高清| 91日韩在线专区| www.污网站| 午夜在线a亚洲v天堂网2018| 桥本有菜av在线| 免费成人结看片| 3d动漫精品啪啪一区二区三区免费 | 日韩av电影院| 五月婷婷视频在线观看| 国产一区二区动漫| 亚洲欧美激情另类| 欧美色区777第一页| 国产主播在线播放| 国产精品不卡在线| 国产三级国产精品| 国产剧情一区二区三区| 日韩手机在线观看视频| 激情欧美日韩| 国产精品一区在线免费观看| 狠狠做六月爱婷婷综合aⅴ | 欧美一级xxxx| 亚洲在线电影| 草草视频在线免费观看| 欧美成人自拍| 欧美日韩视频在线一区二区观看视频| 91在线一区| 91亚洲人电影| 精品女同一区二区三区在线观看| 欧美亚洲视频一区二区| 美女日批视频在线观看| 久久亚洲精品成人| av在线资源站| 亚洲偷熟乱区亚洲香蕉av| 四虎成人免费在线| 欧美精品一区二区高清在线观看| 国产欧美第一页| 欧美人妖巨大在线| 亚洲精品国产精品国自产网站按摩| 午夜精品一区二区三区三上悠亚| 99视频只有精品| 亚洲欧洲美洲综合色网| 欧美自拍偷拍网| 欧美国产精品中文字幕| 中文字幕 自拍| 久久久精品人体av艺术| 久久国产精品影院| 91麻豆视频网站| 日本黄色录像片| aa级大片欧美| 中文字幕免费在线播放| 成人不卡免费av| 日本一卡二卡在线| 91亚洲资源网| 女~淫辱の触手3d动漫| 国产亚洲人成网站| 一级黄色片大全| 国产日本亚洲高清| 亚洲av片不卡无码久久| 91在线观看污| 91久久免费视频| 欧美激情一区二区在线| 成人免费视频入口| 亚洲欧美日韩综合aⅴ视频| 国产盗摄x88av| 亚洲一级二级在线| 中文字幕日韩一级| 欧美午夜影院在线视频| 亚洲午夜无码久久久久| 欧美色视频在线| 精品国产黄色片| 精品国产一区a| 天堂中文字幕在线| 国产亚洲xxx| 男女啪啪在线观看| 久久99热精品| 黄视频免费在线看| 国产福利视频一区| 天天综合在线观看| 高清av免费一区中文字幕| 老司机aⅴ在线精品导航| 美日韩免费视频| 99久久婷婷国产综合精品电影√| 日韩欧美视频免费在线观看| 亚洲精品乱码| 天天色综合社区| 东方欧美亚洲色图在线| 国产精品揄拍100视频| 中文字幕一区三区| 国产精品suv一区二区| 日本久久精品电影| 99久久久无码国产精品免费| 亚洲国产女人aaa毛片在线| 国产精品免费播放| 欧美成人免费大片| 成人线上视频| 成人在线视频网| 鲁大师精品99久久久| 亚洲精品国产精品国自产观看| 中文字幕亚洲综合久久五月天色无吗''| 精品视频在线观看一区| 免费高清不卡av| 日本一区二区在线观看视频| 国产精品成人免费在线| 91在线看视频| 91精品国产综合久久小美女 | www.日韩.com| 涩涩视频网站在线观看| 91在线国产电影| 国产成人高清| 日本黄大片在线观看| 久久精品国产精品亚洲综合| 国产午夜在线一区二区三区| 国产精品污www在线观看| 日本五十熟hd丰满| 91精品国产综合久久香蕉的特点| 好男人免费精品视频| 欧美激情免费在线| 欧美综合影院| 日韩av一级大片| 日韩一区二区久久| 红桃视频一区二区三区免费| 久久久精品国产免大香伊| 国产无遮挡又黄又爽又色| 6080yy午夜一二三区久久| 欧美xxx.com| 97精品国产97久久久久久春色| 高清国产一区二区三区四区五区| 日韩高清av电影| 亚洲一区成人| 99re久久精品国产| 亚洲一区二三区| www.色婷婷.com| 久久精品欧美视频| 欧美爱爱视频| 亚洲国产欧美日韩| 肉丝袜脚交视频一区二区| av直播在线观看| 岛国视频午夜一区免费在线观看| 欧洲成人一区二区三区| 欧美肥婆姓交大片| 日韩免费高清视频网站| 91麻豆天美传媒在线| 久久国产生活片100| 在线免费看视频| 欧美色国产精品| eeuss影院在线播放| 国产精品久久久久久一区二区| 国产欧美日韩视频在线| 黄色片视频在线免费观看| 97se狠狠狠综合亚洲狠狠| 日韩精品久久久久久久| 亚洲国产成人一区| 久草在线中文最新视频| 久久久久久高清| 美女黄色成人网| 中文字幕免费视频| 欧美在线免费观看视频| 激情视频在线观看免费| 国产91色在线免费| 国产精品嫩草影院在线看| 成人精品视频一区二区| 国产精品乱码一区二区三区软件| 亚洲永久精品视频| 另类图片亚洲另类| 日本免费精品| 日韩激情免费视频| 国产午夜精品一区二区| 艳妇乳肉豪妇荡乳av| 久久精品视频网站| 视频成人永久免费视频| 国产91沈先生在线播放| www.亚洲精品| 区一区二在线观看| 色99之美女主播在线视频| 国模大尺度视频一区二区| 中文字幕人妻熟女人妻洋洋| 白白色 亚洲乱淫| 国产suv精品一区二区33| 日韩网站在线观看| 奇米一区二区| 凹凸国产熟女精品视频| 国产无一区二区| 国产女人爽到高潮a毛片| 97国产一区二区精品久久呦| 国产毛片一区二区三区| 国产传媒免费观看| 五月婷婷综合在线| 97超碰人人在线| 9a蜜桃久久久久久免费| 免费日韩av片| 农村黄色一级片| 亚洲男人天堂2024| 久久久国产精品入口麻豆| 国产aaa一级片| 日韩毛片高清在线播放| 婷婷丁香一区二区三区| 国产精品最新在线观看| 妖精视频成人观看www| 你懂得视频在线观看| 精品国产一区二区三区久久影院| 成人做爰视频www| 男女啪啪免费视频网站| 国产精品私人影院| 天天操天天射天天舔| 国产精品极品美女粉嫩高清在线| 欧美区亚洲区| 中文字幕美女视频| 日韩精品在线视频| 日韩精品一区二区三区中文在线|