日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

Android绘图(一)基础篇

發(fā)布時間:2023/12/3 综合教程 72 生活家
生活随笔 收集整理的這篇文章主要介紹了 Android绘图(一)基础篇 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

目錄

  • 一、繪圖入門
  • 二、繪制位圖
  • 三、繪制點
  • 四、繪制直線
  • 五、繪制矩形
  • 六、繪制圓
  • 七、繪制路徑
    • 7.1 往 Path 中添加線條
    • 7.2 往 Path 中添加矩形、橢圓、弧
    • 7.3 往 Path 中添加曲線和貝塞爾曲線
    • 7.4 將 Path 中的圖形進行運算
    • 7.5 繪制文字
      • 7.5.1 在指定位置繪制文本
  • 八、Paint的FontMetrics使用
    • 8.1 行距
    • 8.2 計算fontPadding
    • 8.3文本在控件水平方向居中顯示
    • 8.4 文本在控件垂直方向居中顯示
    • 8.5 Paint的setTextAlign使用
  • 九、繪制驗證碼

一、繪圖入門

Canvas 翻譯為“畫布”,可以理解成畫家作畫時的宣紙。Canvas 供了若干方法用于繪制各種圖形圖案——點、線、圓等等。Paint 翻譯為“畫筆”,為繪圖定義各種參數(shù)——顏色、線條樣式、圖案樣式等等。通常的繪圖思路是先定義 Paint 對象,指定繪圖參數(shù),再通過 Canvas 對象進行圖 形繪制,繪圖的結(jié)果因 Paint 的不同而不同。Paint 類用于定義繪圖時的參數(shù),主要包含顏色、文本、圖形樣式、位圖模式、濾鏡等幾個方面。
顏色是指繪圖時使用的顏色,在 Android 中顏色可以指定透明度,使用 16 進制來表示顏色時,格式通常為#AARRGGBB,其中,AA 表示透明度、RR 表示紅色、GG 表示綠色、BB 表示藍色,Color 類定義了顏色信息,內(nèi)置了常用顏色的 int 型常量,比如 Color.RED 是紅色,Color.BLUE 是藍色……如果您習慣了 16 進制的顏色,Color 類的靜態(tài)方法 parseColor(String colorString)可以將 16進制顏色轉(zhuǎn)換成 Color 類型。
先來看看簡單的使用

@Override
protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);ImageView iv = findViewById(R.id.iv1);// 創(chuàng)建空白的bitmapBitmap bitmap = Bitmap.createBitmap(400, 400, Bitmap.Config.ARGB_8888);// 新建畫布,關(guān)聯(lián)bitmapCanvas canvas = new Canvas(bitmap);// 繪制黑色背景canvas.drawColor(Color.BLACK);// 定義畫筆Paint paint = new Paint();// 設(shè)置畫筆顏色paint.setColor(Color.WHITE);paint.setAntiAlias(true);// 畫筆實心paint.setStyle(Paint.Style.FILL);// 文本水平居左對齊paint.setTextAlign(Paint.Align.LEFT);// 字體大小設(shè)置paint.setTextSize(32f);paint.setTextSkewX(0.5f); // 設(shè)置文本傾斜度,取值0~1,正負表示傾斜方向paint.setUnderlineText(true);// 設(shè)置下劃線paint.setFakeBoldText(true); // 設(shè)置粗體// 繪制文字canvas.drawText("hello 你好啊!", 10, 100, paint);// 繪制圖形// 設(shè)置畫筆空心樣式paint.setStyle(Paint.Style.STROKE);paint.setColor(Color.RED);// 設(shè)置畫筆描邊的邊框?qū)挾萷aint.setStrokeWidth(20);// 設(shè)置畫筆連接處的形狀paint.setStrokeJoin(Paint.Join.BEVEL);// 繪制矩形canvas.drawRect(new Rect(20, 200, 350, 350), paint);//顯示bitmap到ImageView中iv.setImageBitmap(bitmap);
}

效果圖:

二、繪制位圖

常用方法

//  bitmap 繪制在畫布上,同時指定位圖左上角相對于畫布的坐標,大小與原位置相同,不進行任何縮放。
public void drawBitmap( Bitmap bitmap, float left, float top,  Paint paint)
//  下面兩個方法從源bitmap中摳出一塊大小區(qū)域為src的圖片并繪制到canvas的dst處。src和ds 的大小與比例關(guān)系影響到最終的繪制效果,這個過程是自動縮放以適應(yīng)dest區(qū)域的
public void drawBitmap(Bitmap bitmap,  Rect src, RectF dst, Paint paint)
public void drawBitmap(Bitmap bitmap,  Rect src, Rect dst, Paint paint)

ps:繪制位圖時,除非需要進行位圖運算,否則,并不需要指定 paint 對象,直接傳遞null 即可。

案例-使用drawBitmap方法在ImageView上繪制2個位圖,一個按原始大小繪制,另一個則按2倍大小繪制

@Override
protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);ImageView iv = findViewById(R.id.iv);// 創(chuàng)建空白位圖Bitmap bitmap = Bitmap.createBitmap(500, 800, Bitmap.Config.ARGB_8888);// 創(chuàng)建畫布并關(guān)聯(lián)位圖Canvas canvas = new Canvas(bitmap);// 繪制背景色,便以區(qū)分canvas.drawColor(Color.BLACK);// 獲取資源目錄下的原圖Bitmap sourceBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);// 繪制原圖canvas.drawBitmap(sourceBitmap, 0, 0, null);// 獲取原圖寬高int bmpWidth = sourceBitmap.getWidth();int bmpHeight = sourceBitmap.getHeight();// 創(chuàng)建原圖的矩形Rect src = new Rect(0, 0, bmpWidth, bmpHeight);// 創(chuàng)建放大后的矩形,位于原圖下方Rect dest = new Rect(0, bmpHeight, bmpWidth * 2, bmpHeight + bmpHeight * 2);// 繪制放大后的位圖canvas.drawBitmap(sourceBitmap, src, dest, null);// 顯示到ImageView上iv.setImageBitmap(bitmap);
}

效果圖如下:

三、繪制點

點的大小取決于 setStrokeWidth()方法的參數(shù),參數(shù)值越大,點也就越大。所以,不要以為一個點就是屏幕上的一個像素。如果將 stroke 的寬度設(shè)置為足夠大,我們發(fā)現(xiàn)最終繪制出來的點其實是一個正方形。繪制點的方法一共有三個:

// 該方法在(x,y)處繪制一個點。
public void drawPoint(float x, float y, Paint paint)
// 該方法的參數(shù) pts 是一個數(shù)組,從下標 0 開始每 2 個數(shù)確定一個點,連續(xù)繪制多個點。多余的元素會忽略。
public void drawPoints(float[] pts, Paint paint)
// 從 pts 數(shù)組中的第 offset 處開始取出 count 個數(shù)字,以 2 個數(shù)為一組確實一個點,連 續(xù)繪制若干個點。忽略多余的元素
public void drawPoints(float[] pts, int offset, int count,	Paint paint)

示例如下:

@Override
protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);ImageView iv = findViewById(R.id.iv);Bitmap bitmap = Bitmap.createBitmap(500, 500, Bitmap.Config.ARGB_8888);Canvas canvas = new Canvas(bitmap);// 繪制背景canvas.drawColor(Color.BLACK);//畫一個紅色的點Paint paint = new Paint();paint.setColor(Color.RED);paint.setStrokeWidth(10);canvas.drawPoint(120, 20, paint);// 畫一組藍色的點paint.setColor(Color.BLUE);float[] points = new float[]{10, 10, 50, 50, 50, 100, 50, 150};canvas.drawPoints(points, paint);// 畫一組綠色的點paint.setColor(Color.GREEN);points = new float[]{20, 20, 60, 60, 60, 80, 60, 180};canvas.drawPoints(points, 3, 4, paint);// 顯示在ImageView上iv.setImageBitmap(bitmap);
}

效果圖:

四、繪制直線

兩個點確定一條直線,所以,繪制線條時,需要指定兩個點的坐標。同畫點一樣,繪制線條也有 3 個重載的方法:

// 在(startX,startY)和(stopX,stopY)兩個點之間繪制一條直線。
public void drawLine(float	startX,	float startY, float stopX, float stopY,	Paint paint)
// pts 數(shù)組中每4個數(shù)一組繪制一條直線,多余的元素會忽略。	
public void drawLines(float[] pts,	Paint paint)	
// 從 pts 數(shù)組中的 offset 索引處開始,取出 count 個元素,并以 4 個數(shù)一組繪制直線,忽略多余的元素。
public void drawLines(float[] pts,	int offset,int count, Paint paint)

五、繪制矩形

繪制矩形時,參數(shù)分為兩種:一種是指定 left、top、right、bottom 等 4 個參數(shù),另一種直接指定一個 Rect 對象或 RectF 對象。繪制直角矩形的三個重載方法如下:

public void drawRect(float left,float top,	float right,float bottom,Paint paint)public void drawRect(Rect r,Paint	paint)public void drawRect(RectF	r,Paint	paint)

圓角矩形的幾何形狀比直角矩形相對復(fù)雜一些,我們需要指定 4 個拐角的弧度,4 個角的弧度不能單獨設(shè)置,而是統(tǒng)一設(shè)置為相同的值。拐角弧度實際上是圓或橢圓的一段弧線,如圖所示:

繪制圓角矩形一共有 2 個重載的方法:

// 該方法用于繪制一個圓角矩形,left、top、right、bottom 構(gòu)建一個矩形,rx、ry 分別是圓角處的水平半徑和垂直半徑。rx 和 ry 不一定相同,如果不同,則是橢圓上的一段弧線。
public void drawRoundRect(float left, float top, float right, float bottom, float rx, float ry,Paint paint)
// 該方法是上面方法的另一種重載形式。
public void drawRoundRect(RectF rect,float	rx,float ry,Paint paint)

