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

自定義Drawable實現(xiàn)靈動的紅鯉魚動畫(上篇)

開發(fā) 開發(fā)工具
此篇中的小魚動畫是模仿國外一個大牛做的flash動畫,第一眼就愛上它了,簡約靈動又不失美學(xué),于是抽空試著嘗試了一下,如下是我用Android實現(xiàn)的效果圖。

此篇中的小魚動畫是模仿國外一個大牛做的flash動畫,第一眼就愛上它了,簡約靈動又不失美學(xué),于是抽空試著嘗試了一下,如下是我用Android實現(xiàn)的效果圖:

小魚兒

由于整個繪制分析過程比較繁瑣所以靈動的紅鯉魚準備做成上下兩篇,本篇是小魚兒繪制的實現(xiàn)篇,第二篇是小魚兒游動控制篇下篇傳送門。本篇實現(xiàn)如下效果:

原地擺尾版

繪制實現(xiàn)篇用到如下主要的技術(shù):

1)、自定義Drawable動畫

2)、Android的坐標及角度

3)、Canvas中l(wèi)ayer的使用

4)、正余弦函數(shù)的使用以及角度角和弧度角的轉(zhuǎn)換

下圖是我實現(xiàn)小魚兒的分解圖紙:

 

部件分解圖

一、動畫拆解

拿到動畫需求或者模仿一個動畫首先需要分析動畫主體如何繪制部件如何活動,就此動畫外觀分析如下:

1)、小魚的身體各個部件都是簡單的半透明幾何圖形

2)、各個部件都可以活動

3)、從頭到尾方向的部件擺動幅度越來越大、頻率越來越高

二、技術(shù)分析

小魚擺動是周期運動,三角函數(shù)正好有此特性,角度問題也需要和坐標掛鉤,所以我們先來明確一下兩個最重要也是最基本的問題:坐標和角度。與平面直角坐標系不同的是Android的坐標系中Y軸正方向是朝下的,但是角度卻和平面直角坐標系的計算方法一樣,即原點指向X軸正方向為0°,正角度是逆時針旋轉(zhuǎn),負角度是順時針旋轉(zhuǎn)那么問題就來了:坐標系不同,角度轉(zhuǎn)動方式卻一樣,為了讓java中的Math函數(shù)計算出來的角度跟Android的坐標習(xí)慣一致我們需要將與Y軸相關(guān)的角度都減去180°,這樣解決了既用Android的坐標又用自然角度的問題,即下圖所示的角度和坐標系關(guān)系

Android坐標系下的自然角度

統(tǒng)一完角度問題,接下來我們就看看魚的各部件是怎么關(guān)聯(lián)在一起的。需要先了解三個重要參數(shù)

1)、魚的重心

因為最終我們要實現(xiàn)魚兒根據(jù)手指點擊的位置而移動的效果,必須確保能讓點擊點成為唯一確定魚兒位置的點,所以我們必須找到一個讓魚兒的各個部件都相對此點繪制的點。參考點可以任意選,但是考慮到轉(zhuǎn)彎的時候或者身體擺動的時候不會往某一邊偏,于是將參考點選在魚的中軸線上,本來選在中軸線和魚兒頭頂橡膠的點但是最后轉(zhuǎn)彎的時候就跟秋名山老司機漂移一樣,那叫一個飄逸,最后將參考點選在了魚的腹部重心處。

2)、魚頭半徑

比例示意圖

此案例中魚的各個部件都是以魚頭半徑R為單位衡量的,比如魚的身子第一節(jié)長度是3.2R,依次確定好身體的各個部件相對于魚頭半徑的尺寸就能確定整條魚的總長度為6.79R,繼而確定控件的總尺寸。如下圖,經(jīng)過計算控件最小尺寸為8.36R,這樣就保證魚兒轉(zhuǎn)動任意角度都在控件之內(nèi)

打轉(zhuǎn)圖

3)、魚身角度

此處的魚身角度是指重心到魚頭圓心的連線和X軸正方向的夾角角度,即魚兒前進方向的角度。此方向是確定各個部件方向及位置的的基礎(chǔ)方向,部件的定位、魚身角度以及尾部的擺動角度都是在此角度基礎(chǔ)上通過加減角度來控制左右搖擺。

