久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

您的位置:首頁技術文章
文章詳情頁

Android實現下載進度條效果

瀏覽:6日期:2022-09-18 09:12:47
目錄最終效果和對比vivo商店效果分析1 - 計算進度分析2 - 繪制圓角矩形解決方案分析3 - 繪制文字和交匯手勢拓展完整代碼具體使用最終效果和對比vivo商店效果

vivo應用商店下載效果:

Android實現下載進度條效果

最終實現效果:

Android實現下載進度條效果

分析1 - 計算進度

進度計算就比較簡單了,我們通過復寫onSizeChanged()方法,獲取到控件的寬后,先計算當前進度百分比,再將百分比乘以寬度,就可以得到應該繪制的寬度了。

繪制圓角矩形需要傳一個Rect,Rect的構造方法需要傳4個位置,分別是left、top、right、bottom,我們主要是計算不斷變化的right值。在drawProgress()方法中,right值為最大的寬度 * 進度百分比值。

/** * 控件寬 */private int mViewWidth;/** * 控件高 */private int mViewHeight;/** * 圓角弧度 */private float mRadius;/** * 當前進度 */private int mProgress;/** * 最大進度值 */private int mMaxProgress;@Overrideprotected void onDraw(Canvas canvas) { super.onDraw(canvas); //畫進度條 drawProgress(canvas);}/** * 畫進度 */private void drawProgress(Canvas canvas) { RectF rect = new RectF(getFrameLeft(), getFrameTop(), getFrameRight() * getProgressRatio(), getFrameBottom()); canvas.drawRect(rect, mProgressPaint);}/** * 獲取當前進度值比值 */private float getProgressRatio() { return (mProgress / (mMaxProgress * 1.0f));}//------------ getFrameXxx()方法都是處理padding ------------private float getFrameLeft() { return getPaddingStart();}private float getFrameRight() { return mViewWidth - getPaddingEnd();}private float getFrameTop() { return getPaddingTop();}private float getFrameBottom() { return mViewHeight - getPaddingBottom();}//------------ getFrameXxx()方法都是處理padding ------------分析2 - 繪制圓角矩形

背景和進度條,都是圓角矩形,我們可以使用canvas.drawRoundRect()的API來繪制。但是使用canvas.drawRoundRect()會有個問題,當進度比較小的時候,例如1%,計算出來的矩形長度比較小,會導致圓角不是滿的,缺陷效果見動圖(注意看剛從左側出來時圓角的大小)。

Android實現下載進度條效果

public class DownloadProgressView extends View { ...省略其他代碼 @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) {super.onSizeChanged(w, h, oldw, oldh);mViewWidth = w;mViewHeight = h;//計算出圓角半徑mRadius = Math.min(mViewWidth, mViewHeight) / 2f; } @Override protected void onDraw(Canvas canvas) {super.onDraw(canvas);//畫背景drawBg(canvas);//畫進度條drawProgress(canvas); } /** * 畫背景 */ private void drawBg(Canvas canvas) {canvas.drawRoundRect(new RectF(getFrameLeft(), getPaddingTop(), getFrameRight(), getFrameBottom()), mRadius, mRadius, mBgPaint); } /** * 畫進度 */ private void drawProgress(Canvas canvas) {RectF rect = new RectF(getFrameLeft(), getFrameTop(), getFrameRight() * getProgressRatio(), getFrameBottom());canvas.drawRoundRect(rect, mRadius, mRadius, mProgressPaint); } //------------ getFrameXxx()方法都是處理padding ------------ private float getFrameLeft() {return getPaddingStart(); } private float getFrameRight() {return mViewWidth - getPaddingEnd(); } private float getFrameTop() {return getPaddingTop(); } private float getFrameBottom() {return mViewHeight - getPaddingBottom(); } //------------ getFrameXxx()方法都是處理padding ------------}解決方案

我的方案是這樣的,不使用drawRoundRect()方法來繪制圓角矩形,而是先使用canvas.clipPath()方法,添加一個有圓角矩形的Path,來裁切畫布,再drawRect()方法來繪制一個長矩形,就保持了圓角。

但clipPath()也有一個缺點,就是裁切出來的圓角會有鋸齒,Paint設置了setAntiAlias(true)也沒有用,大家有好的方法,互相學習一下!

public class DownloadProgressView extends View { @Override protected void onDraw(Canvas canvas) {super.onDraw(canvas);//裁剪圓角clipRound(canvas);//畫背景drawBg(canvas);//畫進度條drawProgress(canvas); } /** * 裁剪圓角 */ private void clipRound(Canvas canvas) {Path path = new Path();RectF roundRect = new RectF(getFrameLeft(), getFrameTop(), getFrameRight(), getFrameBottom());path.addRoundRect(roundRect, mRadius, mRadius, Path.Direction.CW);canvas.clipPath(path); } /** * 畫背景 */ private void drawBg(Canvas canvas) {canvas.drawRect(new RectF(getFrameLeft(), getPaddingTop(), getFrameRight(), getFrameBottom()), mBgPaint); } /** * 畫進度 */ private void drawProgress(Canvas canvas) {RectF rect = new RectF(getFrameLeft(), getFrameTop(), getFrameRight() * getProgressRatio(), getFrameBottom());canvas.drawRect(rect, mProgressPaint); }}分析3 - 繪制文字和交匯

要讓文字和進度交匯時,讓藍色變為白色,需要使用到PorterDuffXfermode。PorterDuffXfermode可以將2個圖像進行合成,或者簡單說為相交模式,而合成方式有16種,見下圖。(Src藍色方塊為上層圖層,Dst黃色圓形為下層圖層。)

Android實現下載進度條效果

查閱文檔,我們發現SrcATop模式比較符合我們的需求,在SrcATop模式下,Src圖層不覆蓋Dst圖層的像素會被拋棄,只保留Src圖層覆蓋Dst圖層的圖層像素。

我們的思路是這樣的:畫4個圖層,最底部的灰色背景圖層,再上一層藍色進度圖層,接著是文字圖層,最上層是一層白色的進度圖層,重點在畫文字和白色進度圖層是添加了PorterDuffXfermode(SrcATop模式)。

白色進度和藍色進度的大小一直是同步的,但是因為PorterDuffXfermode的原因,白色圖層未覆蓋到文字時,一直都是被拋棄圖層像素,相當于是透明的,只有當和文字相交時,才會繪制出白色圖層,就顯示出了一半白色文字,一半藍色文字的效果,而其他部分都沒有和文字相交都被拋棄,都為透明。

繪制文字、白色進度圖層代碼,見drawText()方法。

@Overrideprotected void onDraw(Canvas canvas) { super.onDraw(canvas); //裁剪圓角 clipRound(canvas); //畫背景 drawBg(canvas); //畫進度條 drawProgress(canvas); //畫文字圖層 drawText(canvas);}/** * 畫文字 */private void drawText(Canvas canvas) { mTextPaint.setColor(mPercentageTextColor); //創建文字圖層 Bitmap textBitmap = Bitmap.createBitmap(mViewWidth, mViewHeight, Bitmap.Config.ARGB_8888); Canvas textCanvas = new Canvas(textBitmap); String textContent = mProgress + '%'; //計算文字Y軸坐標 float textY = mViewHeight / 2.0f - (mTextPaint.getFontMetricsInt().descent / 2.0f + mTextPaint.getFontMetricsInt().ascent / 2.0f); textCanvas.drawText(textContent, mViewWidth / 2.0f, textY, mTextPaint); //畫最上層的白色圖層,未相交時不會顯示出來 mTextPaint.setColor(mPercentageTextColor2); mTextPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_ATOP)); textCanvas.drawRect(new RectF(getFrameLeft(), getFrameTop(), getFrameRight() * getProgressRatio(), getFrameBottom()), mTextPaint); //畫結合后的圖層 canvas.drawBitmap(textBitmap, getFrameLeft(), getFrameTop(), mTextPaint); mTextPaint.setXfermode(null); textBitmap.recycle();}手勢拓展

經過上面的進度、文字、交匯處理,進度條算是完整了,接下來拓展一下沒有的東西,例如手勢拖動,就像SeekBar一樣,當我們觸摸進度條時,進度會隨著移動而改變進度。

我們先重寫dispatchTouchEvent()方法,當down事件來到時,讓父控件不攔截,我們進行攔截。接著重寫onTouchEvent()方法,計算Move、Up時,移動的距離,計算出百分比和應有的進度值,然后不斷調用setProgress()來更新進度。

public class DownloadProgressView extends View { @Override public boolean dispatchTouchEvent(MotionEvent event) {int action = event.getAction();//攔截事件,然后讓父類不進行攔截if (mControlMode == MODE_TOUCH && action == MotionEvent.ACTION_DOWN) { getParent().requestDisallowInterceptTouchEvent(true); return true;}return super.dispatchTouchEvent(event); } @Override public boolean onTouchEvent(MotionEvent event) {//拽托模式下才起效果if (mControlMode == MODE_TOUCH) { int action = event.getAction(); //包裹Down事件時的x坐標 if (action == MotionEvent.ACTION_DOWN) {mTouchDownX = event.getX();return true; } else if (action == MotionEvent.ACTION_MOVE || action == MotionEvent.ACTION_UP) {//Move或Up的時候,計算拽托進度float endX = event.getX();//計算公式:百分比值 = 移動距離 / 總長度float distanceX = Math.abs(endX - mTouchDownX);float ratio = (distanceX * 1.0f) / (getFrameRight() - getFrameLeft());//計算百分比應該有的進度:進度 = 總進度 * 進度百分比值float progress = mMaxProgress * ratio;setProgress((int) progress);return true; } return super.onTouchEvent(event);} else { return super.onTouchEvent(event);} }}完整代碼

自定義屬性

<resources> <declare-styleable name='DownloadProgressView'><!-- 進度條背景 --><attr name='dpv_bg' format='color' /><!-- 已有進度條背景 --><attr name='dpv_progress_bg' format='color' /><!-- 百分比字體顏色 --><attr name='dpv_percentage_text_color' format='color' /><!-- 上層百分比字體顏色 --><attr name='dpv_percentage_text_color2' format='color' /><attr name='dpv_percentage_text_size' format='integer|float|dimension|reference' /><!-- 當前進度值 --><attr name='dpv_progress' format='integer' /><!-- 最大進度值 --><attr name='dpv_max_progress' format='integer' /><!-- 控制模式 --><attr name='dpv_control_mode' format='enum'> <enum name='normal' value='1' /> <enum name='touch' value='2' /></attr> </declare-styleable></resources>

自定義View

public class DownloadProgressView extends View { /** * 控制模式-普通 */ private static final int MODE_NORMAL = 1; /** * 控制模式-觸摸 */ private static final int MODE_TOUCH = 2; /** * View默認最小寬度 */ private int mDefaultMinWidth; /** * View默認最小高度 */ private int mDefaultMinHeight; /** * 控件寬 */ private int mViewWidth; /** * 控件高 */ private int mViewHeight; /** * 圓角弧度 */ private float mRadius; /** * 背景畫筆 */ private Paint mBgPaint; /** * 進度畫筆 */ private Paint mProgressPaint; /** * 文字畫筆 */ private Paint mTextPaint; /** * 當前進度 */ private int mProgress; /** * 背景顏色 */ private int mBgColor; /** * 進度背景顏色 */ private int mProgressBgColor; /** * 進度百分比文字的顏色 */ private int mPercentageTextColor; /** * 第二層進度百分比文字的顏色 */ private int mPercentageTextColor2; /** * 進度百分比文字的字體大小 */ private float mPercentageTextSize; /** * 最大進度值 */ private int mMaxProgress; /** * 進度更新監聽 */ private OnProgressUpdateListener mOnProgressUpdateListener; /** * 控制模式 */ private int mControlMode; /** * 按下時Down事件的x坐標 */ private float mTouchDownX; public DownloadProgressView(Context context) {this(context, null); } public DownloadProgressView(Context context, @Nullable AttributeSet attrs) {this(context, attrs, 0); } public DownloadProgressView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);init(context, attrs, defStyleAttr); } private void init(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {initAttr(context, attrs, defStyleAttr);//取消硬件加速setLayerType(LAYER_TYPE_SOFTWARE, null);//背景畫筆mBgPaint = new Paint();mBgPaint.setAntiAlias(true);mBgPaint.setColor(mBgColor);//進度畫筆mProgressPaint = new Paint();mProgressPaint.setColor(mProgressBgColor);mProgressPaint.setAntiAlias(true);//文字畫筆mTextPaint = new Paint();mTextPaint.setAntiAlias(true);mTextPaint.setTextSize(mPercentageTextSize);mTextPaint.setTextAlign(Paint.Align.CENTER);//計算默認寬、高mDefaultMinWidth = dip2px(context, 180f);mDefaultMinHeight = dip2px(context, 40f); } private void initAttr(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {TypedArray array = context.obtainStyledAttributes(attrs, R.styleable.DownloadProgressView, defStyleAttr, 0);mBgColor = array.getColor(R.styleable.DownloadProgressView_dpv_bg, Color.argb(100, 169, 169, 169));mProgressBgColor = array.getColor(R.styleable.DownloadProgressView_dpv_progress_bg, Color.GRAY);//進度百分比文字的顏色,默認和進度背景顏色一致mPercentageTextColor = array.getColor(R.styleable.DownloadProgressView_dpv_percentage_text_color, mProgressBgColor);//第二層,進度百分比文字的顏色mPercentageTextColor2 = array.getColor(R.styleable.DownloadProgressView_dpv_percentage_text_color2, Color.WHITE);//進度百分比文字的字體顏色mPercentageTextSize = array.getDimension(R.styleable.DownloadProgressView_dpv_percentage_text_size, sp2px(context, 15f));//當前進度值mProgress = array.getInt(R.styleable.DownloadProgressView_dpv_progress, 0);//最大進度值mMaxProgress = array.getInteger(R.styleable.DownloadProgressView_dpv_max_progress, 100);//控制模式mControlMode = array.getInt(R.styleable.DownloadProgressView_dpv_control_mode, MODE_NORMAL);array.recycle(); } @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) {super.onSizeChanged(w, h, oldw, oldh);mViewWidth = w;mViewHeight = h;//計算出圓角半徑mRadius = Math.min(mViewWidth, mViewHeight) / 2f; } @Override protected void onDraw(Canvas canvas) {super.onDraw(canvas);//裁剪圓角clipRound(canvas);//畫背景drawBg(canvas);//畫進度條drawProgress(canvas);//畫文字圖層drawText(canvas); } //------------ getFrameXxx()方法都是處理padding ------------ private float getFrameLeft() {return getPaddingStart(); } private float getFrameRight() {return mViewWidth - getPaddingEnd(); } private float getFrameTop() {return getPaddingTop(); } private float getFrameBottom() {return mViewHeight - getPaddingBottom(); } //------------ getFrameXxx()方法都是處理padding ------------ /** * 裁剪圓角 */ private void clipRound(Canvas canvas) {Path path = new Path();RectF roundRect = new RectF(getFrameLeft(), getFrameTop(), getFrameRight(), getFrameBottom());path.addRoundRect(roundRect, mRadius, mRadius, Path.Direction.CW);canvas.clipPath(path); } /** * 畫背景 */ private void drawBg(Canvas canvas) {canvas.drawRect(new RectF(getFrameLeft(), getPaddingTop(), getFrameRight(), getFrameBottom()), mBgPaint); } /** * 畫進度 */ private void drawProgress(Canvas canvas) {RectF rect = new RectF(getFrameLeft(), getFrameTop(), getFrameRight() * getProgressRatio(), getFrameBottom());canvas.drawRect(rect, mProgressPaint); } /** * 畫文字 */ private void drawText(Canvas canvas) {mTextPaint.setColor(mPercentageTextColor);//創建文字圖層Bitmap textBitmap = Bitmap.createBitmap(mViewWidth, mViewHeight, Bitmap.Config.ARGB_8888);Canvas textCanvas = new Canvas(textBitmap);String textContent = mProgress + '%';//計算文字Y軸坐標float textY = mViewHeight / 2.0f - (mTextPaint.getFontMetricsInt().descent / 2.0f + mTextPaint.getFontMetricsInt().ascent / 2.0f);textCanvas.drawText(textContent, mViewWidth / 2.0f, textY, mTextPaint);//畫最上層的白色圖層,未相交時不會顯示出來mTextPaint.setColor(mPercentageTextColor2);mTextPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_ATOP));textCanvas.drawRect(new RectF(getFrameLeft(), getFrameTop(), getFrameRight() * getProgressRatio(), getFrameBottom()), mTextPaint);//畫結合后的圖層canvas.drawBitmap(textBitmap, getFrameLeft(), getFrameTop(), mTextPaint);mTextPaint.setXfermode(null);textBitmap.recycle(); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {super.onMeasure(widthMeasureSpec, heightMeasureSpec);setMeasuredDimension(handleMeasure(widthMeasureSpec, true), handleMeasure(heightMeasureSpec, false)); } @Override public boolean dispatchTouchEvent(MotionEvent event) {int action = event.getAction();//攔截事件,然后讓父類不進行攔截if (mControlMode == MODE_TOUCH && action == MotionEvent.ACTION_DOWN) { getParent().requestDisallowInterceptTouchEvent(true); return true;}return super.dispatchTouchEvent(event); } @Override public boolean onTouchEvent(MotionEvent event) {//拽托模式下才起效果if (mControlMode == MODE_TOUCH) { int action = event.getAction(); //包裹Down事件時的x坐標 if (action == MotionEvent.ACTION_DOWN) {mTouchDownX = event.getX();return true; } else if (action == MotionEvent.ACTION_MOVE || action == MotionEvent.ACTION_UP) {//Move或Up的時候,計算拽托進度float endX = event.getX();//計算公式:百分比值 = 移動距離 / 總長度float distanceX = Math.abs(endX - mTouchDownX);float ratio = (distanceX * 1.0f) / (getFrameRight() - getFrameLeft());//計算百分比應該有的進度:進度 = 總進度 * 進度百分比值float progress = mMaxProgress * ratio;setProgress((int) progress);return true; } return super.onTouchEvent(event);} else { return super.onTouchEvent(event);} } /** * 處理MeasureSpec */ private int handleMeasure(int measureSpec, boolean isWidth) {int result;if (isWidth) { result = mDefaultMinWidth;} else { result = mDefaultMinHeight;}int specMode = MeasureSpec.getMode(measureSpec);int specSize = MeasureSpec.getSize(measureSpec);if (specMode == MeasureSpec.EXACTLY) { result = specSize;} else { //處理wrap_content的情況 if (specMode == MeasureSpec.AT_MOST) {result = Math.min(result, specSize); }}return result; } /** * 設置進度最大值 */ public DownloadProgressView setMaxProgress(int maxProgress) {mMaxProgress = maxProgress;invalidate();return this; } /** * 設置進度 */ public void setProgress(int progress) {if (progress >= 0 && progress <= 100) { mProgress = progress; invalidate(); if (mOnProgressUpdateListener != null) {mOnProgressUpdateListener.onProgressUpdate(progress); }} } /** * 獲取當前進度 */ public int getProgress() {return mProgress; } /** * 獲取最大進度 */ public int getMaxProgress() {return mMaxProgress; } public interface OnProgressUpdateListener {/** * 進度更新時回調 * * @param progress 當前進度 */void onProgressUpdate(int progress); } public void setOnProgressUpdateListener(OnProgressUpdateListener onProgressUpdateListener) {mOnProgressUpdateListener = onProgressUpdateListener; } /** * 獲取當前進度值比值 */ private float getProgressRatio() {return (mProgress / (mMaxProgress * 1.0f)); } public static int sp2px(Context context, float spValue) {final float fontScale = context.getResources().getDisplayMetrics().scaledDensity;return (int) (spValue * fontScale + 0.5f); } public static int dip2px(Context context, float dipValue) {final float scale = context.getResources().getDisplayMetrics().density;return (int) (dipValue * scale + 0.5f); }}具體使用

在布局中添加控件

<com.zh.cavas.sample.widget.DownloadProgressViewandroid: android:layout_width='match_parent'android:layout_height='40dp'android:layout_marginStart='20dp'android:layout_marginTop='20dp'android:layout_marginEnd='20dp'app:dpv_bg='#E6EAFB'app:dpv_max_progress='100'app:dpv_percentage_text_color2='@color/white'app:dpv_percentage_text_size='14sp'app:dpv_progress='0'app:dpv_progress_bg='#3548FE'tools:dpv_progress='50' />

Java代碼

private DownloadProgressView vDownloadProgressView; @Override protected void onCreate(Bundle savedInstanceState) {vDownloadProgressView = view.findViewById(R.id.download_progress);//設置進度監聽vDownloadProgressView.setOnProgressUpdateListener(new DownloadProgressView.OnProgressUpdateListener() { @Override public void onProgressUpdate(int progress) {vProgressIndicator.setText('當前進度:' + progress); }});//手動設置當前進度vDownloadProgressView.setProgress(0);//設置最大值vDownloadProgressView.setMaxProgress(100); }}

到這里就結束啦。

以上就是Android實現下載進度條效果的詳細內容,更多關于Android 下載進度條的資料請關注好吧啦網其它相關文章!

標簽: Android
相關文章:
主站蜘蛛池模板: 96久久久| 久久精品国产清自在天天线 | 真实国产露脸乱 | 蜜月va乱码一区二区三区 | 欧美精品久久久 | 国产精品污www在线观看 | 成人免费一区二区三区视频软件 | 狠狠操一区二区三区 | www.日本三级 | 成人免费观看视频 | 丁香五月亚洲综合在线 | 亚洲成人免费视频在线观看 | 日本精品免费 | 欧美激情精品久久久久久 | 亚洲精品视频在线播放 | 久久视频一区 | 亚洲女人天堂成人av在线 | 久久欧美高清二区三区 | 亚洲国产成人精品女人久久久 | 一区二区三区免费在线观看 | 国产精品久久久久久久久免费桃花 | 欧美一区二区三区在线视频 | 欧一区二区 | 中文字幕精品一区二区三区精品 | 国产在线观看一区 | av毛片免费 | 91成人黄色 | 亚洲欧美一区二区三区在线 | 亚洲成人一区二区三区 | 色综合99| 亚洲乱码国产乱码精品精98午夜 | 国产色 | 男女国产网站 | 91精品欧美久久久久久动漫 | 日韩久草| www.久草| 国产无区一区二区三麻豆 | 午夜视频在线免费观看 | 得得啪在线视频 | 一区二区免费视频观看 | 天天操综合网 | 国产精久 | 亚洲一区中文字幕在线观看 | 97国产一区二区 | 国产一级黄色av | 日韩视频网站在线观看 | 日韩久久一区二区 | 国产视频一区二区 | 一区二区不卡 | 亚洲精品一区二区网址 | 精品久久中文字幕 | 色偷偷888欧美精品久久久 | 国产精品国产精品国产专区不片 | 中文字幕精品一区久久久久 | 亚洲欧美日韩另类精品一区二区三区 | 午夜寂寞少妇aaa片毛片 | 综合色久 | a在线观看 | 久久综合九九 | 中文字幕日韩一区二区不卡 | www.久久久 | 欧美精品久久久久久久久老牛影院 | 一级全黄性色生活片 | 亚洲日本韩国欧美 | 欧美精品免费在线 | 国产精品美女久久久久久久久久久 | 永久免费精品视频 | 91亚洲高清 | 操一草 | 亚洲第一男人天堂 | 午夜资源| 精品国产一区二区三区成人影院 | 亚洲精品wwww | 久久99国产精品免费网站 | 免费av播放 | 欧美色图另类 | 国产精品日韩欧美一区二区三区 | 天天天操 | 欧美日韩中文国产一区发布 | 成人在线播放 | 影视一区| 先锋影音av资源站 | 国产不卡在线 | 涩涩视频在线看 | 综合久久综合久久 | 久久综合九色综合欧美狠狠 | 国产第一二区 | 波多野结衣一二三四区 | 亚洲大片一区 | 国产视频网 | jlzzjlzz亚洲日本少妇 | 国产日韩欧美在线 | 欧美成人福利 | 午夜男人的天堂 | 自拍偷拍小视频 | 亚洲国产精品自拍 | 亚洲人在线 | 色www精品视频在线观看 | 欧美精品理论片大全 | 欧美日韩国产在线播放 | 中文字幕日韩一区二区不卡 | 欧美一级裸体视频 | 亚洲国产成人精品女人久久久 | 日本激情视频一区二区三区 | 在线色网站 | 91免费观看视频 | 久久久91精品国产一区二区三区 | 91视频免费观看 | 国产一区二区三区久久 | 国产精品福利网站 | 成人小视频在线观看 | 91精品国产综合久久久久久漫画 | 亚洲高清视频在线 | 精品91在线视频 | 一区二区三区 在线 | 农村妇女毛片精品久久久 | av毛片免费 | 国产亚洲一区二区三区在线 | 日韩一区二区中文字幕 | 七龙珠z普通话国语版在线观看 | 亚洲久久| 99re热精品视频国产免费 | 一级a性色生活片毛片 | 在线视频国产一区 | 成人免费在线视频 | 高清久久| 欧美精品欧美精品系列 | 日韩成人在线视频 | 亚洲 欧美 激情 另类 校园 | 91高清免费看 | 欧美日韩免费一区二区三区 | 国产高清视频一区 | 国产精品粉嫩白浆在线观看 | 黄色av网站在线免费观看 | 欧美国产综合 | 国产综合亚洲精品一区二 | 久久久日韩精品一区二区三区 | 国产一区二区在线免费 | 9999久久久久 | 亚洲女人天堂成人av在线 | 91久久夜色精品国产网站 | 杏导航aⅴ福利网站 | 国产日韩精品在线观看 | 99久久婷婷国产综合亚洲 | 亚洲欧美在线观看 | 久一在线| 91精品国产日韩91久久久久久 | 国产欧美精品区一区二区三区 | 免费黄色在线视频网址 | 老妇激情毛片免费 | 日韩av电影网 | 性人久久久 | 国产伦精品一区二区三区四区视频 | 成人免费视频网站在线观看 | 黄瓜av| 国产欧美精品一区二区 | av网站在线免费观看 | 日本一区二区三区免费观看 | 亚洲精品国产第一综合99久久 | 欧美一级片在线 | 狠狠综合久久 | 久久午夜精品 | 91国产精品 | 久久久久久久一区二区三区 | 欧美区视频 | 久久久中文字幕 | 久久精品无码一区二区日韩av | 成人在线看片 | 日韩精品在线观看视频 | 美女视频一区 | 91精品国产高清自在线观看 | 91精品国产一区二区三区蜜臀 | av一区二区三区 | 美女福利网站 | 日本不卡免费新一二三区 | 久久精品亚洲一区 | 日本久久网站 | 特级丰满少妇一级aaaa爱毛片 | 天天爽视频 | 亚洲一区中文字幕 | 毛片国产 | 国产99久久精品 | 91免费版在线观看 | 毛片在线免费播放 | 四虎影院免费网址 | 一区二区久久 | 欧美日韩成人在线播放 | 国产91视频一区二区 | 国产在线精品一区二区三区 | www.色.com | 日韩欧美一区二区三区免费观看 | 欧美黄色网 | 中文字幕一区日韩精品欧美 | 私人毛片免费高清视频 | 日韩欧美高清视频 | 在线欧美亚洲 | 自拍偷拍在线视频 | 亚洲aⅴ网站 | 91久久精品一区二区二区 | 欧美a在线| 亚洲一区日韩 | 精品成人久久 | 精品国产伦一区二区三区观看说明 | 干干干操操操 | 北条麻妃99精品青青久久主播 | 欧美日韩在线视频免费 | 国产区视频在线观看 | 国产精品久久久久久久午夜片 | 男女精品视频 | 成人激情视频免费观看 | 欧美性猛交一区二区三区精品 | 亚洲欧美日韩另类精品一区二区三区 | 欧美精品在线观看免费 | 欧美日韩在线观看中文字幕 | 久久久久久久久久久久久久久久久久久 | 91在线入口 | 中文字幕在线综合 | 国产精品视频一区二区三区不卡 | 91视频免费看 | 国产国拍亚洲精品av | 毛片福利| 97国产精品 | 亚洲国产日韩a在线播放性色 | 成人精品久久久 | 日韩成人在线一区 | 久久青青 | 国产精久久 | 国产一区二区在线播放 | 国产成人精品综合 | 久久精品麻豆 | www.久| www97影院| 精品免费国产 | 四虎永久免费在线 | 日韩欧美一区二区三区 | 国产精品一区二区视频 | 欧美日韩亚洲成人 | 欧美激情一区二区三区蜜桃视频 | 草久在线观看 | 亚洲www啪成人一区二区 | 涩涩视频观看 | 综合久久亚洲 | 国产精品成人国产乱一区 | 国产精品永久免费 | 黑人巨大精品欧美一区二区小视频 | 精品一区二区三区三区 | 中文字幕_第2页_高清免费在线 | 午夜影视 | 国产三级日本三级美三级 | 天天曰夜夜操 | 91丁香 | 日日爽天天操 | 国产视频久久 | 国精产品一区一区三区免费完 | 麻豆乱码国产一区二区三区 | 欧美视频xxx | 成人1区2区 | 国产精品免费视频一区 | 狠狠狠色丁香婷婷综合久久五月 | 免费在线黄色av | 日韩精品一区二区三区中文在线 | 涩涩视频网站在线观看 | 91视频久久 | 国产精选视频 | 性视频一区二区 | 欧美日韩在线免费观看 | 亚洲欧美日韩精品久久奇米色影视 | 久久久精品国产 | 久久久久国产成人精品亚洲午夜 | 亚洲精品久久久久久久久久久 | 日本二区在线播放 | 午夜精品久久久久久久 | 亚洲aaaaaa特级| 欧美成人一区二区 | 国产中文视频 | 中文字幕在线观看一区二区三区 | 在线观看免费国产 | 在线三级电影 | 国产一级特黄aaa大片评分 | 欧美视频精品在线 | 99精品国产在热久久 | 欧美一级二级三级视频 | 久操综合| 欧美成人一区二区三区片免费 | 精品欧美一区二区在线观看视频 | 国产成人免费在线 | 久久精品六 | 久久精品欧美一区二区三区麻豆 | 一级黄色片美国 | 欧美hdfree性xxxx | 亚洲国产精品久久久 | 精品国产一区在线 | 久久久久久久久99精品 | 久久久久久久久久毛片 | 亚洲伦理 | www.com国产精品 | h视频在线观看免费 | 日韩视频中文 | 国产国拍亚洲精品av | 91精品国产自产精品男人的天堂 | 久久久久国产精品一区二区 | 视频一区在线 | 久草免费在线视频 | 一区二区三区视频在线 | 在线观看欧美日韩视频 | 最新一级毛片 | 国产羞羞视频免费在线观看 | 精品国产一区二区三区久久久 | 国产精品1区2区3区 欧美 中文字幕 | 欧美成人免费观看 | 色呦呦网站在线观看 | 亚洲精品一区国语对白 | 久久久91精品国产一区二区三区 | 成人三级在线 | 日韩欧美在线一区二区 | 欧美成人手机在线 | 一区二区三区在线 | 久久久久国产成人精品亚洲午夜 | 精品入口麻豆88视频 | 这里只有精品视频 | 91久久精品一区二区二区 | 欧美成在线视频 | 国产亚洲精品久久久久久久久 | 永久91嫩草亚洲精品人人 | 久久精品色欧美aⅴ一区二区 | 中文字幕一区在线观看视频 | 国产精品久久久久一区二区三区 | 久久精品欧美一区二区三区不卡 | v888av成人 | 狠狠色狠狠色合久久伊人 | 伊人久久国产 | 成人免费在线看片 | 99热热热热 | 精品久| av香港经典三级级 在线 | 一级毛片免费 | 亚洲精品一 | 羞羞的视频在线观看 | 亚洲精品乱码久久久久久国产主播 | 一色屋精品久久久久久久久久 | 精品国产31久久久久久 | 999国产在线 | 日韩久久久一区二区 | 成人福利在线观看 | 久久在线视频 | 在线中文字幕视频 | 国产视频一区二区在线观看 | 在线播放国产一区二区三区 | 看亚洲a级一级毛片 | 天天干女人 | 一区二区三区四区免费观看 | 国产精品视频一区二区三区四蜜臂 | 亚洲一区中文字幕在线 | 99精品国产高清一区二区麻豆 | 激情久久av一区av二区av三区 | 欧美国产精品一区二区三区 | 伊人爽| 97国产精品视频人人做人人爱 | 色一级| 99re6在线视频精品免费 | 91精品国产综合久久精品 | 精品久久久久久亚洲精品 | 日韩国产一区 | 精品一区二区三区免费 | 日韩成人在线视频 | 黄色片视频免费 | 久久性| 狠狠爱www人成狠狠爱综合网 | 亚洲免费人成在线视频观看 | 欧美a在线看 | 国内精品在线视频 | 国产一区二区日韩 | 成年人在线观看 | 精品国产一区二区三区久久 | 在线视频第一页 | 国产精品午夜电影 | 国产精品毛片无码 | 精品999www | 国产一区二区精品丝袜 | 亚洲电影在线观看 | 日韩视频免费在线观看 | 亚洲精品电影在线一区 | 欧美1314| 日本男人的天堂 | 国产精品精品视频一区二区三区 | 成人av网站在线观看 | 一区二区免费 | 国产精品久久久久久亚洲调教 | 亚洲精品专区 | 青青草一区| 热久久这里只有精品 | 亚洲高清www | 影视一区二区 | 特级淫片日本高清视频免费 | 欧美日韩国产一区二区三区 | 婷婷精品 | 91精品国产综合久久福利软件 | 美日韩一区二区 | 欧美精品www | 欧美精品色 | 久久精品亚洲精品 | 国产婷婷色一区二区三区 | 欧美一区二区三 | 午夜电影网址 | 国产成人精品久久二区二区 | 久久久香蕉 | 夜夜操天天干 | 国产精品夜夜 | 日本一级淫片免费看 | 特黄一级 | 91 在线观看 | 成人高清视频免费观看 | 日韩视频中文字幕在线观看 | 2018啪一啪| 欧美午夜精品久久久久久人妖 | 久久久久久国产精品mv | 国产精品不卡视频 | 午夜性电影 | 国产女人爽到高潮免费视频 | 在线成人免费视频 | 午夜精品成人一区二区 | aaa在线| 日本爽快片毛片 | 久久精品网| 九九福利| 一区在线视频观看 | 成人国产精品免费网站 | 国产欧美精品区一区二区三区 | 草草久久久 | 久久9999久久| 激情欧美日韩一区二区 | 色黄网站| 成人午夜视频在线观看 | 97国产免费| 91色乱码一区二区三区 | 成人二区| 中文字幕在线永久 | 亚洲国产精品久久久久久女王 | 日韩电影一区二区三区 | 免费观看一级毛片 | 日韩中文字幕在线观看 | 国产午夜久久 | 精品国产不卡一区二区三区 | 亚洲精品乱码久久久久久国产主播 | 伊人网综合视频 | 中文字幕色 | 国产亚洲精品精品国产亚洲综合 | 国产免费av网站 | 久久精品一区二区三区四区 | 欧美 日本 国产 | 开操网 | 嫩草视频免费在线观看 | 一a级毛片 | 欧美一区二区另类 | 国产一区二区欧美 | www.国产.com | 国产三级在线观看 | 国产一区久久 | 国产亚洲视频在线 | 精品无码久久久久国产 | 日本免费视频在线观看 | 天天操天天曰 | 国产精品三级在线 | 在线视频a| av高清在线免费观看 | 日日摸天天做天天添天天欢 | 99久久精品免费 | 婷婷综合 | 性培育学校羞耻椅子调教h 欧美精品网站 | 99精品九九| 一区二区三区四区精品 | 国产一区二区三区四区五区 | 亚洲 自拍 另类 欧美 丝袜 | 中文字幕在线视频免费播放 | 国产视频久久久 | 日韩性在线 | 久久久www成人免费精品 | 91精品国产91久久综合桃花 | 亚洲综合无码一区二区 | 亚洲欧美在线观看 | 亚洲高清视频在线观看 | 精品日韩| 久在线 | 天天操天天插天天干 | 色综合天天天天做夜夜夜夜做 | 国产精品99久久久久久www | 欧美成人高清视频 | 成人片免费看 | 日本理伦片午夜理伦片 | 狠狠夜夜| 国产综合99| 国产精品成人3p一区二区三区 | 亚洲女人天堂成人av在线 | 亚洲国产精品人人爽夜夜爽 | 久久99视频精品 | 91精品国产综合久久久久久丝袜 | 国产毛片在线看 | 图片区 国产 欧美 另类 在线 | 亚洲国产精品一区二区第一页 | 成人免费影院 | 91在线一区二区 | 亚洲欧美激情视频 | 在线观看成人高清 | 国产精品一区久久久 | 久久1区 | 国产精品午夜电影 | 日韩五月 | av三级在线观看 | 中文字幕av亚洲精品一部二部 | 精品一区二区三区在线视频 | 四虎影音| 久久99精品久久久 | 欧美视频精品 | 国产成人中文字幕 | 成人精品久久久 | 视频一区二区三区中文字幕 | 91久久精品国产91久久 | 日本精品二区 | 欧美日本在线观看 | 国产永久免费 | 欧美视频在线免费看 | 亚洲成人免费网址 | 婷婷五月色综合 | 精品一区二区三区四区 | 九九免费视频 | 96自拍视频| 欧美日韩一二三 | 亚洲午夜精品片久久www慈禧 | 成人精品在线视频 | 国产精品国产a级 | 一区二区精品在线 | 一区二区三区精品视频免费看 | 久久爱综合 | 在线观看精品视频网站 | 岛国av免费观看 | 蜜桃一区二区三区 | 欧美国产视频 | 涩涩操 | 国产野精品久久久久久久不卡 | 亚洲国产精品视频 | 欧美一区二区三区男人的天堂 | 久久99精品久久久久蜜臀 | 欧美精品一区三区 | 亚洲国产精品99久久久久久久久 | 国产精品99一区二区三区 | 夜夜爽99久久国产综合精品女不卡 | 午夜a级理论片915影院 | 国产农村妇女精品 | 奇米影视奇米色777欧美 | 欧美第5页 | xxxx性欧美 | 成人激情视频在线观看 | 精品久久久久久久 | 亚洲人成电影网 | 国产高潮失禁喷水爽网站 | 啵啵影院午夜男人免费视频 | 欧美日韩福利视频 | 精品国产髙清在线看国产毛片 | 特级黄一级播放 | 欧美日韩成人在线观看 | 一级毛片在线播放 | 精品国产一区二区三区av片 | 97超碰在线免费 | www.xxx在线观看 | 波多野结衣一区二区三区四区 | 免费午夜视频 | 国产精品久久久久久久 | www,久久久 | 成人影视网址 | 色婷婷精品国产一区二区三区 | 成人毛片在线视频 | 日韩在线视频中文字幕 | 欧美黄色一区 | 蜜臀网| 午夜国产精品视频 | 99国产视频 | 日韩中文字幕一区 | 日韩福利视频导航 | 夜夜天天 | 欧美精品久久久久久久久久丰满 | 欧美日韩精品一区二区在线播放 | www.久久精品 | 国产精品视频一区二区免费不卡 | 精品久久一区二区三区 | 成人在线视频一区二区 | 久久亚洲一区二区三区四区 | 免费h| 少妇无套高潮一二三区 | av中文字幕在线播放 | 最新av片| 国产精品美女久久久久aⅴ国产馆 | 91在线精品秘密一区二区 | 国产亚洲欧美一区二区 | 日韩在线播放一区二区 | 黄色成人在线观看视频 | 免费黄色看片 | 精品免费视频 | 精品视频网 | 精品亚洲一区二区三区 | 亚洲一区二区免费 | 国产福利在线观看视频 | 亚洲成人免费在线 | 91成人区 | 最新av中文字幕 | 久久久网页 | 日操 | 中字幕视频在线永久在线观看免费 | 国产精品亚洲欧美日韩一区在线 | 久久久精品免费视频 | 精品在线不卡 | 91一区 | 久久久国产一区 | 亚洲小视频网站 | 国产99久久久国产精品 | 人人操日日干 |