下面的代碼繪制了三個矩形,一個直角矩形,一個為空心圓角矩形,另一個是有填充顏色的實心圓角矩形:

@Override
protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main5);ImageView iv = findViewById(R.id.iv);Bitmap bitmap = Bitmap.createBitmap(500, 500, Bitmap.Config.ARGB_8888);Canvas canvas = new Canvas(bitmap);canvas.drawColor(Color.BLACK);Paint paint = new Paint();paint.setAntiAlias(true);// 該方法用于設(shè)置落筆時的樣式,控制我們的畫筆在離開畫板時留下的最后一點圖形paint.setStrokeCap(Paint.Cap.ROUND);// 當繪圖樣式為 STROKE 時,該方法用于指定線條連接處的拐角樣式,能使繪制的圖形更加平滑paint.setStrokeJoin(Paint.Join.ROUND);paint.setColor(Color.RED);// 繪制紅色的直角矩形canvas.drawRect(new Rect(0, 0, 100, 100), paint);// 繪制綠色的圓角矩形paint.setColor(Color.GREEN);canvas.drawRoundRect(new RectF(100, 100, 200, 200), 20, 20, paint);// 繪制藍色的圓角矩形(空心)paint.setColor(Color.BLUE);paint.setStyle(Paint.Style.STROKE);paint.setStrokeWidth(5);// 圓角的半徑可以不一樣canvas.drawRoundRect(new RectF(200, 200, 400, 400), 10, 20, paint);iv.setImageBitmap(bitmap);
}

效果圖:

注意: 繪制圓角矩形邊框的時候,需要考慮邊框的寬度,也就是paint的setStrokeWidth設(shè)置的大小,如果canvas從(0,0)左上角開始繪制圓角矩形邊框, 那么canvas.drawRoundRect的4個矩形頂點坐標需要往里面縮進邊框?qū)挾鹊囊话?否則繪制的區(qū)域在canvas之外是看不到的,導致繪制的邊框?qū)挾瓤雌饋硪阮A(yù)想的要小一半,并且4個圓角看起來會比非圓角部分的線條要粗一點.

六、繪制圓

在對圖形進行分類時,我將圓、橢圓、扇形、弧線統(tǒng)一歸類到“圓”這一類中,扇形和弧線可以認為是圓或橢圓的一部分,橢圓的大小是由他的外切矩形來決定的,這實際上和幾何學中的定義完全一致,如圖所示:

繪制橢圓的方法如下:

public void drawOval(float	left, float top, float right, float bottom, Paint paint)public void drawOval(RectF	oval, Paint paint)

繪制橢圓時,如果外切矩形的長和寬相等,即為正方形,繪制出來的圖形就是一個正圓,但 是 Cavnas 類供了另一個更加簡單實用的方法,供圓點的坐標和半徑即可。

//(cx、cy)為圓心坐標,radius 為圓的半徑
public void drawCircle(float cx, float cy,	float radius, Paint paint)

弧線和扇形本質(zhì)上更是相似,弧線是橢圓上的一段,而扇形則是將弧線的兩個端點和橢圓中心點使用線條連接形成的閉合區(qū)域。理解弧線和扇形的演變過程便很容易明白方法中的參數(shù)意義,如下圖所示:

繪制弧線和扇形的方法如下:

// 參數(shù)oval是規(guī)定橢圓的范圍, startAngle 表示起始角度,sweepAngle 表示扇形或弧線所占的角度,
// 正數(shù)表示順時針,負數(shù)表示逆時針,useCenter 參數(shù)詢問是否要使用中心點,為true 表示扇形,為 false 表示弧線
public void drawArc(RectF oval,float startAngle,float sweepAngle,boolean useCenter,Paint paint)public void drawArc(float left, float top, float right, float bottom, float startAngle, float sweepAngle,boolean useCenter,Paint paint)

下面的代碼演示了弧線和扇形的繪制方法,采用了 Style.STROKE 的圖形模式,如果將 Style設(shè)置為 Style.FILL,不管是弧線還是扇形,都可以使用顏色進行填充

@Override
protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main6);ImageView iv = findViewById(R.id.iv);Bitmap bitmap = Bitmap.createBitmap(500, 500, Bitmap.Config.ARGB_8888);Canvas canvas = new Canvas(bitmap);canvas.drawColor(Color.BLACK);Paint paint = new Paint();paint.setAntiAlias(true);paint.setStrokeWidth(5);paint.setStrokeJoin(Paint.Join.ROUND);paint.setStrokeCap(Paint.Cap.ROUND);// 空心模式paint.setStyle(Paint.Style.STROKE);RectF oval = new RectF(100, 100, 400, 200);// 繪制橢圓paint.setColor(Color.GRAY);canvas.drawOval(oval, paint);// 繪制圓弧,起始角度90度(也就是y軸原點),掃過45度(也就是8點中方向)paint.setColor(Color.RED);canvas.drawArc(oval,90,45,false,paint);// 繪制扇形,起始角度是0度(也就是在x軸原點),掃過-45度(也就是3點鐘方向,因為Android坐標系是向下的)paint.setColor(Color.GREEN);canvas.drawArc(oval,0,-45,true,paint);iv.setImageBitmap(bitmap);
}

效果圖:

七、繪制路徑

Path 是 Graphics2D 中一個非常重要的概念,表示“路徑”,理解該概念時保持“路徑”的本色就好。路徑可以是直的、也可以是彎的,可以是閉合的、也可以是非閉合的,可以是圓形的、也可以是方形的,可以是單個的、也可以是多個的,可以是簡單的、也可以是復(fù)雜的……總的來說,路徑是基于普通圖形但是功能比普通圖形更強的一種復(fù)雜圖形。

Path 是一個類,用于繪制復(fù)雜圖形,創(chuàng)建之初什么也沒有,只有往 Path 中添加了具體的形狀,Path 才會清晰可見。繪制 Path 時,所有信息都存儲在 Path 對象中,Canvas 根據(jù) Path 對象來繪制相應(yīng)的圖形。

我們將 Path 的功能歸納成以下幾類:

7.1 往 Path 中添加線條

通過 Path 可以繪制出奇形怪狀的線條,并能將線條組合在一起變成折線,閉合后就是一個多邊形了。這就是 Path 的厲害之處。為此,Path 類中定義了 5 個方法

// 將畫筆移動到點(x,y)的位置,使用的是絕對定位
public void moveTo(float x,float y)
// 將畫筆移動到一個新點,新點在上一個點的基礎(chǔ)上偏移(dx,dy),也就是說,新點的坐標為(x+dx,y+dy)。這里使用的是相對定位。首字母“r”就是“relative(相對)”的意思
public void rMoveTo(float dx,float	dy)
// 將畫筆連接到點(x,y)的位置,并在上一個點與當前點之前畫一條直線。使用的是絕對定位。
public void lineTo(float x,float y)
// 將畫筆移動到一個新點,新點在上一個點的基礎(chǔ)上偏移(dx,dy),新點的坐標為(x+dx,y+dy),同時,在新點與上一個點之間畫一條直線。這里使用的是相對定位。
public void rLineTo(float dx,float dy)
// 在第一個點和最后一個點之前畫一條直線,形成閉合區(qū)域。
public void close()

下面的案例使用 Path 繪制了一個五角星,這不是一個完美的五角星幾何圖形,因為五個點的坐標并沒有正確計算出來,只是算了個大概。首先調(diào)用了 moveTo(0, 150)定義好這次繪圖的起 點,接下來調(diào)用 rLineTo()方法通過相對定位計算出下一個點的坐標,并使用直線連接,最后,調(diào)用 close()方法連接最后一點和第一個點以形成閉合區(qū)域。

@Override
protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main7);ImageView iv = findViewById(R.id.iv);Bitmap bitmap = Bitmap.createBitmap(500, 500, Bitmap.Config.ARGB_8888);Canvas canvas = new Canvas(bitmap);canvas.drawColor(Color.BLACK);Paint paint = new Paint();paint.setAntiAlias(true);paint.setColor(Color.WHITE);paint.setStyle(Paint.Style.STROKE);paint.setStrokeWidth(5);paint.setStrokeCap(Paint.Cap.ROUND);paint.setStrokeJoin(Paint.Join.ROUND);// 創(chuàng)建路徑Path path = new Path();path.moveTo(0, 150);path.rLineTo(300, 0);path.rLineTo(-300, 150);path.rLineTo(150, -300);path.rLineTo(150, 300);path.close();// 連接最后一點和第一個點以形成閉合區(qū)域// 繪制路徑canvas.drawPath(path, paint);iv.setImageBitmap(bitmap);
}

效果圖:

7.2 往 Path 中添加矩形、橢圓、弧

如果要往 Path 對象中添加矩形、橢圓、圓和弧,需要調(diào)用 Path 類中定義的一組以“add”開 頭的方法,這組方法有些需要傳遞一個類型為 Path.Direction 的參數(shù),這是一個枚舉類型,枚舉值 CW 表示順時針,CCW 表示逆時針,下一節(jié)內(nèi)容沿著圖形繪制文字時,我們可以清晰地感受到方向?qū)L圖帶來的影響。