下邊我將演示一下如何通過這三個因素來確定頭部以及魚鰭的點坐標(其他部位原理相同)

先假設(shè)魚身角度為0°,即頭朝向X軸正方向。通過重心點以及第一節(jié)身長的一半的長度,以及角度即可計算出頭部的圓心坐標,然后再以頭部圓心坐標和0.9R的長度,順時針旋轉(zhuǎn)80°確定右邊魚鰭的坐標點

魚鰭定位過程

魚鰭繪制原理相似,通過上文的右鰭坐標可以計算出右鰭的另一端坐標,魚鰭弧度是通過二階貝塞爾曲線繪制的

魚尾張合分析。魚尾是內(nèi)外兩個三角形疊加而成的,三角形頂點和三角形底邊中點連線的角度和最后一節(jié)身體的角度一直,三角形底邊左右兩點通過底邊的中點以及動態(tài)計算出來的長度確定的

最后用放出骨架系統(tǒng):黑線為各個部件的主軸,圓圈為各個部件邊界的定位點或貝塞爾曲線的控制點,是不是很酷,像不像電影里的動作捕捉

骨架系統(tǒng)(點擊查看動圖)

三、代碼實現(xiàn)

文章只貼出主要代碼,完整代碼文末提供鏈接

0)自定義Drawable

自定義View可能大家都知道,但是自定義Drawable卻并不是很常見。我們知道Drawable在Android里常常和ImageView配合使用,或者作為某個View的background,它不能通過標簽的方式在xml里定義,所以嚴格意義上來說它不是一個可以獨立展示的控件,需要依附在其他控件中。在attrs.xml里自定義屬性也和它無緣,measure測量也可以省略,這么一看Drawabe好像就只是專著繪制,沒錯,這就是它比View和ViewGroup繪圖的優(yōu)勢 —— 輕量。

既然說到不用Measure,那么它的大小怎么確定呢?

當ImageView使用我們自定義Drawable的時候,如果設(shè)置的是wrap_content,那么content的內(nèi)容寬高從哪里來?Drawable提供了兩個函數(shù) getIntrinsicHeight()、getIntrinsicWidth(),從名字上看是獲得固有寬高,所以我們就可以在這里控制我們的Drawable本來的寬高。如果ImageView的寬高是具體值的話,具體值超過Drawable的固有寬高,那么Drawable就會被拉伸(具體拉伸方案是依據(jù)ImageView的scaleType類型),如果不想讓自己的內(nèi)容因拉伸而導(dǎo)致不清晰的話可以在draw()函數(shù)里通過canvas.getHeight()和canvas.getWidth()來獲取ImageView的大小。也可以通過getBounds方法獲取到一個Rect邊界來獲取尺寸。

本例中的固有寬高就是可以容納小魚360°旋轉(zhuǎn)的尺寸8.38R

  1. @Override 
  2.     public int getIntrinsicHeight() { 
  3.         return (int) (8.38f * HEAD_RADIUS); 
  4.     } 
  5.  
  6.     @Override 
  7.     public int getIntrinsicWidth() { 
  8.         return (int) (8.38f * HEAD_RADIUS); 
  9.     } 

其次自定義Drawable只需復(fù)寫必要的四個函數(shù),比較簡單具體作用見注釋

  1. @Override 
  2.     public void draw(Canvas canvas) { 
  3.         //和自定義View中的onDraw()異曲同工 
  4.     } 
  5.  
  6.     @Override 
  7.     public void setAlpha(int alpha) { 
  8.         //設(shè)置Drawable的透明度,一般情況下將此alpha值設(shè)置給Paint 
  9.     } 
  10.  
  11.     @Override 
  12.     public void setColorFilter(ColorFilter colorFilter) { 
  13.         //設(shè)置顏色濾鏡,一般情況下將此值設(shè)置給Paint 
  14.     } 
  15.  
  16.     @Override 
  17.     public int getOpacity() { 
  18.         //決定繪制的部分是否遮住Drawable下邊的東西,有點抽象,有幾種模式 
  19.         //PixelFormat.UNKNOWN 
  20.         //PixelFormat.TRANSLUCENT 只有繪制的地方才蓋住下邊 
  21.         //PixelFormat.TRANSPARENT 透明,不顯示繪制內(nèi)容 
  22.         //PixelFormat.OPAQUE 完全蓋住下邊內(nèi)容 
  23.         return PixelFormat.TRANSLUCENT; 
  24.     } 

