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

HarmonyOS自定義控件之速度檢測VelocityDetector

開發 前端 OpenHarmony
一般在涉及到滾動的場景時,我們會用到速度檢測。比如列表滑動時,我們需要拿到手指抬起時的瞬時速度,來做慣性滾動。又比如在滾動翻頁時,我們要根據手指速度來判斷是否翻到下一頁還是繼續保持當頁。

[[419340]]

想了解更多內容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區

https://harmonyos.51cto.com

一般在涉及到滾動的場景時,我們會用到速度檢測。比如列表滑動時,我們需要拿到手指抬起時的瞬時速度,來做慣性滾動。又比如在滾動翻頁時,我們要根據手指速度來判斷是否翻到下一頁還是繼續保持當頁。

接下來我們就來看看HarmonyOS中的VelocityDetector如何使用。

使用方法

VelocityDetector使用起來還是比較簡單的,主要是分為以下幾步:

  • 獲取VelocityDetector實例
  • 為VelocityDetector添加TouchEvent
  • 計算速度
  • 獲取計算后的速度
  • 清除已添加的event

獲取實例

通過obtainInstance函數獲取實例:

  1. VelocityDetector detector = VelocityDetector.obtainInstance(); 

添加TouchEvent

在控件的TouchEventListener內調用addEvent函數:

  1. component.setTouchEventListener(new TouchEventListener() { 
  2.     @Override 
  3.     public boolean onTouchEvent(Component component, TouchEvent ev) { 
  4.         detector.addEvent(ev); 
  5.         return true
  6.     } 
  7. }); 

計算速度