// 往 Path 對象中添加一個矩形
public void addRect(RectF rect,Path.Direction dir)public void addRect(float left,float top,float right,float	bottom,	Path.Direction	dir)
// Path 對象中添加一個圓角矩形。該方法和前面繪制圓角矩形相比在定義四個角的弧線大小時功能更強,能對四個角分別定義不同的弧線弧度
public void addRoundRect(RectF rect,float[] radii,	Path.Direction dir)public void addRoundRect(RectF rect,float rx,float	ry,Path.Direction dir)public void addRoundRect(float left, float top, float right, float	bottom, float[] radii,Path.Direction dir)
// Path 對象中添加一個橢圓。
public void addOval(RectF oval, Path.Direction dir)public void addOval(float left, float top,	float right, float bottom, Path.Direction dir)
// Path 對象中添加一個圓。
public void addCircle(float x, float y, float radius, Path.Direction dir)
// Path 對象中添加一段弧。本方法并沒有指定方向,因為角度的正負已經(jīng)代表了方向,正數(shù)為順時針,負數(shù)為逆時針。
public void addArc(RectF oval, float startAngle, float sweepAngle)
public void addArc(float left, float top, float right, float bottom, float startAngle, float sweepAngle)

我們在下面的代碼中繪制了一個 Path 對象,對象中同時包含了矩形、圓角矩形、橢圓、圓、弧線等圖形,顯然,Path 對象繪制出來的圖形更加復(fù)雜了。

@Override
protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main8);ImageView iv = findViewById(R.id.iv);Bitmap bitmap = Bitmap.createBitmap(500, 620, Bitmap.Config.ARGB_8888);Canvas canvas = new Canvas(bitmap);canvas.drawColor(Color.BLACK);Paint paint = new Paint();paint.setStyle(Paint.Style.STROKE);paint.setAntiAlias(true);paint.setStrokeWidth(5);paint.setColor(Color.RED);Path path = new Path();// 繪制矩形path.addRect(new RectF(10, 10, 300, 100), Path.Direction.CCW);// 繪制圓角矩形,4個角的弧度都不一樣,2個數(shù)確定一個弧度path.addRoundRect(new RectF(10, 120, 300, 220),new float[]{10, 20, 20, 10, 30, 40, 40, 30},Path.Direction.CCW);// 橢圓path.addOval(new RectF(10, 240, 300, 340), Path.Direction.CCW);// 圓path.addCircle(60, 390, 50, Path.Direction.CCW);// 弧線path.addArc(new RectF(10, 500, 300, 600), -30, -60);// 繪制路徑canvas.drawPath(path,paint);iv.setImageBitmap(bitmap);
}

效果圖:

7.3 往 Path 中添加曲線和貝塞爾曲線

曲線包括弧線和貝塞爾曲線,與前面講的矩形、圓或弧線不同,繪制曲線時需要確定一個起點,繪制的曲線會與該起點進行連接,形成一個更加復(fù)雜的圖形。
貝塞爾曲線(Bézier curve)是圖形開發(fā)中的一個重要工具,通過三個點的,確定一條平滑的曲線,又稱貝茲曲線或貝濟埃曲線,是應(yīng)用于二維圖形應(yīng)用程序的數(shù)學曲線。一般的矢量圖形軟件通過它來精確畫出曲線,貝茲曲線由線段與節(jié)點組成,節(jié)點是可拖動的支點,線段像可伸縮的皮筋,我們在繪圖工具上看到的鋼筆工具就是來做這種矢量曲線的。貝塞爾曲線是計算機圖形學中相當重要的參數(shù)曲線,在一些比較成熟的位圖軟件中也有貝塞爾曲線工具。貝塞爾曲線又分為一階貝塞爾曲線、二階貝塞爾曲線、三階貝塞爾曲線和高階貝塞爾曲線,一階貝塞爾曲線就是一條線段,Path 類支持二階貝塞爾曲線和三階貝塞爾曲線。如下圖所示分別是: 一階、二階、三階

前面提到,貝塞爾曲線通過 3 個點來繪制一條平滑的曲線,這 3 個點分別是起點、控制點和終點。比如,如果要繪制一條二階貝塞爾曲線,必須調(diào)用 moveTo()方法定義起點,再調(diào)用如下方法繪制貝塞爾曲線

// (x1,y1)是控制點,(x2,y2)是終點。
public void quadTo(float x1,float y1,float x2,float y2)

我們通過一段代碼演示如何繪制貝塞爾曲線

@Override
protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main9);ImageView iv = findViewById(R.id.iv);Bitmap bitmap = Bitmap.createBitmap(500, 400, Bitmap.Config.ARGB_8888);Canvas canvas = new Canvas(bitmap);canvas.drawColor(Color.BLACK);Paint paint = new Paint();paint.setStyle(Paint.Style.STROKE);paint.setAntiAlias(true);paint.setStrokeWidth(5);paint.setColor(Color.RED);Path path = new Path();path.moveTo(100, 100);path.quadTo(200, 50, 300, 300);canvas.drawPath(path, paint);// 畫點(起點100,100,控制點200,50,終點300,300)paint.setColor(Color.GREEN);canvas.drawPoints(new float[]{100, 100, 200, 50, 300, 300}, paint);// 添加文案paint.setStrokeWidth(2);paint.setTextSize(22);canvas.drawText("起點",90,140,paint);canvas.drawText("控制點",220,55,paint);canvas.drawText("終點",280,340,paint);iv.setImageBitmap(bitmap);
}

效果圖:

三階貝塞爾曲線有 1 個起點,2 個控制點,1 個終點,Path 類中通過下面方法進行繪制

// (x1、y1)、(x2、y2)是控制點,(x3、y3)是終點
public void cubicTo(float x1, float y1, float x2, float y2, float x3, float y3)

quadTo()和 cubicTo()的控制點和終點利用絕對定位來進行確定,其實還有另外兩個方法,通過相對定位對各點進行定義:

public void rQuadTo(float dx1, float dy1, float dx2, float dy2)
public void rCubicTo(float x1, float y1, float x2, float y2, float x3, float y3)

添加曲線可以使用arcTo()方法,arcTo()方法可以和 moveTo()配合使用,通過 moveTo()確定一個起點,再通過 arcTo()繪制弧線。弧線是基于矩形的內(nèi)切圓上的一段,該弧線的起始點會和 moveTo()方法定義的點進行連接。

public void arcTo(RectF oval, float startAngle, float sweepAngle, boolean forceMoveTo)
public void arcTo(RectF oval, float startAngle, float sweepAngle)
public void arcTo(float left, float top, float right, float bottom, float startAngle, float sweepAngle, boolean forceMoveTo)

上面三個方法的參數(shù)在前面都有說明,不再贅述,參數(shù) forceMoveTo 為 true 時,表示開始一個新的圖形,不和上一個點進行連接,為 false 時才和上一個點連接
我們通過一小段代碼來演示 artTo()方法的使用技巧:

@Override
protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main10);ImageView iv = findViewById(R.id.iv);Bitmap bitmap = Bitmap.createBitmap(500, 500, Bitmap.Config.ARGB_8888);Canvas canvas = new Canvas(bitmap);canvas.drawColor(Color.BLACK);Paint paint = new Paint();paint.setStyle(Paint.Style.STROKE);paint.setAntiAlias(true);paint.setStrokeWidth(5);// 繪制橢圓RectF oval1 = new RectF(150, 100, 350, 250);RectF oval2 = new RectF(150, 250, 350, 400);paint.setColor(Color.GRAY);canvas.drawOval(oval1, paint);canvas.drawOval(oval2, paint);Path path = new Path();paint.setColor(Color.GREEN);path.moveTo(100, 100);// true表示不會連接到上一個點(這里上一個點剛好是起始點)path.arcTo(oval1, -30, 60, true);//forceMoveTo不傳默認是false,表示會和上一個點進行連接path.arcTo(oval2, 90, -45);canvas.drawPath(path, paint);iv.setImageBitmap(bitmap);}

效果圖:

從圖中可以看出下面的弧線和上一個點是連接起來的,它的上一個點剛好就是上一個圓弧的終點

7.4 將 Path 中的圖形進行運算

我們還可以將多個 Path 進行圖形運算,得到更加復(fù)雜和不規(guī)則的圖形。Path 有一個靜態(tài)內(nèi)部類 Op,定義了 5 種運算規(guī)則:

Path.Op. DIFFERENCE:差集,圖形 A 減去與圖形 B 重疊的區(qū)域后 A 余下的區(qū)域。
Path.Op. INTERSECT:交集,圖形 A 和圖形 B 的重疊區(qū)域。
Path.Op. REVERSE_DIFFERENCE:反差集,圖形 B 減去與圖形 A 重疊的區(qū)域后 B 余下的區(qū)域。
Path.Op. UNION:并集,包含了圖形 A 和圖形 B 的所有區(qū)域。
Path.Op.XOR:補集,即圖形 A 和圖形 B 的所有區(qū)域減去他們的重疊區(qū)域后余下的區(qū)域。
我們通過以下的表格來比較這 5 種圖形運算的不同效果:
圖形A代表黑色正方形,圖形B代表紅色圓形

下面通過代碼演示,先繪制原圖查看效果:

@Override
protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main11);ImageView iv = findViewById(R.id.iv);Bitmap bitmap = Bitmap.createBitmap(500, 500, Bitmap.Config.ARGB_8888);Canvas canvas = new Canvas(bitmap);canvas.drawColor(Color.BLACK);Paint paint = new Paint();paint.setAntiAlias(true);paint.setStrokeWidth(5);// 繪制白色矩形paint.setStyle(Paint.Style.FILL);  // 修改此參數(shù)可以查看填充模式還是邊框模式paint.setColor(Color.WHITE);Path path1 = new Path();path1.addRect(new RectF(10, 10, 110, 110), Path.Direction.CCW);canvas.drawPath(path1, paint);// 繪制紅色圓paint.setColor(Color.RED);Path path2 = new Path();path2.addCircle(100, 100, 50, Path.Direction.CCW);canvas.drawPath(path2, paint);iv.setImageBitmap(bitmap);}

效果圖如下:

然后對path進行5種效果運算演示