主要是復(fù)寫draw()方法,利用canvas繪制各種想要的東西。

1)坐標部分

最最最主要的坐標計算代碼,小魚兒所有部件都是通過此方法計算出坐標的 ,功能是計算一個點的坐標,可以理解為一個長度為length的線繞起點startPoint旋轉(zhuǎn)angle角度后線段另一端的坐標

  1. /** 
  2.      *  輸入起點、長度、旋轉(zhuǎn)角度計算終點 
  3.      * @param startPoint 起點 
  4.      * @param length 長度 
  5.      * @param angle 旋轉(zhuǎn)角度 
  6.      * @return 計算結(jié)果點 
  7.      */ 
  8.     private static PointF calculatPoint(PointF startPoint, float length, float angle) { 
  9.         float deltaX = (float) Math.cos(Math.toRadians(angle)) * length; 
  10.         //符合Android坐標的y軸朝下的標準 
  11.         float deltaY = (float) Math.sin(Math.toRadians(angle-180)) * length; 
  12.         return new PointF(startPoint.x + deltaX, startPoint.y + deltaY); 
  13.     } 

這里要特別說明一下Math.sin()、Math.cos()、Math.toRadians()這三個函數(shù),其中sin\cos的參數(shù)是弧度制角度。說到弧度制可能大家都忘得差不多了,帶大家回顧一下中學(xué)數(shù)學(xué)。角的度量可以用弧度制也可以用角度制表示。其中弧度和角度轉(zhuǎn)換的橋梁就是圓周率π

  1. 1角度=(π/180)弧度 

比如說想計算30°的正弦值,用Java代碼需要先將角度制的30°轉(zhuǎn)為弧度值即通過Math.toRadians(30)得到30°對應(yīng)的弧度,完整代碼如下:

  1. double sin30 = Math.sin( Math.toRadians(30) ); 

打印結(jié)果是

  1. 0.49999999999999994 

如果非要得到0.5的話就強轉(zhuǎn)成float型就行了,可能是由于double的精度問題。

2)、第一節(jié)身體

第一節(jié)身體包括頭部和身體的第一段,代碼如下(虛線部分是身體其他部分的生成方法,暫時不管)

頭身

  1. private void makeBody(Canvas canvas, float headRadius) { 
  2.  
  3.     float angle = mainAngle + (float) Math.sin(Math.toRadians(currentValue * 1.2 * waveFrequence)) * 2; 
  4.     headPoint = calculatPoint(middlePoint, BODY_LENGHT / 2,mainAngle); 
  5.     //畫頭 
  6.     canvas.drawCircle(headPoint.x, headPoint.y, HEAD_RADIUS, mPaint); 
  7.         ........ 
  8.         ....... 
  9.     PointF point1, point2, point3, point4, contralLeft, contralRight; 
  10.     //point1和4的初始角度決定發(fā)髻線的高低值越大越低 
  11.     point1 = calculatPoint(headPoint, headRadius,  angle-80); 
  12.     point2 = calculatPoint(endPoint, headRadius * 0.7f, angle-90); 
  13.     point3 = calculatPoint(endPoint, headRadius * 0.7f, angle +90); 
  14.     point4 = calculatPoint(headPoint, headRadius, angle +80); 
  15.     //決定胖瘦 
  16.     contralLeft = calculatPoint(headPoint, BODY_LENGHT * 0.56f, angle -130); 
  17.     contralRight = calculatPoint(headPoint, BODY_LENGHT * 0.56f, angle +130); 
  18.     mPath.reset(); 
  19.     mPath.moveTo(point1.x, point1.y); 
  20.     mPath.quadTo(contralLeft.x, contralLeft.y, point2.x, point2.y); 
  21.     mPath.lineTo(point3.x, point3.y); 
  22.     mPath.quadTo(contralRight.x, contralRight.y, point4.x, point4.y); 
  23.     mPath.lineTo(point1.x, point1.y); 
  24.  
  25.     mPaint.setColor(Color.argb(BODY_ALPHA, 244, 92, 71)); 
  26.     //畫身子 
  27.     canvas.drawPath(mPath, mPaint); 

其中最難理解的是角度的計算這句話:

  1. float angle = mainAngle + (float) Math.sin(Math.toRadians(currentValue * 1.2 * waveFrequence)) * 2;//中心軸線和X軸順時針方向夾角 

這里Math.sin(Math.toRadians(currentValue * 1.2 * waveFrequence))是控制第一節(jié)身體擺動的核心方法,變量currentValue是ValueAnimator動畫的過程數(shù)值,1.2是用來控制身體擺動的固有頻率,waveFrequence是全局頻率,用于控制魚兒運動時的擺動頻率,因為sin函數(shù)是周期函數(shù),且值域為[-1,1],計算結(jié)果乘2之后這句話就可以生成一個[-2,2]的變化范圍,用這個值加上mainAngle(身體前進方向和X軸正方向夾角)就可以讓魚的第一節(jié)身體在身體主軸左右搖擺2°了。上邊的代碼生成了頭的圓心坐標,第一節(jié)身體的四個頂角以及身體兩側(cè)的貝塞爾曲線控制點,通過這幾個點,就可以畫出魚的頭和第一節(jié)身體了,并且可以根據(jù)動畫控制器的數(shù)值左右擺動身體

第二節(jié)第三節(jié)身體思想和第一節(jié)身體一致,不過腰線沒有用貝塞爾曲線,而是直接用直線代替,所以二三節(jié)身體是梯形,需要注意的是在計算第二三節(jié)身體角度的時候擺動核心方法要正余弦相互交替,否則就順拐了

3)、魚鰭