一般情況下,我們需要在手指抬起時計算速度,因為我們需要的是手指抬起后的速度值。因此我們可以在TouchEvent.PRIMARY_POINT_UP時調用calculateCurrentVelocity函數來計算速度:

  1. static final int MAX_VELOCITY = 10000; 
  2.  
  3. @Override 
  4. public boolean onTouchEvent(Component component, TouchEvent ev) { 
  5.     detector.addEvent(ev); 
  6.     if (ev.getAction() == TouchEvent.PRIMARY_POINT_UP) { 
  7.         detector.calculateCurrentVelocity(1000, MAX_VELOCITY, MAX_VELOCITY); 
  8.     } 
  9.     return true

calculateCurrentVelocity函數有兩個重載:

  1. void calculateCurrentVelocity(int units); 
  2. void calculateCurrentVelocity(int units, float maxVxVelocity, float maxVyVelocity) 

其中:

  • units為單位,1代表像素/毫秒,1000代表像素/秒,以此類推。一般情況下我們都傳1000,獲取的速度代表手指每秒移動多少像素
  • maxVxVelocity為橫向最大速度為多少,比如慣性滾動時,如果我們不希望滾動過快,可以設置一個最大速度
  • maxVyVelocity為縱向最大速度為多少,比如慣性滾動時,如果我們不希望滾動過快,可以設置一個最大速度

獲取速度

在計算速度之后就能直接獲取速度值了:

  1. float velocityY = detector.getVerticalVelocity(); 
  2. float velocityX = detector.getHorizontalVelocity(); 
  3.  
  4. // 或者獲取速度數組,下標0為橫向速度,下標1為縱向速度 
  5. float[] velocity = detector.getVelocity(); 

獲取到的速度可能是正值也可能是負值,正負值代表了速度的方向,這個大家可以通過日志自行實驗一下。

清除

最后,我們需要清除前面添加的TouchEvent,為新一輪的事件做準備,避免舊的TouchEvent影響了后續的速度計算。這里我們在獲取到速度后或者CANCEL事件中,就可以調用clear函數:

  1. if (ev.getAction() == TouchEvent.PRIMARY_POINT_UP) { 
  2.     ... 
  3.     float[] velocity = detector.getVelocity(); 
  4.     ... 
  5.     detector.clear(); 
  6.  
  7. if (ev.getAction() == TouchEvent.CANCEL) { 
  8.      detector.clear(); 

總結

VelocityDetector目前只能獲取一個手指的速度,在多點觸控的情況下,暫時沒法獲取其他手指的速度。

到此我們就獲取到了手指抬起時的速度了,至于怎么利用這個速度,后續會在慣性滾動相關的文章中講述。接下來我們再來分析一下VelocityDetector存在什么問題。

問題

首先我們來了解一下VelocityDetector的基本原理:

我們通過addEvent將TouchEvent傳遞給VelocityDetector,然后通過calculateCurrentVelocity來計算速度,在這個過程中,VelocityDetector基本上就是通過TouchEvent拿到手指的坐標,然后通過移動距離以及時間來計算速度。當然內部算法遠比說的復雜,但是我們只需要記住一個關鍵變量即可:移動距離。

TouchEvent有兩個函數可以拿到手指坐標來計算距離:getPointerPosition與getPointerScreenPosition。VelocityDetector究竟用的哪一個呢?我們可以通過如下代碼來實驗:

  1. @Override 
  2.     public boolean onTouchEvent(Component component, TouchEvent ev) { 
  3.         detector.addEvent(cloneEvent(ev)); 
  4.          
  5.         return true
  6.     } 
  7.  
  8.     private TouchEvent cloneEvent(TouchEvent event) { 
  9.         return new TouchEvent() { 
  10.  
  11.             @Override 
  12.             public int getIndex() { 
  13.                 System.out.println(TAG + "getIndex"); 
  14.                 return event.getIndex(); 
  15.             } 
  16.  
  17.             @Override 
  18.             public MmiPoint getPointerPosition(int i) { 
  19.                 System.out.println(TAG + "getPointerPosition"); 
  20.                 return event.getPointerPosition(i); 
  21.             } 
  22.  
  23.             @Override 
  24.             public MmiPoint getPointerScreenPosition(int i) { 
  25.                 System.out.println(TAG + "getPointerScreenPosition"); 
  26.                 return event.getPointerScreenPosition(i); 
  27.             } 
  28.  
  29.             ...... 
  30.         }; 
  31.     } 

在手指移動過程中,日志如下:

  1. 08-04 17:14:09.296 24871-24871/com.ryan.ohos.parallaxlayout I System.out:  ParallaxLayout TouchEvent: getIndex 
  2. 08-04 17:14:09.296 24871-24871/com.ryan.ohos.parallaxlayout I System.out:  ParallaxLayout TouchEvent: getPointerPosition 
  3. 08-04 17:14:09.297 24871-24871/com.ryan.ohos.parallaxlayout I System.out:  ParallaxLayout TouchEvent: getIndex 
  4. 08-04 17:14:09.297 24871-24871/com.ryan.ohos.parallaxlayout I System.out:  ParallaxLayout TouchEvent: getPointerPosition 
  5. 08-04 17:14:09.469 24871-24871/com.ryan.ohos.parallaxlayout I System.out:  ParallaxLayout TouchEvent: getIndex 
  6. .... 

答案很明顯,VelocityDetector使用的是getPointerPosition。getPointerPosition獲取的坐標是相對于父控件的,而不是屏幕的左上角,那么根據getPointerPosition的描述我們有理由猜測:

當被監聽的控件,在手指移動過程中,不斷的改變自己的位置,那么通過getPointerPosition獲取的手指坐標會加上控件的位移量,導致滑動距離計算偏離預期。

下面我們來實驗一下。在父布局中,子控件監聽觸摸事件,通過getPointerPosition獲取手指坐標并計算MOVE與DOWN中坐標的差,并使用setComponentPosition與坐標差改變子控件的位置。

然后我們打印getPointerPosition獲取的y坐標,getPointerScreenPosition獲取的y坐標,以及移動距離,代碼如下:

  1. Component child = getComponentAt(1); 
  2. child.setTouchEventListener(this); 
  3.    int top = child.getTop(); 
  4.  
  5. @Override 
  6.    public boolean onTouchEvent(Component component, TouchEvent ev) { 
  7.        float y = getY(ev); 
  8.        float screenY = getScreenY(ev); 
  9.        switch (ev.getAction()) { 
  10.            case TouchEvent.PRIMARY_POINT_DOWN: 
  11.                downY = y; 
  12.                downScreenY = screenY; 
  13.                break; 
  14.  
  15.            case TouchEvent.POINT_MOVE: 
  16.                float deltaY = y - downY; 
  17.                float deltaScreenY = screenY - downScreenY; 
  18.                System.out.println(TAG  + "y: " + y + " screenY: " + screenY + ", deltaY: " + deltaY + " deltaScreenY" + deltaScreenY); 
  19.                moveChildren((int) deltaY); 
  20.                break; 
  21.        } 
  22.  
  23.        return true
  24.    } 
  25.  
  26. private void moveChildren(int deltaY) { 
  27.        child.setComponentPosition(0, top + deltaY, child.getWidth(), top + deltaY + child.getHeight()); 
  28.    } 

日志如下:

  1. y: 1206.0348, screenY: 1905.0348, deltaY: -13.782349, deltaScreenY: -13.782349  
  2. y: 1095.856, screenY: 1781.856, deltaY: -123.96118, deltaScreenY: -136.96118  
  3. y: 1204.7794, screenY: 1780.7794, deltaY: -15.03772, deltaScreenY: -138.03772  
  4. y: 1041.5786, screenY: 1725.5786, deltaY: -178.23853, deltaScreenY: -193.23853  
  5. y: 1094.1056, screenY: 1615.1056, deltaY: -125.71155, deltaScreenY: -303.71155  
  6. y: 972.12244, screenY: 1546.1224, deltaY: -247.6947, deltaScreenY: -372.6947  
  7. y: 1066.4863, screenY: 1518.4863, deltaY: -153.33081, deltaScreenY: -400.3308  
  8. y: 917.2855, screenY: 1463.2855, deltaY: -302.53162, deltaScreenY: -455.53162  
  9. y: 1024.8671, screenY: 1421.8671, deltaY: -194.95007, deltaScreenY: -496.95007  
  10. y: 875.4486, screenY: 1380.4486, deltaY: -344.36853, deltaScreenY: -538.3685  
  11. y: 941.0178, screenY: 1296.0178, deltaY: -278.79932, deltaScreenY: -622.7993  
  12. y: 821.4109, screenY: 1242.4109, deltaY: -398.40625, deltaScreenY: -676.40625  
  13. y: 883.01855, screenY: 1184.0186, deltaY: -336.79858, deltaScreenY: -734.7986  
  14. y: 817.2832, screenY: 1180.2832, deltaY: -402.53394, deltaScreenY: -738.53394  
  15. y: 834.93787, screenY: 1131.9379, deltaY: -384.87927, deltaScreenY: -786.8793  

可以發現通過getPointerPosition計算出來deltaY是忽大忽小而不是線性增加的,并且與getPointerScreenPosition計算的deltaScreenY對比可以發現,deltaY等于deltaScreenY減去上一次的deltaY。也就證明了:通過getPointerPosition獲取的手指坐標會加上該控件的位移量。

那么這對VelocityDetector有什么影響呢?VelocityDetector計算速度有一個重要的因素就是距離,在這種情況下距離忽大忽小,就會導致速度計算出來的值會小于正常速度,甚至于正負值都不太一樣。

總結一下:當一個控件在該控件的觸摸事件內,改變了自己相對于父控件的位置,那么通過VelocityDetector獲取的速度就會出現誤差。能影響控件位置的函數有setTop(在實驗中setTop未能改變控件的位置,還不確定是為什么)、setContentPosition、setComponentPosition,甚至還包括setTranslationY、setTranslationX。并且如果在該控件的觸摸事件內,父控件改變了位置,也會產生此問題。

在這種情況下,觸摸事件內計算距離的問題好解決,不使用getPointerPosition直接使用getPointerScreenPosition即可。但是VelocityDetector的問題如何解決呢?兩個辦法:代理法與偏移法。

代理法

通過一個TouchEventProxy,內部維護一個TouchEvent,并將其getPointerPosition實現轉發至TouchEvent的getPointerScreenPosition中。

  1. public class TouchEventProxy extends TouchEvent { 
  2.  
  3.     private TouchEvent event; 
  4.  
  5.     public void setEvent(TouchEvent event) { 
  6.         this.event = event; 
  7.     } 
  8.  
  9.     @Override 
  10.     public int getAction() { 
  11.         return event.getAction(); 
  12.     } 
  13.  
  14.     @Override 
  15.     public int getIndex() { 
  16.         return event.getIndex(); 
  17.     } 
  18.  
  19.     @Override 
  20.     public long getStartTime() { 
  21.         return event.getStartTime(); 
  22.     } 
  23.  
  24.     @Override 
  25.     public int getPhase() { 
  26.         return event.getPhase(); 
  27.     } 
  28.  
  29.     @Override 
  30.     public MmiPoint getPointerPosition(int i) { 
  31.         // 轉發至getPointerScreenPosition 
  32.         return event.getPointerScreenPosition(i); 
  33.     } 
  34.  
  35.     @Override 
  36.     public void setScreenOffset(float v, float v1) { 
  37.         event.setScreenOffset(v, v1); 
  38.     } 
  39.  
  40.     @Override 
  41.     public MmiPoint getPointerScreenPosition(int i) { 
  42.         return event.getPointerScreenPosition(i); 
  43.     } 
  44.  
  45.     @Override 
  46.     public int getPointerCount() { 
  47.         return event.getPointerCount(); 
  48.     } 
  49.  
  50.     @Override 
  51.     public int getPointerId(int i) { 
  52.         return event.getPointerId(i); 
  53.     } 
  54.  
  55.     @Override 
  56.     public float getForce(int i) { 
  57.         return event.getForce(i); 
  58.     } 
  59.  
  60.     @Override 
  61.     public float getRadius(int i) { 
  62.         return event.getRadius(i); 
  63.     } 
  64.  
  65.     @Override 
  66.     public int getSourceDevice() { 
  67.         return event.getSourceDevice(); 
  68.     } 
  69.  
  70.     @Override 
  71.     public String getDeviceId() { 
  72.         return event.getDeviceId(); 
  73.     } 
  74.  
  75.     @Override 
  76.     public int getInputDeviceId() { 
  77.         return event.getInputDeviceId(); 
  78.     } 
  79.  
  80.     @Override 
  81.     public long getOccurredTime() { 
  82.         return event.getOccurredTime(); 
  83.     } 

 使用起來也很簡單:

  1. TouchEventProxy proxy = new TouchEventProxy(); 
  2.  
  3.     @Override 
  4.     public boolean onTouchEvent(Component component, TouchEvent ev) { 
  5.         proxy.setEvent(ev); 
  6.         detector.addEvent(proxy); 
  7.         ...... 
  8.         return true
  9.     } 

位移法

通過反射TouchEvent發現,其內部含有能設置偏移量的函數,該函數會影響getPointerPosition的值。那么我們就可以在觸摸事件內,對比getPointerPosition與getPointerScreenPosition的差,并通過函數設置偏移,強制使坐標同步。這里只提供位移法的可行并驗證過的思路,代碼大家可以自行嘗試。

對比

既然有方法可以修復速度的問題,那么我們就可以對比修復前與修復后的速度,到底有多少差距。我們定義兩個VelocityDetector實例,一個add代理,一個add原始的event,然后同時獲取速度來看看:

  1.   VelocityDetector detector1 = VelocityDetector.obtainInstance(); 
  2.    VelocityDetector detector2 = VelocityDetector.obtainInstance(); 
  3. TouchEventProxy proxy = new TouchEventProxy(); 
  4.  
  5. @Override 
  6.    public boolean onTouchEvent(Component component, TouchEvent ev) { 
  7.        proxy.setEvent(ev); 
  8.  
  9.        detector1.addEvent(ev); 
  10.        detector2.addEvent(proxy); 
  11.         
  12.        float y = getY(ev); 
  13.        switch (ev.getAction()) { 
  14.            case TouchEvent.PRIMARY_POINT_DOWN: 
  15.                downY = y; 
  16.                break; 
  17.  
  18.            case TouchEvent.POINT_MOVE: 
  19.                float deltaY = y - downY; 
  20.                moveChildren((int) deltaY); 
  21.                break; 
  22.  
  23.            case TouchEvent.PRIMARY_POINT_UP: 
  24.                detector1.calculateCurrentVelocity(1000); 
  25.                detector2.calculateCurrentVelocity(1000); 
  26.                System.out.println(TAG + "detector1: " + detector1.getVerticalVelocity() + ", detector2: " + detector2.getVerticalVelocity()); 
  27.  
  28.                detector1.clear(); 
  29.                detector2.clear(); 
  30.                break; 
  31.        } 
  32.  
  33.        return true
  34.    } 

快速上滑:

  1. 08-05 09:36:29.004 1846-1846/? I System.out:  ParallaxLayout TouchEvent: detector1: -5332.0, detector2: -9285. 

慢一點上滑:

  1. 08-05 09:35:39.065 1846-1846/? I System.out: ParallaxLayout TouchEvent: detector1: -1003.0, detector2: -3560.0 

先慢速最后快速上滑:

  1. 08-05 09:37:04.066 1846-1846/? I System.out: ParallaxLayout TouchEvent: detector1: -4176.0, detector2: -4491.0 

快速下滑:

  1. 08-05 09:39:44.785 1846-1846/? I System.out: ParallaxLayout TouchEvent: detector1: 1955.0, detector2: 6660.0 

慢速下滑:

  1. 08-05 09:40:32.813 1846-1846/? I System.out: ParallaxLayout TouchEvent: detector1: 907.0, detector2: 3835.0 

先慢速最后快速下滑:

  1. 08-05 09:39:15.739 1846-1846/? I System.out: ParallaxLayout TouchEvent: detector1: -784.0, detector2: 1937.0 

總結

可以發現上滑過程采樣越少(慢速突然變快的情況)兩個速度越接近,但是在下滑過程中,如果速度比較慢甚至會得到一個方向相反的速度。

想了解更多內容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區

https://harmonyos.51cto.com

 

責任編輯:jianghua 來源: 鴻蒙社區
相關推薦

2021-08-16 14:45:38

鴻蒙HarmonyOS應用

2021-09-06 14:58:23

鴻蒙HarmonyOS應用

2015-02-11 17:49:35

Android源碼自定義控件

2021-09-02 10:00:42

鴻蒙HarmonyOS應用

2021-08-11 14:29:20

鴻蒙HarmonyOS應用

2013-04-19 10:14:24

2009-08-06 09:18:01

ASP.NET自定義控ASP.NET控件開發

2009-06-08 20:13:36

Eclipse自定義控

2009-07-31 10:23:09

ASP.NET源碼DateTimePic

2017-02-17 09:37:12

Android自定義控件方法總結

2011-08-18 09:44:33

iPhone SDK儀表控件UIDialView

2022-07-15 16:45:35

slider滑塊組件鴻蒙

2021-10-26 10:07:02

鴻蒙HarmonyOS應用

2022-06-30 14:02:07

鴻蒙開發消息彈窗組件

2009-08-06 17:52:45

ASP.NET控件開發自定義控件

2022-06-20 15:43:45

switch開關鴻蒙

2009-08-03 13:34:06

自定義C#控件

2009-08-03 13:39:46

C#自定義用戶控件

2009-09-03 13:34:03

.NET自定義控件

2021-11-01 10:21:36

鴻蒙HarmonyOS應用
點贊
收藏

51CTO技術棧公眾號

日韩欧美成人精品| 奇米亚洲午夜久久精品| 色欧美88888久久久久久影院| 91入口在线观看| 韩国一级黄色录像| 蜜桃精品在线| 99re热这里只有精品免费视频| 久久99久久99精品中文字幕| 超碰在线资源站| 99免在线观看免费视频高清| 久久一本综合频道| 亚洲欧美在线播放| 日韩精品视频一区二区在线观看| 欧美一区二不卡视频| 欧美视频不卡| 精品国产乱码久久久久久影片| 欧美少妇一级片| 一区二区国产欧美| 日韩在线第七页| 欧美日韩精品专区| 中文字幕日韩一区二区三区不卡 | 香蕉成人伊视频在线观看| 91色在线观看| 真实国产乱子伦对白在线| 国产精品成人3p一区二区三区| 最新中文字幕一区二区三区| 亚洲精品免费av| 欧美成人三级在线观看| 成人h动漫免费观看网站| 亚洲妇女屁股眼交7| 国严精品久久久久久亚洲影视 | 亚洲一区二区三区成人在线视频精品 | 天堂va欧美ⅴa亚洲va一国产| 亚洲女人的天堂| 成人xxxxx色| 成人免费看片98欧美| 香蕉人人精品| 欧美美女一区二区| 日韩欧美视频免费在线观看| 天堂v视频永久在线播放| 久久午夜视频| 日韩一区二区欧美| 秘密基地免费观看完整版中文| 蜜桃视频在线网站| 国产精品婷婷午夜在线观看| 91亚洲精品一区二区| 国产黄色片视频| 国产剧情在线观看一区| 56国语精品自产拍在线观看| 日韩精品―中文字幕| jizz在线观看| 国产高清不卡二三区| 日本欧美国产在线| 午夜爽爽爽男女免费观看| 国产欧美一区二区三区米奇| 日韩欧美亚洲综合| 一区二区三区免费看| 天堂成人在线视频| 久久精品国产久精国产爱| 久久久亚洲精品视频| 成人在线一级片| 午夜视频一区二区在线观看| 日本大香伊一区二区三区| 欧洲美女和动交zoz0z| 水莓100在线视频| 韩国三级中文字幕hd久久精品| 97超视频免费观看| 国产av无码专区亚洲av毛网站| 亚洲图片久久| 亚洲第一免费播放区| 亚洲涩涩在线观看| 男人最爱成人网| 亚洲国产另类av| 热这里只有精品| 欧洲天堂在线观看| 成人高清视频免费观看| 成人黄色av网站| 国产精品欧美综合| 国产欧美日韩亚洲一区二区三区| 久久夜色精品亚洲噜噜国产mv| 精品无码国产污污污免费网站 | 欧美大胆人体bbbb| 亚洲无吗一区二区三区| 竹内纱里奈兽皇系列在线观看| 一区二区三区精品视频在线| 一个色的综合| 国产人成在线视频| av亚洲精华国产精华精| 91手机在线视频| 在线视频你懂得| 日本亚洲最大的色成网站www| 欧美激情一区二区三区在线视频观看| 天堂av网手机版| 欧美日韩性在线观看| 亚洲欧美一区二区激情| 中国美女乱淫免费看视频| 韩国女主播一区二区三区| 日韩欧美国产不卡| 97超碰人人看| 麻豆精品一区| 欧美一级一区二区| 天天色天天干天天色| 精品亚洲a∨一区二区三区18| 欧美日韩国产中文| 免费av不卡在线| 爱情电影网av一区二区| 717成人午夜免费福利电影| 97人人爽人人| 久久爱www.| 精品免费一区二区三区| 精品人妻在线视频| 丁香一区二区| 日韩精品欧美国产精品忘忧草| 中国极品少妇videossexhd| 欧美中文一区| 亚洲色图综合久久| 欧美另类69xxxx| 性xxxx欧美老肥妇牲乱| 九九热99久久久国产盗摄| 久一视频在线观看| 亚洲一级在线| 国产91精品网站| 波多野结衣一本一道| 美女www一区二区| 成人免费网站在线| 亚洲黄色片视频| 成人app下载| 日本不卡一区二区三区在线观看| 超碰国产在线| 亚洲精选免费视频| 亚洲人成无码网站久久99热国产| 色黄视频在线观看| 欧美视频一区二区三区四区 | 菠萝蜜视频在线观看入口| 国产盗摄精品一区二区酒店| 精品女厕一区二区三区| 国产免费人做人爱午夜视频| 四虎视频在线精品免费网址| 日韩精品一区二区在线观看| 亚洲一级中文字幕| 亚洲精品一二三区区别| 性日韩欧美在线视频| 国产成人精品一区二区色戒| 国产精品18久久久久| 欧美国产综合视频| a视频在线播放| 欧美网站在线观看| 亚洲理论中文字幕| 久久aimee| 中文字幕亚洲综合久久| 国产一级理论片| 日本女人一区二区三区| 国产精品jizz视频| 91这里只有精品| 亚洲成人免费在线观看| 三级av免费观看| 久久视频在线观看| www.欧美三级电影.com| 久久久久亚洲av成人片| 麻豆久久久久久久| 久久一区免费| 青春草免费在线视频| 欧美日韩一卡二卡三卡| 国产精品第七页| 你懂的国产精品永久在线| 国产精品国语对白| 手机在线观看毛片| 亚洲视频资源在线| 日本老熟妇毛茸茸| 色天天色综合| 欧美激情视频一区二区| 一区二区www| 国产日韩亚洲欧美综合| 国产一区二区视频播放| 国模大尺度视频一区二区| 国产一区二区免费| 国产精品视频免费播放| 成人福利视频网站| 神马午夜伦理影院| 人人精品久久| 色偷偷综合社区| 国产成人a v| 久久蜜桃香蕉精品一区二区三区| 九九爱精品视频| 中文字幕日韩高清在线| 欧美福利视频在线| 国产精品无码白浆高潮| 国产精品免费视频观看| 在线观看免费黄网站| 欧美日韩精品在线一区| 国产大片精品免费永久看nba| 亚洲av成人无码网天堂| 亚洲不卡一区二区三区| 欧美熟妇精品一区二区| 欧美午夜免费影院| 亚洲自拍小视频| av电影高清在线观看| 7777精品伊人久久久大香线蕉 | 欧美xxxx性xxxxx高清| 777精品伊人久久久久大香线蕉| 自拍偷拍第9页| 久久99精品久久久久久久久久久久| 亚洲韩国在线| 日韩一区中文| 久久亚洲综合国产精品99麻豆精品福利| 亚洲视频中文字幕在线观看| 国产视频一区二区在线观看| 日韩欧美黄色大片| 欧美肉体xxxx裸体137大胆| 国产欧美久久一区二区| 最新国产在线观看| 欧美一区二区私人影院日本| 亚洲欧美一区二区三区四区五区| 高清成人在线观看| 91视频最新入口| 精品国产一区二区三区四区 | 欧美老少做受xxxx高潮| 亚洲成a人片在线| 午夜av区久久| 日本二区在线观看| 美女视频一区二区三区| 日韩一级特黄毛片| 台湾色综合娱乐中文网| 国产国语刺激对白av不卡| 日本蜜桃在线观看| 日韩欧美一二区| 99久在线精品99re8热| 91视频一区二区三区| av在线无限看| 综合久久99| 久久99九九| 91精品美女| 九色成人免费视频| 亚洲人视频在线观看| 欧美色精品天天在线观看视频| 爱爱视频免费在线观看| 91亚洲永久精品| www.精品在线| 激情五月***国产精品| 欧洲国产精品| 亚洲91网站| 日韩av男人的天堂| 亚洲wwwww| 亚洲午夜国产成人av电影男同| 99热这里只有精品9| 日韩欧亚中文在线| 久久久精品视频在线| 亚洲国产精品99久久久久久久久| 国产香蕉精品视频| 日本在线不卡一区| 日本十八禁视频无遮挡| 99视频精品视频高清免费| 精品欧美一区二区三区久久久| 激情欧美一区二区三区黑长吊| 久久久久久久爱| 在线免费av网站| 日韩不卡在线观看| 精品国产九九九| 欧美在线观看视频一区二区三区| 国产精品成人aaaa在线| 专区另类欧美日韩| 在线观看日本中文字幕| www.亚洲色图.com| √天堂资源在线| 日韩精品1区2区3区| 欧美午夜性视频| 欧美激情电影| 秋霞久久久久久一区二区| 国产精品香蕉| 亚洲综合视频1区| 国产成人精品一区二区三区免费| 欧美一级淫片播放口| 欧美性猛片xxxxx免费中国| www亚洲欧美| www 日韩| 一本一本久久a久久精品牛牛影视| 十八禁一区二区三区| 日韩欧美亚洲另类制服综合在线| 国产一区二区在线播放视频| 色妹子一区二区| 国产精品久久久久久99| 亚洲一区二区三区小说| 欧美成人免费看| 亚洲精品成人精品456| 午夜激情视频在线播放| 国产精品亲子伦对白| 色欲AV无码精品一区二区久久| 久久女同精品一区二区| 大地资源二中文在线影视观看| 成人性生交大片免费看中文| 国产精九九网站漫画| 国产成人欧美日韩在线电影| 久久精品一二三四| 国产一区二区不卡| 91欧美一区二区三区| 国产一区二区视频在线播放| 成人黄色一级大片| 国模大尺度一区二区三区| 一区二区久久精品| 黄页视频在线91| 人人爽人人爽av| 国产精品综合一区二区| 人妻巨大乳一二三区| 国产精品一区免费在线观看| 性生交大片免费看l| 国产成人小视频| 美女黄色一级视频| 欧美福利一区| 精品精品国产高清一毛片一天堂| 一级特黄aaa大片| 欧美色男人天堂| 91资源在线视频| 欧美一区二区三区日韩视频| 99久久精品国产色欲| 日韩欧美国产不卡| 欧美熟妇乱码在线一区| 亚洲精品国精品久久99热| 天堂网www中文在线| 国产一区二区三区视频免费| 伊人在线视频| 欧美精品手机在线| 国内精彩免费自拍视频在线观看网址 | 91精品人妻一区二区三区蜜桃2| 大尺度一区二区| 少妇精品一区二区| 国产欧美精品一区| 国产18无套直看片| 中文字幕一区二区三区乱码在线 | 国产精品91视频| 99久久伊人| 97超碰在线播放| 亚洲精品**不卡在线播he| 在线看视频不卡| 夜夜嗨一区二区三区| 91视频免费版污| 国产精一区二区三区| 亚洲av综合一区二区| 1024成人网色www| 日本网站在线播放| 欧美男女性生活在线直播观看| 亚洲精品一区二区三区新线路| 亚洲精品综合精品自拍| 秋霞成人影院| 青青草成人在线| 国产一区二区三区免费在线 | 每日更新av在线播放| 久久精品国产亚洲精品| 性欧美xxx69hd高清| 91中文字幕一区| 国产一区二区在线| www.亚洲成人网| 青娱乐精品视频| 三级视频网站在线观看| 国产精品久久久久久久久久免费看 | 五月激情丁香一区二区三区| 中文字幕一区二区人妻痴汉电车| 欧美成人女星排名| 日韩理伦片在线| 97视频在线观看免费高清完整版在线观看 | 国产精品一区二区三| 久久电影在线| 女人床在线观看| 日本v片在线高清不卡在线观看| 精品少妇人妻av一区二区三区| 国产精品久线观看视频| 五月婷婷色丁香| 精品国产一区二区三区不卡| 日本在线免费| 国产精品美女久久久久久免费 | 在线国产精品播放| 理论片午夜视频在线观看| 亚洲影院污污.| 欧美顶级大胆免费视频| 爆乳熟妇一区二区三区霸乳| 99国产精品久久| 久热精品在线观看| 日韩亚洲电影在线| 老司机精品视频在线观看6| 国产精品视频永久免费播放| 免费av一区| 国内自拍在线观看| 99精品国产一区二区三区不卡| 麻豆国产尤物av尤物在线观看| 欧美一区二区三区在线观看视频| 3p在线观看| 国产精品视频1区| 成人情趣视频| 免费看涩涩视频| 国产精品毛片大码女人| 中文字幕欧美在线观看| 国产一区二区三区在线观看视频| 网友自拍亚洲| 日本一区高清在线视频| 丝袜a∨在线一区二区三区不卡| 精品夜夜澡人妻无码av| 欧美日韩国产一区在线| 亚洲 另类 春色 国产| 欧美性资源免费| 九九视频精品全部免费播放| 成人三级视频在线播放 |