@Override
protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main11);ImageView iv = findViewById(R.id.iv);Bitmap bitmap = Bitmap.createBitmap(800, 500, Bitmap.Config.ARGB_8888);Canvas canvas = new Canvas(bitmap);canvas.drawColor(Color.BLACK);Paint paint = new Paint();paint.setAntiAlias(true);paint.setStrokeWidth(5);//============原圖==========================// 繪制白色矩形paint.setStyle(Paint.Style.FILL);  // 修改此參數(shù)可以查看填充模式還是邊框模式paint.setColor(Color.WHITE);Path path1 = new Path();path1.addRect(new RectF(10, 10, 110, 110), Path.Direction.CCW);canvas.drawPath(path1, paint);// 繪制紅色圓paint.setColor(Color.RED);Path path2 = new Path();path2.addCircle(100, 100, 50, Path.Direction.CCW);canvas.drawPath(path2, paint);//============原圖==========================// =============差集計算==============// path1 差 path2 ,也就是:path1-path2paint.setColor(Color.WHITE);path1.reset();path2.reset();path1.addRect(new RectF(10, 170, 110, 270), Path.Direction.CCW);path2.addCircle(100, 260, 50, Path.Direction.CCW);// 差集運算path1.op(path2, Path.Op.DIFFERENCE);canvas.drawPath(path1,paint);// =============差集計算==============// =============交集==============// path1 交 path2 ,也就是:path1&path2paint.setColor(Color.WHITE);path1.reset();path2.reset();path1.addRect(new RectF(160, 170, 260, 270), Path.Direction.CCW);path2.addCircle(250, 260, 50, Path.Direction.CCW);// 交集運算path1.op(path2, Path.Op.INTERSECT);canvas.drawPath(path1,paint);// =============差集計算==============// =============反差集==============// path1 反差集 path2 ,也就是:path2-path1paint.setColor(Color.WHITE);path1.reset();path2.reset();path1.addRect(new RectF(260, 170, 360, 270), Path.Direction.CCW);path2.addCircle(350, 260, 50, Path.Direction.CCW);// 反差集運算path1.op(path2, Path.Op.REVERSE_DIFFERENCE);canvas.drawPath(path1,paint);// =============差集計算==============// =============并集==============// path1 并集 path2 ,也就是:path1|path2paint.setColor(Color.WHITE);path1.reset();path2.reset();path1.addRect(new RectF(450, 170, 550, 270), Path.Direction.CCW);path2.addCircle(540, 260, 50, Path.Direction.CCW);// 并集運算path1.op(path2, Path.Op.UNION);canvas.drawPath(path1,paint);// =============差集計算==============// =============補集==============// path1 補集 path2 ,也就是:path1|path2 - path1&path2paint.setColor(Color.WHITE);path1.reset();path2.reset();path1.addRect(new RectF(650, 170, 750, 270), Path.Direction.CCW);path2.addCircle(740, 260, 50, Path.Direction.CCW);// 補集運算path1.op(path2, Path.Op.XOR);canvas.drawPath(path1,paint);// =============差集計算==============iv.setImageBitmap(bitmap);}

效果圖:

7.5 繪制文字

Canvas為我們供了兩組方法,一組直接從指定的位置開始繪制文字,另一組沿著 Path 繪制文字:

public void drawText(char[] text, int index, int count, float x, float y, Paint paint)
public void drawText(String text, float x, float y, Paint paint)
public void drawText(String text, int start, int end, float x, float y, Paint paint)
public void drawText(CharSequence text, int start, int end, float x, float y, Paint paint)

上面這一組方法是從指定的位置(坐標)開始繪制文字,雖然都是字符串,但是供了三種形式:char[]、String 和 CharSequence,本質(zhì)上并沒有什么不同,參數(shù) index 和count、start 和 end 可以從字符串中取出子串,而參數(shù) x、y 就是文字繪制的坐標位置,其中 y 是文字的 baseline 的值

public void drawTextOnPath(String text, Path path, float hOffset, float vOffset, Paint paint)
public void drawTextOnPath(char[] text, int index, int count, Path path, float hOffset, float vOffset, Paint paint)

上面這兩個重載的 drawTextOnPath()方法用于沿著 Path 定義好的路徑繪制文字,這是一個很在趣的功能,文字在 Path 的帶領(lǐng)下龍飛鳳舞,靈活多變。參數(shù) hOffset 和 vOffset 用于定義文字離 Path 的水平偏移量和垂直偏移量,正數(shù)和負數(shù)影響文字與路徑的相對位 置。同樣的,也支持繪制從字符數(shù)組中截取的子串,index 表示起始索引,count 表示要截取的長度。

下面的案例中繪制了 4 個字符串,一個繪制所有的字符串,中間兩個截取子串進行繪制,最后一個沿著 Path 繪制出所有的文字,為了更好的理解文字與路徑的關(guān)系,所以把對應(yīng)的路徑也繪制出來了

@Override
protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main12);ImageView iv = findViewById(R.id.iv);Bitmap bitmap = Bitmap.createBitmap(800, 450, Bitmap.Config.ARGB_8888);Canvas canvas = new Canvas(bitmap);canvas.drawColor(Color.BLACK);Paint paint = new Paint();paint.setColor(Color.WHITE);paint.setStyle(Paint.Style.FILL);paint.setAntiAlias(true);paint.setTextSize(30);String text = "天王蓋地虎,寶塔鎮(zhèn)河妖;野雞悶頭鉆,哪能上天王山";// 1.直接繪制canvas.drawText(text, 10, 50, paint);// 2.截取數(shù)量來繪制paint.setColor(Color.RED);// start從6開始,end=11,表示取[6,11)范圍的數(shù)量canvas.drawText(text, 6, 11, 10, 100, paint);// 截取方式二paint.setColor(Color.BLUE);// index從12開始,count=5,表示從索引12開始取5個字符canvas.drawText(text.toCharArray(), 12, 5, 10, 150, paint);// 3.通過路徑繪制// 先創(chuàng)建路徑Path path = new Path();path.moveTo(10, 300);path.quadTo(100, 100, 700, 400);paint.setColor(Color.GREEN);// 將文字繪制到路徑上canvas.drawTextOnPath(text, path, 10, 30, paint);// 繪制路徑,方便查看paint.setStyle(Paint.Style.STROKE);paint.setStrokeWidth(2);paint.setColor(Color.RED);canvas.drawPath(path, paint);// 繪制到ImageView上iv.setImageBitmap(bitmap);
}

效果圖:

7.5.1 在指定位置繪制文本

下面2個方法都是標記了過時的方法

public void drawPosText(@NonNull String text, @NonNull @Size(multiple = 2) float[] pos,@NonNull Paint paint);
public void drawPosText(@NonNull char[] text, int index, int count,@NonNull @Size(multiple = 2) float[] pos,@NonNull Paint paint);

通過這2個方法可以按自定的坐標集繪制字符串或者字符數(shù)組,例如要實現(xiàn)一個垂直方向的文本繪制可以這樣實現(xiàn)

class MyView @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null, def: Int = 0) : View(context, attrs, def) {private val paint = Paint().apply {isAntiAlias = truetextSize = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 22f, resources.displayMetrics)color = Color.RED}private val text = "月黑風高"// 每個字的x和y坐標集private val array = FloatArray(text.length * 2).apply {for (i in 0 until size step 2) {set(i, 100f) // x,水平方向每個字的x相同,都是100pxset(i + 1, (i + 1) * paint.textSize) // y,垂直方向每個字間隔一個字的大小}}override fun onDraw(canvas: Canvas?) {canvas?.drawColor(Color.BLACK)// 繪制文本canvas?.drawPosText(text, array, paint)}
}

效果圖:

八、Paint的FontMetrics使用


粉紅色就是TextView的背景色, 可以看到在Ascent和Descent之外分別還有一點距離才到TextView的邊緣, 也就是右側(cè)使用橙色方塊標出的fontPadding

FontMetrics提供了如下屬性:
top: 即上邊界, 因為在Android中, y軸正方向是向下的, 而基準線(base line)是y=0, 所以這個值是一個負數(shù).它的值等于它到base line距離的負數(shù)
ascent: 字體文件中設(shè)置的Ascent值也是負數(shù), 理由同上,它的值是ascent到base line的距離的負數(shù)
descent: 字體文件中設(shè)置的Descent值正數(shù),因為在基準線下面,它的值等于它到base line的距離
bottom: 下邊界, 正數(shù),理由同上,它的值等于它到base line的距離
leading: 兩行之間, 上一行的bottom和下一行的top的間距, 然而這個值總是0, 可以忽略,用下圖來描述leading

8.1 行距

行距就是相鄰兩行的基線之間的距離.默認行距的實際值等于字體設(shè)置中的|Descent| + |Aescent|,在Android的TextView中, 可以通過android:lineSpacingExtra和android:lineSpacingMultiplier修改行距. 其中l(wèi)ineSpacingExtra默認值為0, lineSpacingMultiplier默認值為1, 有以下公式

行距=默認行距 * lineSpacingMultiplier + lineSpacingExtra

8.2 計算fontPadding

頂部的fontPadding= |top - ascent |,底部的font padding= bottom - descent,通過android:includeFontPadding可以決定字體的高度是否包含fontPadding

Android中的字體高度是|bottom| + |top|, 而普通軟件(例如word, Sketch或者其他設(shè)計軟件)中, 字體高度使用的是|descent| + |ascent|, 所以Android中的字體在垂直方向上總是比設(shè)計稿的多占一點空間.
對于普通的字體, 要完美復(fù)刻設(shè)計稿的字體高度, 應(yīng)該把android:includeFontPadding設(shè)置為false,默認是true

8.3文本在控件水平方向居中顯示