魚鰭的畫法也不難,麻煩的地方在于要判斷魚鰭是左邊的還是右邊的,因為魚鰭的弧線是貝塞爾曲線生成的,而曲線的控制點要分左右。其中fatherAngle是魚身主軸方向和X軸的的夾角,finsAngle是魚鰭向內(nèi)擺動時的偏移角度

  1. private void makeFins(Canvas canvas, PointF startPoint, int type, float fatherAngle) { 
  2.         //魚鰭控制點相對于魚主軸方向的角度 
  3.         float contralAngle = 115; 
  4.         mPath.reset(); 
  5.         mPath.moveTo(startPoint.x, startPoint.y); 
  6.         //魚鰭的另一端 
  7.         PointF endPoint = calculatPoint(startPoint, FINS_LENGTH, type == FINS_RIGHT ? fatherAngle - finsAngle-180 : fatherAngle + finsAngle+180); 
  8.         //曲線的控制點 
  9.         PointF contralPoint = calculatPoint(startPoint, FINS_LENGTH * 1.8f, type == FINS_RIGHT ? 
  10.                 fatherAngle - contralAngle - finsAngle : fatherAngle + contralAngle + finsAngle); 
  11.         mPath.quadTo(contralPoint.x, contralPoint.y, endPoint.x, endPoint.y); 
  12.         mPath.lineTo(startPoint.x, startPoint.y); 
  13.         mPaint.setColor(Color.argb(FINS_ALPHA, 244, 92, 71)); 
  14.         canvas.drawPath(mPath, mPaint); 
  15.         mPaint.setColor(Color.argb(OTHER_ALPHA, 244, 92, 71)); 
  16.  
  17.     } 

魚鰭定位過程

4)、魚尾