原理很簡單,只需要計算繪制文字的x坐標 = 控件寬度的一半 - 文字寬度的一半即可, 代碼如下:

private val mPaint: Paint = Paint().apply {isAntiAlias = truecolor = Color.REDtextSize = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 23f, resources.displayMetrics)
}override fun onDraw(canvas: Canvas?) {super.onDraw(canvas)// 繪制的文本val txt = "hello go yes!!!"// 控件的寬度和高度的一半val x = measuredWidth / 2fval y = measuredHeight / 2f// 繪制中間水平線canvas?.drawLine(0f, y, measuredWidth.toFloat(), y, mPaint)// 繪制中間垂直線canvas?.drawLine(x, 0f, x, measuredHeight.toFloat(), mPaint)// 測量文字大小val rect = Rect()mPaint.getTextBounds(txt, 0, txt.length, rect)// 文字水平居中的x坐標計算val finalX = x - rect.width() / 2f// 繪制文本canvas?.drawText(txt, finalX, y, mPaint)
}

效果圖:

由上圖可見文本在水平方向是居中了的,但是垂直方向并沒有居中(看感嘆號的位置就能對比出來了),這是因為我們將繪制文本的y坐標(baseline)定為了控件高度的一半,這是錯誤的,我們需要將文本處于控件居中位置, 而不應(yīng)該是y坐標(baseline), 這就需要向下移動一個baseline的距離,這個距離的計算可以看下面介紹.

8.4 文本在控件垂直方向居中顯示

  1. 計算文字的高度一半到baseLine的距離
    Baseline在文本的垂直方向很重要,只有先確定了Baseline的位置,換句話說就是y坐標的值,我們才能準確的將文字繪制在我們想要的位置上。Baseline的概念在我們使用TextView等系統(tǒng)控件直接設(shè)置文字內(nèi)容時是用不到的,但是如果我們想要在Canvas畫布上面繪制文字時,Baseline的概念就必不可少了。以4個參數(shù)的drawText方法為例:
/*** canvas的drawText方法* @param text:待繪制的文本* @param x:從畫布上開始繪制的x坐標(Canvas是一個原點在左上角的平面坐標系)* @param y:baseLine所在的y坐標,不少人一開始以為y是繪制文字區(qū)域的底部坐標,其實是不正確的,這是兩個概念* @param paint: 畫筆*/
public void drawText(String text, float x, float y, Paint paint)

計算原理:

/* 
如下所示:
---------------------top---------------------負數(shù)2 (相對原點baseline的距離)
---------------------ascent------------------ 負數(shù)1 (相對原點baseline的距離)
--------------------文本正中----------------- 距離top和bottom都等于(fontMetrics.bottom - fontMetrics.top)/2
---------------------baseline---------------- 0 (原點)
---------------------descent-----------------正數(shù)1 (相對原點baseline的距離)
---------------------bottom------------------正數(shù)2 (相對原點baseline的距離)*/
// 文字的高度 = (fontMetrics.bottom - fontMetrics.top)
// 文字正中 =  文字高度的一半 = (fontMetrics.bottom - fontMetrics.top)/2
// 那么文字的正中到baseline的距離 = 文字高度的一半 - fontMetrics.bottom,即:
int distanceY = (int) (((fontMetrics.bottom - fontMetrics.top) / 2) - fontMetrics.bottom);

注意: 文本的正中的"值"并不是控件的getHeight()/2,也就是說getHeight() != (fontMetrics.bottom - fontMetrics.top)因為fontMetrics的值是相對于baseline的.而控件是相對左上角top來計算的.所以如果要在自定義View的正中央繪制文本,那么可以這么做

private val mPaint: Paint = Paint().apply {isAntiAlias = truecolor = Color.REDtextSize = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 23f, resources.displayMetrics)
}override fun onDraw(canvas: Canvas?) {super.onDraw(canvas)val txt = "hello go yes!!!"// 控件的寬度和高度的一半val x = measuredWidth / 2fval y = measuredHeight / 2f// 繪制中間水平線canvas?.drawLine(0f, y, measuredWidth.toFloat(), y, mPaint)// 繪制中間垂直線canvas?.drawLine(x, 0f, x, measuredHeight.toFloat(), mPaint)//=======================水平居中處理===============================// 測量文字大小val rect = Rect()mPaint.getTextBounds(txt, 0, txt.length, rect)// 文字水平居中的x坐標計算val finalX = x - rect.width() / 2f//=======================垂直居中處理===============================// 計算文本高度一半到baseline的距離val metrics = mPaint.fontMetricsval distance = (metrics.bottom - metrics.top) / 2f - metrics.bottom// 矯正y坐標(我們預(yù)想的就是讓文本正中的位置處于控件居中的位置,而文本正中距離baseline的距離就是我們計算y坐標的偏移量)val finalY = y + distance// 繪制文本canvas?.drawText(txt, finalX, finalY, mPaint)
}

效果圖:

注意看感嘆號的位置是居中的, 換個中文就很明顯了

8.5 Paint的setTextAlign使用

該方法用于控制文本在水平方向的對齊方式, 可以理解成該字符串與起點的相對位置, 常用有3種:
1)Align.LEFT: 居左繪制,即通過drawText函數(shù)指定的起點在最左側(cè),文字從起點位置開始繪制
2)Align.CENTER:居中繪制,即通過drawText函數(shù)指定的起點在文字中間位置
3)Align.Right: 居右繪制,即通過drawText函數(shù)指定的起點在文字右側(cè)位置.
如下圖所示:

因此如果需要將文本繪制在控件的水平居中的位置,可以這么做

private val mPaint: Paint = Paint().apply {isAntiAlias = truecolor = Color.REDtextSize = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 23f, resources.displayMetrics)textAlign = Paint.Align.CENTER // 文字水平居中對齊
}override fun onDraw(canvas: Canvas?) {super.onDraw(canvas)val txt = "我是勝哥"// 控件的寬度的一半val x = measuredWidth / 2f// 繪制中間垂直線canvas?.drawLine(x, 0f, x, measuredHeight.toFloat(), mPaint)// 水平居中繪制文本, 可以看到此時計算x坐標的時候就不需要計算文本的寬度了canvas?.drawText(txt, x, 100f, mPaint)
}

效果如下:

九、繪制驗證碼

在 ImageView 繪制一個空心矩形,隨機產(chǎn)生 100 條干擾線,并隨機生成 4 個數(shù),字顯示在矩形框內(nèi)。

@Override
protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);ImageView iv = findViewById(R.id.iv);Bitmap bitmap = Bitmap.createBitmap(500, 300, Bitmap.Config.ARGB_8888);Canvas canvas = new Canvas(bitmap);canvas.drawColor(Color.BLACK);Paint paint = new Paint();paint.setAntiAlias(true);paint.setColor(Color.WHITE);paint.setStyle(Paint.Style.FILL);// 先繪制長方型canvas.drawRect(new Rect(100, 100, 370, 200), paint);// 繪制隨機文字char[] text = new char[]{'我', '你', '他', '它', '東', '西', '南', '北', '中'};Random random = new Random();// 生成隨機數(shù)char[] randomText = new char[4];int index = 0;while (index < 4 && randomText[index] == 0) {char getChar = text[random.nextInt(text.length)];boolean contains = false;for (int i = 0; i < randomText.length; i++) {if (getChar == randomText[i]) {contains = true;break;}}if (!contains) {randomText[index] = getChar;index++;}}paint.setColor(Color.BLACK);paint.setTextSize(30);paint.setFakeBoldText(true);// 設(shè)置字間距為一個字的寬度paint.setLetterSpacing(1);// 繪制文本canvas.drawText(randomText, 0, 4, 110, 160, paint);// 繪制線條paint.setStyle(Paint.Style.STROKE);for (int i = 0; i < 100; i++) {// 隨機顏色int color = Color.argb(150,55 + random.nextInt(200),55 + random.nextInt(200),55 + random.nextInt(200));paint.setColor(color);// 繪制隨機直線條/*int startY = 100 + random.nextInt(100);int endX = 100 + random.nextInt(270);canvas.drawLine(100, startY, endX, startY, paint);*/// 繪制隨機貝塞爾曲線Path path = new Path();// 控制點int controlX = 100 + random.nextInt(100);int controlY = 100 + random.nextInt(100);// 起點path.moveTo(100, 100 + random.nextInt(100));// 終點int endX = 370;int endY = 100 + random.nextInt(100);path.quadTo(controlX, controlY, endX, endY);canvas.drawPath(path, paint);}iv.setImageBitmap(bitmap);
}

效果圖:

總結(jié)

以上是生活随笔為你收集整理的Android绘图(一)基础篇的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