魚尾是大小兩個等腰三角形疊加而成的,三角形的頂點重合。繪制原理是根據(jù)三角形底邊中點來確定底邊的兩個點,其中角度和魚尾主方向垂直。其中newWith變量的是根據(jù)當前動畫的過程值動態(tài)生成的

  1. private void makeTail(Canvas canvas, PointF mainPoint, float length, float maxWidth, float angle) { 
  2.         float newWidth = (float) Math.abs(Math.sin(Math.toRadians(currentValue * 1.7 * waveFrequence)) * maxWidth + HEAD_RADIUS/5*3); 
  3.         //endPoint為三角形底邊中點 
  4.         PointF endPoint = calculatPoint(mainPoint, length, angle-180); 
  5.         PointF endPoint2 = calculatPoint(mainPoint, length - 10, angle-180); 
  6.         PointF point1, point2, point3, point4; 
  7.         point1 = calculatPoint(endPoint, newWidth, angle-90); 
  8.         point2 = calculatPoint(endPoint, newWidth, angle +90); 
  9.         point3 = calculatPoint(endPoint2, newWidth - 20, angle-90); 
  10.         point4 = calculatPoint(endPoint2, newWidth - 20, angle +90); 
  11.         //內(nèi) 
  12.         mPath.reset(); 
  13.         mPath.moveTo(mainPoint.x, mainPoint.y); 
  14.         mPath.lineTo(point3.x, point3.y); 
  15.         mPath.lineTo(point4.x, point4.y); 
  16.         mPath.lineTo(mainPoint.x, mainPoint.y); 
  17.         canvas.drawPath(mPath, mPaint); 
  18.         //外 
  19.         mPath.reset(); 
  20.         mPath.moveTo(mainPoint.x, mainPoint.y); 
  21.         mPath.lineTo(point1.x, point1.y); 
  22.         mPath.lineTo(point2.x, point2.y); 
  23.         mPath.lineTo(mainPoint.x, mainPoint.y); 
  24.         canvas.drawPath(mPath, mPaint); 
  25.  
  26.     } 

5)、動畫引擎

接下來就是激動人心的引擎“發(fā)動”時間了,看過上篇文章Android仿百度貼吧客戶端Loading小球的朋友就知道引擎部分是一個ValueAnimator,此篇也是。 動畫周期180秒,數(shù)值變化從0到54000,無限循環(huán)往復(fù)運行,將過程值賦值給currentValue然后刷新Drawable

  1. //引擎部分 
  2. ValueAnimator valueAnimator = ValueAnimator.ofInt(0, 54000); 
  3. valueAnimator.setDuration(180 * 1000); 
  4. valueAnimator.setInterpolator(new LinearInterpolator()); 
  5. valueAnimator.setRepeatCount(ValueAnimator.INFINITE); 
  6. valueAnimator.setRepeatMode(ValueAnimator.REVERSE); 
  7. valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { 
  8.     @Override 
  9.     public void onAnimationUpdate(ValueAnimator animation) { 
  10.         currentValue = (int) (animation.getAnimatedValue()); 
  11.         invalidateSelf(); 
  12.     } 
  13. }); 

運行結(jié)果:

感謝女朋友的默默支持

四、結(jié)語

動畫的分析和實現(xiàn)是一個枯燥又費腦筋的過程,時不時還要復(fù)習(xí)一下還給老師的數(shù)學(xué)知識,不過當引擎發(fā)動的時候看到繪制的東西動起來了你會覺得所有的努力都是值得的。下一篇將分析如何讓魚兒游動起來,希望大家繼續(xù)關(guān)注。

下篇地址:自定義Drawable實現(xiàn)靈動的紅鯉魚動畫(下篇)

繪制部分源碼:靈動的紅鯉魚Github源碼

【本文為51CTO專欄作者“季晨生”的原創(chuàng)稿件,轉(zhuǎn)載請通過51CTO聯(lián)系作者獲取授權(quán)】

戳這里,看該作者更多好文

責(zé)任編輯:武曉燕 來源: 51CTO專欄
相關(guān)推薦

2017-07-19 14:59:26

Drawable動畫實現(xiàn)

2022-02-16 15:25:31

JS代碼Canvas鴻蒙

2011-08-09 17:16:56

CoreAnimati動畫

2022-05-18 07:44:13

自定義菜單前端

2009-09-07 22:00:15

LINQ自定義

2015-10-12 16:47:13

iOS下拉線條動畫

2024-08-26 11:13:26

字典entry自定義

2009-07-06 16:20:50

JSP自定義標簽

2015-02-12 15:33:43

微信SDK

2022-08-22 20:10:59

自定義計數(shù)器CSS

2021-12-02 18:05:21

Android Interpolato動畫

2022-04-01 15:59:22

SQLPostgreSQL審計

2015-07-29 10:31:16

Java緩存算法

2009-06-17 16:00:03

Hibernate自定

2013-01-09 17:22:38

Android開發(fā)Camera

2022-03-01 16:09:06

OpenHarmon鴻蒙單選組件

2022-12-07 08:56:27

SpringMVC核心組件

2023-10-24 13:48:50

自定義注解舉值驗證

2023-01-03 07:40:27

自定義滑塊組件

2009-09-03 13:34:03

.NET自定義控件
點贊
收藏

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

欧美精品一卡二卡| 久久久久97| 国产精品久久久久久久久免费桃花| 国产精品999999| 免费在线观看a视频| 成人网ww555视频免费看| 国产精品视频观看| 成人看片在线| 国产成人无码一区二区三区在线| 亚洲免费专区| 欧美久久久影院| 亚洲色成人www永久在线观看| 午夜视频在线播放| 日韩av电影免费观看高清完整版| 亚洲欧美一区二区三区在线| 成年人小视频网站| 九七久久人人| 9久草视频在线视频精品| 日本精品va在线观看| 国产精品免费无码| 日本一区二区三区视频在线看 | 最新亚洲视频| 伊人成人开心激情综合网| 色偷偷中文字幕| 免费电影日韩网站| 有码一区二区三区| 神马影院午夜我不卡影院| 精品国产乱码久久久久久蜜臀网站| 99re国产精品| 另类专区欧美制服同性| 18禁裸乳无遮挡啪啪无码免费| 91精品国产精品| 一区二区三区在线播放视频| 免费成人三级| 91.麻豆视频| 国内自拍在线观看| 最新日本在线观看| 日本一区二区动态图| 国产精品久久一区二区三区| 亚洲综合视频在线播放| 亚洲综合精品四区| 欧美黑人性视频| 成年人免费视频播放| 奇米狠狠一区二区三区| 777a∨成人精品桃花网| 日本中文字幕片| 丝袜在线视频| 成人欧美一区二区三区黑人麻豆 | 亚洲色图都市小说| 日本在线播放不卡| 五月婷婷在线观看视频| 国产成人a级片| 91精品久久久久久| 久久久成人免费视频| 欧美另类亚洲| 久久精品91久久香蕉加勒比 | 欧美aaa级| 日本乱人伦一区| 人妻有码中文字幕| 在线最新版中文在线| 亚洲电影第三页| 国产一线二线三线女| 丝袜中文在线| 中文字幕在线一区| 亚洲国产欧美一区二区三区不卡| 你懂的好爽在线观看| 不卡的看片网站| 粉嫩av一区二区三区免费观看| av网站免费大全| 激情综合色丁香一区二区| 国产精品最新在线观看| 中文字幕+乱码+中文乱码91| 日韩不卡手机在线v区| 国产成人涩涩涩视频在线观看| av大全在线观看| 在线综合亚洲| 国产成人精品免高潮在线观看| 麻豆成人免费视频| 日韩中文字幕不卡| 国产精品男女猛烈高潮激情| 国产精品成人久久久| 日本不卡一区二区三区高清视频| 国产精品九九九| 亚洲中文字幕在线观看| 国产一区二区精品久久| 成人av片网址| 欧洲毛片在线| 国产精品色哟哟网站| 一区二区三区电影| 肉肉视频在线观看| 天天综合天天综合色| 成人在线免费观看av| 欧美精品总汇| 欧美电影一区二区三区| 日本人妻一区二区三区| 日韩在线亚洲| 亚洲精品国产美女| 爱爱免费小视频| 欧美日韩激情在线一区二区三区| 中文字幕成人精品久久不卡| 国产免费美女视频| 国产精品久久久久9999高清| 成人精品视频99在线观看免费| 内射后入在线观看一区| 国产精品久久久久一区二区三区共| 97干在线视频| 国产精品亚洲四区在线观看 | 疯狂揉花蒂控制高潮h| 精品国产乱码久久久久久1区2匹 | 丁香影院在线| 在线观看欧美日本| 色诱av手机版| 精品视频97| 久久99久久亚洲国产| 久久久久久久黄色片| 麻豆91在线看| 国产一区免费在线观看| av一区在线观看| 亚洲h动漫在线| www.se五月| 久久悠悠精品综合网| 一本色道久久88精品综合| 精品亚洲永久免费| 狠狠色丁香久久婷婷综| 欧美精品与人动性物交免费看| а√天堂在线官网| 色久综合一二码| xxxx国产视频| 久久国产综合| 国产成人aa精品一区在线播放| 99er热精品视频| 久久久久久免费| 和岳每晚弄的高潮嗷嗷叫视频| 成人免费一区| 亚洲毛茸茸少妇高潮呻吟| 极品久久久久久| 亚洲毛片播放| av一区二区在线看| 日本在线观看网站| 色屁屁一区二区| 精品人妻伦一二三区久| 久久综合电影| 欧美性视频精品| 国产三级三级在线观看| 中文字幕+乱码+中文字幕一区| 无码粉嫩虎白一线天在线观看| 亚洲国产综合在线观看| 一本色道久久综合狠狠躁篇怎么玩| 国产精品第108页| 丁香激情综合国产| 成人短视频在线观看免费| 日韩免费大片| 中文字幕国产日韩| 亚洲国产精品无码久久久| 99国产欧美另类久久久精品| 性一交一乱一伧国产女士spa| 日韩欧美另类中文字幕| 久久精品小视频| 91国偷自产中文字幕久久| 国产欧美一区二区精品仙草咪 | 无码黑人精品一区二区| 九色综合国产一区二区三区| 亚洲蜜桃在线| 97成人超碰| 日韩毛片中文字幕| 久久久国产高清| av不卡免费在线观看| 毛片在线视频播放| 欧美亚视频在线中文字幕免费| 欧美高清视频在线| 不卡av中文字幕| 一区二区三区在线高清| 免费高清视频在线观看| 日产精品一区二区| 国产精品h在线观看| 午夜在线观看视频18| 亚洲影视资源网| 国产精品偷伦视频免费观看了| 91精品国产乱码久久久久久久 | 日韩亚洲成人av在线| 中文字幕一区二区人妻视频| 国产无一区二区| 欧美一级特黄a| 小处雏高清一区二区三区| 91中文在线观看| 国产乱妇乱子在线播视频播放网站| 亚洲第一区在线观看| 精品免费囯产一区二区三区 | 日韩欧美999| 精品无人区无码乱码毛片国产| 免费不卡在线观看| www国产免费| 女同一区二区三区| 国产精品久久电影观看| 91cn在线观看| 日韩成人高清在线| 这里只有久久精品视频| 日韩一区日韩二区| 狠狠人妻久久久久久综合蜜桃| 日日摸夜夜添夜夜添亚洲女人| 91制片厂免费观看| 欧美黑人巨大videos精品| 国产精品露脸av在线| 国产鲁鲁视频在线观看特色| 亚洲国产欧美日韩精品| 在线观看中文字幕码| 亚洲成人综合视频| gv天堂gv无码男同在线观看| 国产成人精品在线看| av天堂永久资源网| 亚洲激情中文在线| 蜜桃91精品入口| 国产成人免费av一区二区午夜 | 欧洲精品亚洲精品| 欧美影院精品| 国产精品美女www爽爽爽视频| 免费男女羞羞的视频网站在线观看| 亚洲色图15p| www夜片内射视频日韩精品成人| 色综合久久66| 久久久久亚洲av成人片| 国产精品入口麻豆原神| 日韩成人av一区二区| 国产一区二区三区四区在线观看| 精品欧美一区免费观看α√| 成人在线国产| 久精品国产欧美| 中文字幕区一区二区三| 国产精品丝袜高跟| 亚洲va中文在线播放免费| 欧美极度另类性三渗透| 国内av一区二区三区| 亚洲成人精品视频在线观看| 日韩综合在线观看| 亚洲国产精品久久人人爱| 免费中文字幕日韩| 国产精品午夜久久| 熟女俱乐部一区二区视频在线| 国产精品小仙女| 婷婷中文字幕在线观看| 青青草97国产精品免费观看| 美女日批免费视频| 亚洲视频综合| 喜爱夜蒲2在线| 91精品一区二区三区综合在线爱| 色综合电影网| 国产精品一区高清| 美乳视频一区二区| 色先锋久久影院av| 精品午夜一区二区| 国产精品视频3p| 国产成人精品日本亚洲11 | 国产成人ay| 国产传媒一区二区三区| 视频一区在线| 99热99热| 国产 日韩 欧美 综合 一区| av资源站久久亚洲| 91精品入口| 国产精品免费一区二区三区| 日韩在线精品强乱中文字幕| 91精品天堂| 91精品啪在线观看国产手机| 国产成人女人毛片视频在线| 精品欧美午夜寂寞影院| 国产麻豆乱码精品一区二区三区| 白白在线精品| 国产一区再线| 欧美深夜视频| 你懂的视频在线一区二区| 美日韩中文字幕| 特级西西444www大精品视频| 久久国产精品亚洲人一区二区三区 | 999福利视频| 亚洲欧美一区二区三区孕妇| 91在线播放观看| 亚洲国产另类av| 一级片中文字幕| 欧美日韩亚洲不卡| 国产精品探花视频| 欧美大片在线观看一区二区| 国模人体一区二区| 亚洲精品网址在线观看| yourporn在线观看视频| 久久久精品电影| av电影院在线看| 国产成人精品综合久久久| 伊人久久一区| 国产乱码精品一区二区三区不卡| 美国十次av导航亚洲入口| 青青成人在线| 中文不卡在线| 成人毛片视频网站| 久久国产精品色婷婷| aaaaa黄色片| 久久久久久久久伊人| 无码人妻精品中文字幕 | 精品一区二区三区四区| 91在线视频| 久久久久久久久电影| 亚洲国产尤物| 99porn视频在线| 精品国产一级毛片| 日韩a级黄色片| 日韩av一二三| 日韩综合第一页| 国产精品日日摸夜夜摸av| 蜜臀久久精品久久久用户群体| 欧美性生活大片免费观看网址| 国产又黄又粗又猛又爽| 日韩高清免费在线| aiai在线| 97超级碰碰碰久久久| **日韩最新| 日本公妇乱淫免费视频一区三区| 午夜电影亚洲| 中文字幕第36页| 成人毛片在线观看| 亚洲色图100p| 色悠悠亚洲一区二区| 亚洲国产精品国自产拍久久| 亚洲国产精品电影| 成视频免费观看在线看| 青草青草久热精品视频在线网站| 国产精品一区二区精品| 日韩av免费电影| 影音先锋中文字幕一区| www.com操| 久久青草国产手机看片福利盒子 | 亚洲一区在线观看视频| 亚洲中文一区二区三区| 亚洲图片欧美午夜| 黄视频免费在线看| 99se婷婷在线视频观看| 91综合在线| a在线观看免费视频| 26uuu成人网一区二区三区| 国产亚洲精品码| 欧美一二三四区在线| 婷婷在线视频| 国产美女精品视频免费观看| 国产一区二区欧美| 欧美成人免费高清视频| 不卡在线视频中文字幕| 麻豆疯狂做受xxxx高潮视频| 欧美丰满美乳xxx高潮www| h网站在线免费观看| 国产成人精品一区二区三区| 亚洲黄页网站| 男人天堂999| 91丨porny丨国产入口| 日本在线视频免费观看| 亚洲激情电影中文字幕| а√天堂中文资源在线bt| 国产精品亚洲一区| 亚洲第一网站| 欧亚乱熟女一区二区在线 | 国产探花在线视频| 欧美美女网站色| 免费大片黄在线观看视频网站| 国产精品高潮视频| 精品理论电影在线| 欧美三级理论片| 国产精品久久久久久妇女6080 | 久久高清免费观看| 久久久久久久久久久久久久久| 91福利小视频| 亚洲s色大片| 91精品综合视频| 欧美fxxxxxx另类| 国产chinese中国hdxxxx| 午夜精品123| 欧美孕妇孕交| 国产日韩欧美在线看| 五月精品视频| 色哟哟无码精品一区二区三区| 亚洲成人免费视| 欧美18xxxxx| 国产精品欧美日韩久久| 国产精品99一区二区三区| 人妻精油按摩bd高清中文字幕| 亚洲曰韩产成在线| 少妇性bbb搡bbb爽爽爽欧美| 欧美亚洲国产日本| 欧美偷拍自拍| 99999精品| 亚洲成人免费在线| 永久av在线| 久久99精品久久久久久水蜜桃| 麻豆传媒一区二区三区| 日韩精品久久久久久久| 久久精品国产亚洲7777| 日韩伦理一区二区三区| 一级黄色片在线免费观看| 日韩欧美国产一区二区| 欧美女同一区| 亚洲亚洲精品三区日韩精品在线视频| 成人中文字幕电影| 国产精品高潮呻吟av| 国产成人精品一区|