精品伦理一区二区三区 | 中文免费| 最近中文字幕视频完整版 | 黄色av免费 | av再线观看| 欧美午夜精品久久久久久浪潮 | www.黄色片网站| 色中色综合| 2018好看的中文在线观看 | 99精品成人 | 91精品视频免费看 | 免费91在线 | 精品国产一区二区三区日日嗨 | 亚洲欧美成人综合 | 久 久久影院 | 国产色婷婷 | 日韩av午夜在线观看 | 丁香五婷 | 又黄又爽又无遮挡的视频 | 手机看国产毛片 | 成av在线 | 亚洲精品中文字幕在线观看 | 欧美成人aa | 国内久久久久久 | 免费视频一级片 | 97成人在线观看视频 | 国内精品久久久久久久久久清纯 | 色激情五月 | 99久热在线精品视频观看 | 久久大片 | 欧美一级视频免费 | 久爱精品在线 | 国内久久久久 | 免费视频 三区 | 美女网站视频久久 | 欧美国产不卡 | 亚洲午夜在线视频 | 五月天婷婷丁香花 | 午夜精品成人一区二区三区 | 精品视频999 | 夜夜骑天天操 | 91av免费看 | 爱情影院aqdy鲁丝片二区 | 久精品视频免费观看2 | 精品视频www| 日韩城人在线 | 成人免费在线观看av | 婷婷久久亚洲 | www国产一区 | 亚洲我射av | 插久久| 国产成人av片 | 国产91在线播放 | 91亚洲精品国产 | 人人爽久久久噜噜噜电影 | 久久开心激情 | 久久精品亚洲综合专区 | 一区二区三区精品在线视频 | 国偷自产中文字幕亚洲手机在线 | 成人网444ppp | 亚洲电影在线看 | 久久深夜福利免费观看 | 午夜精品久久久久99热app | 免费网站在线观看成人 | 人人爽人人爽人人片 | 色播五月激情综合网 | 中国精品少妇 | 中文字幕在线网 | 99精品欧美一区二区 | 天天干天天操天天操 | 久久全国免费视频 | 色吊丝在线永久观看最新版本 | 国产精品美女久久久久久久网站 | 亚洲五月婷 | 日本韩国欧美在线观看 | 国产精品久久久久一区 | 日本中文字幕在线一区 | 99热99| 久久成年人网站 | 人人超碰人人 | 亚洲另类久久 | 久久久在线免费观看 | 国产a视频免费观看 | 精品国产一区二区三区日日嗨 | 丁香六月在线观看 | 国产福利精品一区二区 | 99精品免费久久久久久久久日本 | 色综合天天综合在线视频 | 日本在线观看视频一区 | 国产在线观看高清视频 | 美国人与动物xxxx | 日韩久久网站 | 欧洲色综合 | 色网站在线观看 | 亚洲精品国产日韩 | 成人黄色国产 | 欧美日韩国产网站 | 欧美日韩在线观看一区二区 | 亚洲国产成人精品在线 | 久久久久福利视频 | 激情综合色综合久久 | 亚洲影视九九影院在线观看 | 在线亚洲天堂网 | 五月天天色 | 美女中文字幕 | 免费成视频 | 亚洲影视资源 | 国内久久精品视频 | 婷婷激情综合网 | 中文字幕在线播放一区二区 | 久久免费高清视频 | 精品亚洲免费 | 激情视频免费在线观看 | 免费在线一区二区三区 | 韩国三级在线一区 | 成人午夜剧场在线观看 | 免费99视频| 日本中文字幕网站 | 欧美黑人xxxx猛性大交 | 亚洲欧洲国产日韩精品 | 香蕉视频免费在线播放 | 91av视频免费观看 | 久久免费国产精品1 | 中文不卡视频 | 国产亚洲精品中文字幕 | 日韩电影在线一区 | 日本精品久久久久影院 | 日韩午夜视频在线观看 | 视频高清 | 欧美人体xx | 日本一区二区三区视频在线播放 | 粉嫩一二三区 | 日日夜夜精品 | 在线电影91 | 国精产品999国精产品岳 | 成人av在线资源 | 国产视频在线免费 | 黄色的网站在线 | 国产精品精品国产婷婷这里av | 中文字幕亚洲国产 | 狠狠操狠狠插 | 久久电影网站中文字幕 | 中文字幕日韩高清 | 亚州国产视频 | 亚州天堂 | 欧美另类调教 | 在线观看片 | 国产原厂视频在线观看 | 综合激情av | 日日夜夜天天 | 九色视频网站 | 66av99精品福利视频在线 | 国产精品国产三级国产aⅴ入口 | 国内精品久久久久久久97牛牛 | 亚洲国产精品电影在线观看 | 九九热精品视频在线播放 | 亚洲精品中文字幕视频 | 久久久久免费视频 | 国产人成看黄久久久久久久久 | 国产一级二级视频 | 日本精a在线观看 | 天天爱天天操天天干 | 在线观看亚洲电影 | 亚洲成人黄色网址 | 日本丶国产丶欧美色综合 | 99热这里只有精品8 久久综合毛片 | 中文字幕九九 | 91视频链接 | 久精品一区 | a黄色片在线观看 | 天天摸天天干天天操天天射 | 久久综合免费视频影院 | a黄色大片 | 国产黄色免费 | 亚洲国产中文字幕在线视频综合 | 成人九九视频 | 久久午夜影院 | 成人免费观看视频大全 | 国产精品手机看片 | 色多多污污在线观看 | 亚洲欧美日韩一区二区三区在线观看 | 中文国产字幕在线观看 | 在线观看色视频 | 91在线视频精品 | 日韩欧美在线高清 | 国产成人精品免高潮在线观看 | 久久综合桃花 | 久久久污 | 国产精品专区h在线观看 | 国产精品一区二区在线看 | 亚洲一级片免费观看 | 亚洲黄色激情小说 | 免费网站观看www在线观看 | 久久人人97超碰com | 国内精品久久久久久久久久 | 天堂av在线免费观看 | 日韩字幕在线观看 | 国产精品手机播放 | 欧美a免费 | 日韩高清在线一区 | av在线播放中文字幕 | 午夜精品久久久久久久99热影院 | 色婷久久 | 亚洲最大av | 国产中文字幕视频在线观看 | 国产成人在线免费观看 | 99草视频 | 亚洲免费永久精品国产 | 天天夜夜狠狠操 | 蜜臀aⅴ国产精品久久久国产 | 992tv在线成人免费观看 | 西西44人体做爰大胆视频 | 国产免费xvideos视频入口 | 国产喷水在线 | 黄色av一区二区三区 | 久久久久黄| 成人国产精品久久久久久亚洲 | 区一区二区三区中文字幕 | 欧美日韩久久不卡 | 精品视频在线看 | 99精品免费久久久久久久久 | 国产小视频网站 | 日韩精品一区二区三区免费视频观看 | 国产特黄色片 | 日韩午夜三级 | 中文字幕欧美日韩va免费视频 | 久久亚洲美女 | 日本一区二区三区视频在线播放 | 亚洲片在线 | 欧美高清视频不卡网 | 国产一卡久久电影永久 | 日本mv大片欧洲mv大片 | 91精品国产自产在线观看 | 欧美一区二区在线免费看 | 成人黄在线 | 欧美,日韩 | 开心激情五月婷婷 | 日韩精品久久一区二区 | 久久久久久久福利 | 在线观看免费黄色 | 五月天综合色激情 | 久草在线在线视频 | 免费看wwwwwwwwwww的视频 久久久久久99精品 91中文字幕视频 | 中文字幕av网站 | 伊色综合久久之综合久久 | 亚洲精品国久久99热 | 精品国产aⅴ麻豆 | 国产黄色成人av | 日韩精品在线观看av | 精品国产乱码久久久久久1区2匹 | 免费看短 | 日日操天天爽 | 国产精品免费久久久久 | 亚洲天堂网视频在线观看 | 成人午夜电影在线观看 | 国产成人av一区二区三区在线观看 | 九九热在线观看视频 | 91传媒在线 | 国产字幕av | 欧美少妇影院 | www.久久久久 | 99免费| 久久狠狠亚洲综合 | 国产精品免费看 | 亚洲免费永久精品国产 | 97国产在线观看 | 亚洲在线色 | 九九精品在线观看 | 91热这里只有精品 | 国产91学生粉嫩喷水 | 日产中文字幕 | 久章操| 色婷婷 亚洲| 欧美国产日韩在线视频 | 国产一区在线免费观看视频 | 亚洲女同ⅹxx女同tv | 久久露脸国产精品 | www天天操| 玖玖在线资源 | 91免费在线 | 亚洲狠狠婷婷 | 超碰公开在线 | 九九久久久久久久久激情 | 亚洲精品国产精品久久99热 | 91成人精品一区在线播放 | 毛片.com | 午夜久久精品 | 91精品国产福利 | 色婷婷激情综合 | 91手机电视 | 久久99国产精品 | 91成人免费在线 | 久久久久国产成人免费精品免费 | 狠狠色丁香婷婷综合久小说久 | 在线中文字幕播放 | 中文日韩在线 | 免费看的黄色小视频 | 午夜视频在线网站 | 色婷婷综合久色 | 日韩精品久久久久久 | 久久伦理 | 天天操操操操操 | 成人av地址 | 精品国产福利在线 | 午夜免费久久看 | 国产色资源 | 久久夜色精品亚洲噜噜国4 午夜视频在线观看欧美 | 在线免费观看国产黄色 | 99国产高清| 国产专区视频在线观看 | 99视频播放 | 国产网红在线观看 | 最新色视频 | 欧美aaaxxxx做受视频 | 伊人久久电影网 | 国产999视频在线观看 | 成人黄在线观看 | 亚洲精品理论 | 中文字幕制服丝袜av久久 | 中文字幕永久在线 | 国产高清综合 | 免费色视频 | 成人免费视频在线观看 | 日本精品视频在线观看 | 丁香在线 | 99精品欧美一区二区三区黑人哦 | 国产精品一区在线观看 | 999ZYZ玖玖资源站永久 | 国产91成人在在线播放 | 中文字幕av全部资源www中文字幕在线观看 | 在线观看免费国产小视频 | 国产高清精品在线 | 99精品一级欧美片免费播放 | 日韩 在线 | 三级黄色大片在线观看 | 国产伦精品一区二区三区高清 | 色综合久久久久 | 日日操日日插 | 亚洲精品国产精品国自产 | 婷婷精品在线 | 国产h在线播放 | 香蕉视频亚洲 | 久久99久久久久久 | 国产手机视频在线观看 | 天天操操 | 在线观看一区视频 | 久久免费视频99 | 视频在线播放国产 | 国产不卡av在线 | 亚洲精品高清一区二区三区四区 | 狠狠插狠狠操 | 久久久精品 一区二区三区 国产99视频在线观看 | 九九欧美视频 | 久久国产成人午夜av影院潦草 | 99久久www免费 | 欧美在线aaa | 国产一级免费观看视频 | 亚洲一级国产 | 天天色综合1 | 青青河边草免费直播 | 欧美日韩1区 | 激情影音 | 国产精品99精品 | 97超碰人人澡人人爱学生 | 久久第四色 | 欧美日韩视频在线播放 | 精品99免费 | 成人久久久久 | 狠狠网站 | 久久免费视频一区 | 免费观看一级成人毛片 | 久久久久久福利 | 天天做天天爱天天综合网 | 国产69精品久久99的直播节目 | 91探花在线视频 | 中文字幕中文中文字幕 | 亚洲国产精久久久久久久 | 免费大片黄在线 | 波多野结衣在线观看一区二区三区 | 天天色综合1 | 日韩一级片观看 | www.国产精品 | 国产精品不卡在线播放 | 欧美激情视频一二三区 | 国产美女视频网站 | 九九热免费观看 | 日韩中文在线电影 | 亚洲精品美女在线 | 激情六月婷婷久久 | 黄色一级动作片 | 成人动漫一区二区三区 | 字幕网资源站中文字幕 | 黄污网| 一区二区免费不卡在线 | www.婷婷色 | 天天搞天天干 | www.在线观看视频 | 日韩av中文在线观看 | 亚洲精品午夜久久久久久久 | 欧美在线观看视频一区二区 | 日韩av片免费在线观看 | 日韩va亚洲va欧美va久久 | 日韩欧美有码在线 | 国产三级香港三韩国三级 | 久草在线免费新视频 | 成人一级黄色片 | 亚洲精品一区二区精华 | 亚洲一区二区三区毛片 | 伊人中文在线 | 亚洲国产成人在线播放 | 国产香蕉视频在线观看 | 精品福利网 | 成人观看 | 午夜三级福利 | 17婷婷久久www | 91正在播放| 久久久久久蜜桃一区二区 | 国产精品毛片一区 | 五月激情综合婷婷 | 在线 精品 国产 | 日日夜夜精品免费观看 | 超碰成人网 | 国产精品久久久久久久久岛 | 中文字幕在线乱 | 西西4444www大胆视频 | 免费a视频 | 国产精品97| 91亚色视频| 亚洲综合色丁香婷婷六月图片 | www.黄色小说.com | 欧美色就是色 | 亚洲理论片 | 久久亚洲综合国产精品99麻豆的功能介绍 | 在线观看亚洲国产精品 | 国产玖玖在线 | 久久久久久亚洲精品 | 黄色片免费电影 | 精品国产伦一区二区三区免费 | 免费裸体视频网 | 中文字幕av免费观看 | 久久黄色网址 | 亚洲精品tv久久久久久久久久 | 中文字幕一区二区三区四区在线视频 | 成人a毛片 | 成年人在线免费视频观看 | 久久精品美女 | 99色在线播放 | 国产成人精品免高潮在线观看 | 久久精选视频 | 天天操天| 久久精品这里热有精品 | 久久精品网站视频 | 久草在线免费资源 | 在线播放精品一区二区三区 | 人人狠| 久草精品国产 | 国内精品久久天天躁人人爽 | 粉嫩一区二区三区粉嫩91 | 88av视频| 西西大胆免费视频 | 国产午夜精品av一区二区 | 精品嫩模福利一区二区蜜臀 | 国产资源免费 | 91麻豆精品国产91久久久久久久久 | 国产操在线 | 国产在线色视频 | 亚洲精品videossex少妇 | 久久久久亚洲最大xxxx | 欧美一区二区在线免费观看 | 狠狠躁夜夜躁人人爽超碰91 | 久久夜夜爽 | 久久这里只有精品视频99 | 中文字幕在线影院 | 免费看黄的 | 日韩高清久久 | 国产成人精品免高潮在线观看 | 成人久久电影 | 一级a毛片高清视频 | 国产欧美综合在线观看 | www.久久久com | 久久艹人人 | 日韩在线观看av | 天天干天天射天天操 | 日韩av在线一区二区 | 国产第一福利 | 一二三四精品 | 99久久精品国产欧美主题曲 | 在线免费黄色毛片 | 成人免费在线观看电影 | 日本中文不卡 | 国产精品综合久久久 | 中文字幕在线免费看 | 国产精品地址 | 狠狠操.com| 99国产精品久久久久久久久久 | 91久久人澡人人添人人爽欧美 | 亚洲欧美在线视频免费 | 久久精品99视频 | 国产精品久久久久久电影 | 在线免费高清一区二区三区 | 久久99在线观看 | 黄色大全视频 | 久久亚洲视频 | 久草精品在线观看 | 91麻豆精品国产自产在线游戏 | 在线成人一区 | 亚洲第一久久久 | 国产在线欧美日韩 | 亚洲精品在线视频网站 | 激情av综合 | 成人免费视频播放 | 日韩视频一区二区 | 丁香5月婷婷久久 | 国产99久久久国产精品免费二区 | 黄色小说视频在线 | 亚洲欧美国产视频 | 天天射天天搞 | 国产又黄又爽又猛视频日本 | 人人舔人人干 | 日韩精品国产一区 | 91成人黄色 | 97人人添人澡人人爽超碰动图 | 97人人模人人爽人人少妇 | 国产在线高清 | 中文字幕五区 | 干综合网| 亚洲三级av | 久久精品国产亚洲 | 在线播放一区二区三区 | 久久久久成人精品 | 欧美性爽爽 | 亚洲少妇自拍 | 国产99久久久久久免费看 | 在线免费观看不卡av | 成人免费观看电影 | 国产在线播放一区二区三区 | 国产免费小视频 | 国内精品久久久久影院一蜜桃 | 国产视频一 | 免费精品在线 | 午夜精品久久久久久久久久久 | 国产无遮挡又黄又爽馒头漫画 | 成人免费在线观看入口 | aaawww| www免费看| 亚洲精品视频免费看 | 免费男女羞羞的视频网站中文字幕 | 国产91精品看黄网站 | 成人网中文字幕 | 日韩精品免费在线观看视频 | 91在线www | 久久不卡免费视频 | 999ZYZ玖玖资源站永久 | 国产97在线播放 | 欧美日韩成人一区 | 久久精品欧美日韩精品 | 成人夜晚看av | 91av视频观看 | 青青草国产精品视频 | www.香蕉视频在线观看 | 日韩视频中文字幕在线观看 | 成人在线免费看 | av看片网 | 日韩精品综合在线 | 久久99爱视频 | 91九色视频国产 | 一区二区伦理电影 | 亚洲精品国产精品国自产在线 | 国产精品女同一区二区三区久久夜 | 久草观看 | 中文字幕在线观看1 | 91天天操| 九九综合九九 | 国产精品夜夜夜一区二区三区尤 | 天天色天天操天天爽 | 91成人区| 99九九热只有国产精品 | 久草精品视频在线播放 | 天天射天天艹 | 91最新网址 | 97精产国品一二三产区在线 | 久久精品国产精品 | 97涩涩视频 | 色综合激情久久 | 日日夜夜精品免费 | 国产精品久久久久久久av大片 | 99热在线国产精品 | 色综合五月| 久久久综合香蕉尹人综合网 | 2019中文字幕第一页 | 国产精品第三页 | 一区二区 不卡 | 日日操夜 | 中文字幕在线网 | 成人免费视频视频在线观看 免费 | 久久久久 免费视频 | 美女免费电影 | 天天色官网 | 免费久草视频 | 丁香六月天婷婷 | 中文字幕在线看片 | 日韩电影中文字幕 | 日本久久综合视频 | 国产精品久久久久一区二区国产 | 97爱爱爱 | 美女黄视频免费 | 欧美一级大片在线观看 | 人人插超碰 | 97精品超碰一区二区三区 | 在线久热 | 99精品热 | 午夜av在线电影 | 免费在线观看不卡av | 日日干网 | 在线国产视频观看 | 亚洲精品国精品久久99热一 | 91在线观 | 五月婷婷深开心 | 天天射天天干天天 | 久免费 | 国产在线精品二区 | 亚洲国产日本 | 欧美成人中文字幕 | 婷婷色社区 | 日韩免费一级a毛片在线播放一级 | 97视频免费观看 | 久久超级碰视频 | 亚洲国产精品久久久 | 午夜少妇 | 欧美精品久久久久久久免费 | 香蕉日日 | 三级在线视频播放 | 国产精品一区二区三区99 | 黄色a级片在线观看 | 久久一区二区免费视频 | 欧美一级在线 | 免费情缘| 亚洲做受高潮欧美裸体 | 免费又黄又爽视频 | 91九色综合 | 天天干,夜夜爽 | 片黄色毛片黄色毛片 | 欧美另类重口 | 国产精品av在线免费观看 | 日韩精品免费在线视频 | 2020天天干夜夜爽 | 91精品久久久久久久99蜜桃 | 91成品人影院| 丁香六月激情婷婷 | 国产小视频免费观看 | 狠狠躁夜夜a产精品视频 | 欧美视频www | 女人魂免费观看 | 国产一级精品视频 | 天天操天天操天天爽 | 成人h动漫在线看 | 天天操操| 五月天精品视频 | 久久免费视频6 | 福利片视频区 | 97日日碰人人模人人澡分享吧 | 在线观看国产91 | 日韩三级视频 | 久久高清 | 久久久久9999亚洲精品 | 手机版av在线 | 午夜神马福利 | 日韩精品五月天 | 99视频精品免费观看, | 久久国产网 | a黄色一级片 | 免费在线观看国产黄 | 午夜影院一级片 | 久久中文网 | 中文字幕黄色网址 | 在线观看成人av | 国产在线观看黄 | 久久久久久黄 | 国产一区二区不卡视频 | 特级毛片在线免费观看 | 久久婷婷视频 | 免费日韩 精品中文字幕视频在线 | 99热九九这里只有精品10 | 欧美午夜精品久久久久久孕妇 | 91亚洲欧美激情 | 久久久麻豆精品一区二区 | 在线一区电影 | 欧美成人a在线 | 国产美女久久久 | 国产又粗又猛又色又黄网站 | 999久久国产 | 在线观看中文字幕网站 | 日韩中文字幕电影 | 91成人精品一区在线播放69 | 色在线亚洲 | 成人午夜电影网站 | 国产精彩在线视频 | 日韩在线观看视频一区二区三区 | 五月婷香蕉久色在线看 | 91九色视频 | 亚洲欧美乱综合图片区小说区 | 亚洲尺码电影av久久 | a级片久久久 | 日本aaaa级毛片在线看 | 欧美成人中文字幕 | 一本—道久久a久久精品蜜桃 | 激情欧美一区二区免费视频 | 1000部18岁以下禁看视频 | 国产又黄又猛又粗 | 人人精久 | 国产91精品久久久久 | 午夜成人免费影院 | 999久久久免费精品国产 | 免费国产一区二区 | 玖玖视频在线 | 精品不卡视频 | 六月丁香婷婷在线 | 欧美精品国产综合久久 | 国产无套精品久久久久久 | 国产香蕉97碰碰久久人人 | 最近中文字幕免费av | 亚洲精品一区二区网址 | 亚洲艳情 | 日日操网| 成人国产网址 | 粉嫩aⅴ一区二区三区 | av成人免费在线 | 成人日批视频 | av黄网站| 欧美日韩高清一区 | 国产999精品久久久久久绿帽 | 久草免费看 | 韩日三级在线 | 国产一区欧美一区 | www日| 免费看一级黄色大全 | 日本女人的性生活视频 | 99夜色| 国产精品9999久久久久仙踪林 | av网站免费看 | 天堂久久电影网 | 国产在线观看,日本 | 久久精品亚洲一区二区三区观看模式 | 亚洲国产精品成人精品 | 免费看搞黄视频网站 | 国产在线精品一区 | 久久9999久久免费精品国产 | 中文字幕在线字幕中文 | 国产电影黄色av | 一级一片免费视频 | 天天干,天天射,天天操,天天摸 | 亚洲一区二区精品在线 | 国产精品综合在线 | 嫩草av在线 | 久久欧美综合 | 婷婷开心久久网 | 婷婷久久久 | 久久精品欧美一区二区三区麻豆 | 99久久电影 | 色婷婷激情 | 精品国产乱码久久久久 | 91av在线免费 | 亚洲在线日韩 | 国产一区二区高清不卡 | 福利一区在线视频 | 日日日操操 | 国产视频日韩视频欧美视频 | av千婊在线免费观看 | 天天草天天摸 | 少妇av网| 最新影院 | 中文字幕久久精品亚洲乱码 | 国产成人精品一区二 | 日本老少交| 久久不卡国产精品一区二区 | 国产做aⅴ在线视频播放 | 国产91对白在线播 | 久久精品免费 | av福利在线导航 | 激情五月婷婷综合 | 成人h视频在线 | 91精品免费视频 | 欧美国产日韩中文 | 欧美日韩亚洲在线 | 国内久久视频 | 亚洲欧洲精品一区 | 久久久久久久久久久免费av | 91精品在线观看视频 | 亚洲精品视频在线观看免费 | 播五月综合 | 缴情综合网五月天 | 91精品久久久久久久91蜜桃 | 久久精品a| 国产精品永久久久久久久久久 | 日韩久久网站 | 美女免费黄网站 | 精品久久亚洲 | 色中色资源站 | 国产精品久久久久久妇 | 国产成人精品久久久 | 伊人五月综合 | 日韩欧美91 | 久久开心激情 | 国产免费a | 精品久久久久久久久久岛国gif | 黄色免费网| www色片| 国产精品99在线观看 | 国产91精品久久久久 | 亚洲综合精品在线 | 美女黄视频免费 | 日韩电影中文字幕在线 | 亚洲在线视频免费 | 中文字幕xxxx | 精品嫩模福利一区二区蜜臀 | 国产色视频网站2 | 免费91麻豆精品国产自产在线观看 | 免费在线国产 | 国产视频 亚洲视频 | 国产精品 999 | 国产黄影院色大全免费 | 在线国产欧美 | 欧美日韩视频网站 | 久久九九久久 | 三级av在线免费观看 | 国产色一区 | 亚洲最新视频在线播放 | 人人爽人人爽人人爽人人爽 | 在线 高清 中文字幕 | 国产精品一区二区免费看 | 久久综合久久综合九色 | 婷婷综合 | 久久不卡免费视频 | av免费福利 | 国产在线免费观看 | 国产小视频福利在线 | 久久男人中文字幕资源站 | 天天色视频 | 狠狠干天天操 | 亚洲黄色一级电影 | 亚洲粉嫩av | 欧美a级片免费看 | 天天干天天做 | 中文字幕在线免费观看视频 | 久久精品日产第一区二区三区乱码 | 成人精品一区二区三区电影免费 | 国产一级在线免费观看 | 欧美一级艳片视频免费观看 | 天天插狠狠插 | 国产淫a| 国产中的精品av小宝探花 | 91精品婷婷国产综合久久蝌蚪 | 亚洲精品2区 | 伊人射 | 国产精品久久久久久av | 国产精品毛片一区视频播 | 免费高清看电视网站 | 日本三级全黄少妇三2023 | 97人人模人人爽人人喊网 | 18国产精品福利片久久婷 | 成人影片在线播放 | 日韩精品一区二区三区免费视频观看 | 97免费在线观看视频 | 免费黄色小网站 | 免费一级日韩欧美性大片 | 97超碰人人澡 | 美女视频黄免费网站 | 国产精品久一 | 四虎国产精品成人免费4hu | 久久艹人人 | 精品婷婷 | 国产视频久久久 | 成人91av| 精品麻豆 | 欧美成人免费在线 | 天天性天天草 | 国产精品第二页 | 久久电影网站中文字幕 | 一区二区亚洲精品 | 亚洲黄色av网址 | 国产精品理论片在线播放 | 国产啊v在线 | 精品亚洲欧美一区 | 91视视频在线直接观看在线看网页在线看 | 日韩中文字幕免费在线观看 | 成年人免费看片 | 午夜精品在线看 | 91亚洲免费 | 日韩另类在线 | 99热 精品在线 | 久久只精品99品免费久23小说 | 丁香综合av| 中文字幕人成不卡一区 | 亚洲第一成网站 | 亚洲精品国产精品国自产观看浪潮 | 国产黄色精品在线 | www.国产在线视频 | 国产小视频在线播放 | 久久久免费毛片 | 韩日精品在线观看 | 国产高清不卡 | 麻豆久久精品 | 国产精品9999 | 亚洲高清av在线 | 91成人短视频在线观看 | 免费日韩一区二区 | 国产精品麻豆一区二区三区 | 九色精品在线 | 视频在线一区二区三区 | 久久免费视频这里只有精品 | 国产精品手机播放 | 国产精品av久久久久久无 | 久视频在线播放 | 亚一亚二国产专区 | 中文字幕专区高清在线观看 | 日韩三级.com | 日韩精品免费一区二区 | 精品99在线视频 | 日本韩国中文字幕 | 国产在线精品观看 | 亚洲免费精品一区二区 | 久久视频在线视频 | 久久久久久久久久久影视 | 亚洲欧美成aⅴ人在线观看 四虎在线观看 | 国产日韩高清在线 | 日韩在线精品视频 | 欧美色图亚洲图片 | 亚洲精品 在线视频 | 国产特黄色片 | 国产一区二区日本 | av中文字幕电影 | 国产视频手机在线 | 亚洲在线色 | 天天爱天天操 | 91丨九色丨蝌蚪丰满 | 免费观看久久 | 精品视频9999 | 国产精久久 | 久久有精品 | 久久久亚洲影院 | www.成人久久 | 国产999精品久久久 免费a网站 | 国产又粗又猛又黄又爽的视频 | 欧美日韩啪啪 | 天天综合成人 | 婷婷深爱五月 | 欧美在线18 | 国产小视频在线看 | 麻豆视屏 | 欧美日韩精品久久久 | 天天色天天艹 | av三级在线播放 | 99在线观看视频 | 在线久草视频 | 国外调教视频网站 | 国产精品 美女 | 久久伊人操 | 91人人插 | 中文字幕你懂的 | 亚洲精品18p | 免费人成网ww44kk44 | 亚洲成人一区 | 中文字幕国产在线 | 91视频在线国产 | 久久夜色精品国产欧美一区麻豆 | 中文字幕免费不卡视频 | 国产精品9999久久久久仙踪林 | 五月天综合激情网 | 午夜av在线播放 | av中文国产 | 亚洲热久久| 欧美福利视频 | 日本少妇视频 | 日日夜夜av | 四虎在线观看精品视频 | 久久综合九色综合97婷婷女人 | 五月在线 | www免费视频com━| 亚洲国产中文字幕在线 | 中文在线a在线 | 五月天婷婷视频 | 狠狠伊人| 不卡的av电影 | 亚洲成人软件 | 国产一区二区手机在线观看 | 天天操夜夜操夜夜操 | 99久久婷婷 | 99久久这里有精品 | 亚洲久草视频 | 国产精品二区在线观看 | 国产精品情侣视频 | 国产一级在线观看 | 日韩欧美高清视频在线观看 | 日韩免费一级a毛片在线播放一级 | 亚洲精品久久久久久久不卡四虎 | 免费av看片 | 日韩精品免费在线播放 | 欧美另类xxxxx |