黄a在线观看-黄a在线-黄a大片-黄色片在线看-黄色毛片免费-黄色大片网站

您的位置:首頁技術(shù)文章
文章詳情頁

Android實現(xiàn)下載進度條效果

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

vivo應用商店下載效果:

Android實現(xiàn)下載進度條效果

最終實現(xiàn)效果:

Android實現(xiàn)下載進度條效果

分析1 - 計算進度

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

繪制圓角矩形需要傳一個Rect,Rect的構(gòu)造方法需要傳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%,計算出來的矩形長度比較小,會導致圓角不是滿的,缺陷效果見動圖(注意看剛從左側(cè)出來時圓角的大小)。

Android實現(xiàn)下載進度條效果

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 - 繪制文字和交匯

要讓文字和進度交匯時,讓藍色變?yōu)榘咨枰褂玫絇orterDuffXfermode。PorterDuffXfermode可以將2個圖像進行合成,或者簡單說為相交模式,而合成方式有16種,見下圖。(Src藍色方塊為上層圖層,Dst黃色圓形為下層圖層。)

Android實現(xiàn)下載進度條效果

查閱文檔,我們發(fā)現(xiàn)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); //創(chuàng)建文字圖層 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); //畫結(jié)合后的圖層 canvas.drawBitmap(textBitmap, getFrameLeft(), getFrameTop(), mTextPaint); mTextPaint.setXfermode(null); textBitmap.recycle();}手勢拓展

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

我們先重寫dispatchTouchEvent()方法,當down事件來到時,讓父控件不攔截,我們進行攔截。接著重寫onTouchEvent()方法,計算Move、Up時,移動的距離,計算出百分比和應有的進度值,然后不斷調(diào)用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; /** * 進度更新監(jiān)聽 */ 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);//創(chuàng)建文字圖層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);//畫結(jié)合后的圖層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 {/** * 進度更新時回調(diào) * * @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);//設置進度監(jiān)聽vDownloadProgressView.setOnProgressUpdateListener(new DownloadProgressView.OnProgressUpdateListener() { @Override public void onProgressUpdate(int progress) {vProgressIndicator.setText('當前進度:' + progress); }});//手動設置當前進度vDownloadProgressView.setProgress(0);//設置最大值vDownloadProgressView.setMaxProgress(100); }}

到這里就結(jié)束啦。

以上就是Android實現(xiàn)下載進度條效果的詳細內(nèi)容,更多關(guān)于Android 下載進度條的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標簽: Android
相關(guān)文章:
主站蜘蛛池模板: 国产三级漂亮女教师 | 日韩精品成人 | av不卡在线免费观看 | 亚洲aⅴ一区二区 | 日本在线视频播放 | 欧美毛片在线 | 黄色大片免费网站 | 亚洲国产精品一区二区尤物区 | 超碰人人人人人人人 | 免费在线观看黄 | 国产做爰xxxⅹ高潮视频在线 | 麻豆一区二区在线 | 小猪佩奇第七季中文免费版 | 亚洲最大的黄色网 | 欧美在线日韩 | 超碰在线天天 | 在线观看免费一区 | 亚洲成人av片 | av在线免费观看网址 | 香蕉久久精品日日躁夜夜躁夏 | 国产乱子伦视频在线观看 | 中文字幕乱码一区av久久不卡 | www.天天色 | 天堂av免费在线 | 久操久热 | 亚洲自拍另类 | 国产精品亚洲а∨天堂免在线 | 日韩精品91 | 91黑丝视频 | 天天插在线视频 | 亚洲国产精品婷婷 | 国产精品久久久久久久久久免费 | 91精品国产91久久久久游泳池 | 亚洲乱码日产精品一二三 | 视频一区二区国产 | 天堂成人网 | 久久丫精品久久丫 | 日本欧美一区二区三区不卡视频 | 久久午夜夜伦鲁鲁片不卡 | 国产高清在线视频 | 亚洲自拍在线观看 | 亚洲精品1 | 欧美自拍色图 | 成人情趣片在线观看免费 | 一本大道五月香蕉 | 国产精品乱码久久久久久1区2区 | 99热r| 综合久久久久久久久 | 成人国产精品入口 | 最新av观看| √资源天堂中文在线视频 | 国产一区欧美 | 欧美视频中文字幕 | 国产最爽乱淫视频免费 | 成人午夜精品无码区久久 | 99极品视频 | 国产娇喘精品一区二区三区图片 | 欧美群妇大交群中文字幕 | 日韩午夜激情视频 | 男人猛吃奶女人爽视频 | 久久久久久国产精品免费免费男同 | 97成人精品视频在线播放 | 在线播放ww | 爱爱二区 | 韩日免费视频 | 欧洲亚洲成人 | 亚洲最大成人在线观看 | 91免费视频观看 | 久久精品视频中文字幕 | 在线精品国产成人综合 | 中文字幕一区二区三区久久蜜桃 | 12一15性xxxx粉嫩国产 | 成人av手机在线 | 丁香久久综合 | 天天操天天拍 | 精品久久久久久久久久久下田 | 亚洲日韩乱码一区二区三区四区 | 免费看日批视频 | 偷窥自拍亚洲色图 | 精品免费国产一区二区三区四区 | 很污很黄的网站 | 午夜精品一区二区三区三上悠亚 | 精品久久久久久久国产性色av | 思思久久99热只有频精品66 | 精品国产一区二区三区四区阿崩 | 在线日韩一区二区 | 中文字幕二十三页2 | 国产精品久久久久久久久久软件 | 狠狠干网址 | 日韩网红少妇无码视频香港 | 97久久超碰中文字幕 | 三级av在线免费观看 | 国产精品乱子乱xxxx | 国产老熟女伦老熟妇露脸 | 久久黄色网络 | 亚洲一区二区三区日本久久九 | 东京亚洲区卡不 | 欧美老熟| 9久久9毛片又大又硬又粗 | 国产真实夫妇视频 | 熟妇人妻va精品中文字幕 | 欧美性生交xxxxx | 天天摸夜夜添狠狠添婷婷 | 草逼视频免费看 | 国产欧美一区二区三区免费看 | 一色桃子在线精品播放 | 亚洲综合av一区二区 | www.亚洲黄色| 妺妺窝人体色www看人体 | 少妇与大狼拘作爱性a | www视频免费在线观看 | 少妇粉嫩小泬白浆流出 | 亚洲精品久久久艾草网 | 亚洲自拍另类 | caopeng在线视频 | 欧美性网址 | 福利视频免费观看 | 久久麻豆精品 | 亚洲日韩乱码中文无码蜜桃臀 | 亚洲淫片| 在线观看免费毛片 | 国内精品久久久久久久影视 | 久热这里有精品 | 一本一道a∨波多野极衣 | 免费国产黄网站在线观看 | 91免费视频大全 | 女被男啪到哭的视频网站 | 亚洲一区二区三区四区五区xx | 成人在线观看视频网站 | 欧美日韩99 | www国产高清 | av鲁丝一区鲁丝二区鲁丝三区 | 亚洲理伦 | 人妻少妇精品久久久久久 | 亚洲精品久久久久久久蜜桃 | 五月天堂av91久久久 | 麻豆精品乱码一二三区别蜜臀在线 | 自拍偷拍亚洲欧洲 | 久久久久国产精品www | 亚洲国产精品久久人人爱 | 欧美xxxxx高潮喷水 | 色优久久| 久久大胆人体 | 国产乱对白刺激视频 | 性xxxx18| 1111111少妇在线观看 | 亚洲欧美网站 | 欧美激情视频一区 | 国产精品久久久久久久久免费相片 | 精品欧美一区二区精品久久 | 丝袜 中出 制服 人妻 美腿 | 日本一区精品视频 | 女人和野鲁性猛交大毛片 | 四虎少妇做爰免费视频网站四 | 久久99精品久久久久子伦 | 亚洲成av人片在线观看无 | 538精品一线 | 亚洲福利视频一区二区 | 成人国产综合 | 动漫美女露胸网站 | 欧美疯狂性受xxxxx喷水 | 国产偷人妻精品一区二区在线 | 丁香五月网久久综合 | 亚洲日韩av无码一区二区三区 | 久草热久草在线 | 欧美精品在线一区二区三区 | 欧美特级黄色录像 | 成 人 黄 色 视频 免费观看 | 肉大捧一进一出免费视频 | 国产香蕉97碰碰碰视频在线观看 | 日韩av网站在线播放 | 人妻中文字幕无码专区 | 国产精品久久久午夜夜伦鲁鲁 | 在线看黄免费 | 亚洲激情成人 | 日韩毛片中文字幕 | 中文字幕亚洲无线码在线一区 | 成人久久免费网站 | 国产太嫩了在线观看 | 99久久久国产精品免费蜜臀 | 性国产三级在线观看 | 欧美黄色片免费看 | 91在线播放视频 | 免费高潮视频95在线观看网站 | 色哟哟一区二区三区精华液 | 亚洲欧美日韩国产成人 | 人人爽人人爽人人爽人人爽 | 天堂在线中文网www 亚洲中文字幕在线第六区 日本高清不卡aⅴ免费网站 | 亚洲深夜福利视频 | 好大好湿好硬顶到了好爽视频 | 91精品久久久久久久99蜜桃 | 亚洲天堂欧美 | 欧美xxx在线观看 | 黄色午夜网站 | 曰韩无码二三区中文字幕 | 久久最新免费视频 | 国产精品卡一卡二 | 91精品国产91久久久久福利 | 久久影院中文字幕 | 老牛精品亚洲成av人片 | 久久久久夜 | 99ri视频| 日韩久久国产 | 新呦u视频一区二区 | 亚洲码欧美码一区二区三区 | 国产专业剧情av在线 | 青青草黄色 | 少妇被又大又粗又爽毛片久久黑人 | 成人国产免费观看 | 日韩一区二区中文字幕 | 91av在线视频观看 | 少妇太紧太爽又黄又硬又爽视频 | 亚洲国产天堂一区二区三区 | 日本精品三级 | 精品一区二区三区免费毛片爱 | 精品久久久久久人妻无码中文字幕 | 亚洲区小说 | av国産精品毛片一区二区三区 | 91成人精品| 双性大乳浪受古代h男男 | 丝袜一级片 | 毛片女人18片毛片女人免费 | 免费欧美一级片 | 国产乱子伦一区二区三区四区五区 | 操大逼免费视频 | 91麻豆网站 | 免费在线看黄网站 | h片观看| 制服丝袜一区二区三区 | 成人免费无码大片a毛片抽搐 | 五月伊人网 | 少妇高潮久久久 | 欧美三级韩国三级日本三斤 | 中文字幕无码不卡免费视频 | 免费日本黄色片 | 超碰成人97 | 日韩欧美中文字幕在线播放 | 亚洲精品视频一区 | 日韩影音 | 精品国产乱码久久久久久口爆 | 国产瑟瑟视频 | 日批视频免费播放 | 久久国产精品99久久久久久进口 | 国产成人精品日本亚洲直播 | 撸撸综合色av | 波多野结衣一区二区三区免费视频 | 国产精品99一区二区三区 | 久久久久久69 | 国产在视频线在精品视频55 | 精品人体无码一区二区三区 | 免费又黄又粗又爽大片69 | 人人干在线 | 日韩啪啪片 | 久久久久这里只有精品 | 欧美双性人妖o0 | 国产超高清麻豆精品传媒麻豆精品 | 色婷婷美国农夫综合激情亚洲 | 美丽姑娘免费观看在线观看 | 亚洲夜夜夜| 亚洲精品乱码一区二区三区 | 成人免费毛片果冻 | 成人av网站在线观看 | 两个人看的vvv在线高清 | 精品无人乱码一区二区 | 一级黄色性生活片 | 天堂在线精品 | 精品久久成人 | 国产亚洲视频在线播放香蕉 | 久久久精品二区 | 高跟丝袜av| 欧美精品色婷婷五月综合 | av男人的天堂网 | 一级做a爱片性色毛片高清 一级做a毛片 | 国产毛茸茸毛毛多水水多 | 又爽又黄又无遮挡的视频 | 超碰在线免费看 | 91在线视频在线观看 | 99久久精品国产免费看 | 日韩高清在线播放 | 日本性欧美 | 久久视频在线观看精品 | 秋霞在线观看视频 | 潘金莲aa毛片一区二区 | 性无码一区二区三区在线观看 | 97自拍视频| 中文字幕一区二区三区免费视频 | 韩日精品视频在线观看 | 国产a级黄色| 久久久久免费看黄a片app | 久在线精品视频线观看 | 伊人资源| 国产人妖乱国产精品人妖 | 九九爱爱视频 | 国产亚洲精品久久久久久大师 | 成人精品免费视频 | h亚洲| 精品国产一区二区三区免费 | 国产成人精品无码片区在线观看 | 99热这里只有精品66 | 狠狠色狠狠色很很综合很久久 | 97香蕉视频 | 欧美乱大交xxxxx | 国产精品成人3p一区二区三区 | 日韩免费看片网站 | 亚洲欧美激情小说另类 | 多p混交群体交乱小说 | 成年人视频在线免费看 | 精品久久人妻av中文字幕 | 影音先锋在线播放 | 亚洲精品无码久久久久久久 | 在线播放91灌醉迷j高跟美女 | 色播综合网 | 91久久久久久久久久久 | 国产精品高潮呻吟久 | 日韩在线观看中文字幕 | 国产精品熟妇视频国产偷人 | 色多多污污 | 日本99视频 | 日韩 欧美 自拍 | 久久久久久艹 | 国产亚洲精品久久久久久青梅 | 色噜噜狠狠色综合av | 成人影院中文字幕 | 影音先锋婷婷 | 亚洲不卡免费视频 | 午夜福利理论片高清在线 | 欧美野外做受又粗又硬 | 精品国精品国产自在久国产应用 | 日韩在线小视频 | 成人亚洲精品 | 中文字幕一区二区精品 | 性一交一乱一伧老太 | 欧美二区在线 | 3344永久在线观看视频免费 | 香蕉人人超人人超碰超国产 | 国产做无码视频在线观看 | 中文字幕在线观看视频www | 粉嫩av一区二区三区免费野 | 丝袜 亚洲 另类 欧美 重口 | 日本无遮挡吸乳呻吟免费视频网站 | 日韩五月 | 狠狠搞狠狠干 | 韩国三级免费 | 国产精品久久久久久久久绿色 | 北条麻妃在线一区二区韩世雅 | 亚洲日本va午夜中文字幕 | 欧产日产国产精品 | 激情综合亚洲 | 免费观看三级毛片 | 久久精品无码一区二区三区免费 | 国产成人午夜福利在线播放 | 午夜小视频在线免费观看 | 欧美激情91| 国产亚洲中字幕欧 | 色噜噜一区二区 | 久久全国免费视频 | 大肉大捧一进一出好爽视色大师 | 日日综合网 | 黄色一级片视频 | 一性一交一口添一摸视频 | 久久九九爱 | 天天艹| 国产精品久久久久久久不卡 | 337p日本欧洲亚洲大胆精品 | www免费黄色 | 奇米影视在线视频 | av中文在线 | 精品无码国产自产拍在线观看 | 午夜视频久久 | 成人h动漫精品一区二区无码 | 日本aⅴ片 | 亚洲成a人片在线观看日本 国产精品无码成人午夜电影 | 山东少妇露脸刺激对白在线 | 国产猛男猛女超爽免费视频 | 亚洲精品久久久久久下一站 | 国产精品夜间视频香蕉 | 亚洲免费三级 | 欧美日韩国产精品 | 丝袜 国产 日韩 另类 美女 | 伊伊人成亚洲综合人网香 | 亚洲无人区一线二线三线 | 中文字幕av无码不卡免费 | 国产主播中文字幕 | 久久久久久美女精品啪啪 | 精品国产午夜福利在线观看 | 成人在线观看网址 | 狠狠色噜噜狠狠狠狠2022 | 夜夜爽av| 久久久亚洲裙底偷窥综合 | 国产一区二区精彩视频 | 少妇丰满极品嫩模白嫩 | 欧美成在线 | 韩国美女vip内部1101福利 | 白嫩少妇hdxxxⅹ性大陆 | 91精品国产91久久久久 | 久艹视频在线观看 | 7m第一福利500精品视频 | www.嫩草.com | 亚洲一区二区在线视频 | 男人j进入女人j内部免费网站 | 最新在线视频 | 亚洲色图欧美日韩 | 久久免费av | 日韩高清国产一区在线 | 国产精品久久久久免费观看 | 国产无遮挡又黄又爽免费网站 | 高柳家动漫在线观看 | 日本裸体丰满少妇一丝不丝 | 日产精品久久久久久久性色 | 国产色无码精品视频免费 | 久久久久久国产精品免费播放 | 一区高清 | 欧美xxxx精品 | 久久大香焦 | 窝窝午夜精品一区二区 | 91精品国产人妻国产毛片在线 | 国产丝袜在线 | 日韩免费专区 | 国产看真人毛片爱做a片 | 国产精品久久久久久久久久10秀 | 国产伦子真实事例对白 | 久久久ww| 精区一品二品星空传媒 | 色av综合| 国产极品尤物 | 国产好爽…又高潮了毛片 | 精品国产不卡一区二区三区 | 国产在线视频一区二区董小宛性色 | 中文字幕理伦片免费看 | 亚洲一级中文字幕 | 国产美女精品视频免费播放软件 | 国产精品18久久久久久首页狼 | 一本到视频 | 另类小说欧美 | 在线观看国产精品普通话对白精品 | 日韩一级免费视频 | 精品国产日韩亚洲一区 | 少妇的丰满3中文字幕 | 亚洲欧美v国产一区二区 | av狠狠干| 成人天堂婷婷青青视频在线观看 | 国产特级乱淫免费看 | 99国产成人精品 | 日本a大片 | 日本欧美一本 | 成人片片 | 久久免费看少妇a高潮一片黄特 | 亚欧成a人无码精品va片 | 人妻精品国产一区二区 | 日韩中文在线播放 | 精品成人69xxxyz | 久久久久久久久久久大尺度免费视频 | 亚洲天堂一级片 | 福利网站在线 | 一区二区不卡在线 | 97人人模人人爽人人喊小说 | 成人妇女淫片aaaa视频 | 午夜寂寞少妇 | 国产精品久久久久影院 | 男女猛烈激情xx00免费视频 | 色噜噜狠狠色综合中文字幕 | 天天躁日日躁狠狠躁av麻豆男男 | 亚洲精品码 | 国产精品无码无片在线观看 | 国产资源在线免费观看 | 少妇性xxxx性开放黄色 | 国产精品日韩精品 | 日韩免费影视 | 337p亚洲精品色噜噜狠狠 | 91夫妻视频| 波多野结衣av一区二区三区中文 | 超碰国产在线观看 | 青青在线视频 | 国产一二三四在线 | 国产一级自拍 | 9999免费视频 | 精品小视频 | 浮力影院草草 | 手机在线成人 | 蜜臀久久精品久久久久久酒店 | 色欲久久综合亚洲精品蜜桃 | 免费黄色小说视频 | 免费做爰猛烈吃奶摸视频在线观看 | 久久视频这里有久久精品视频11 | 午夜欧美精品久久久久久久 | brazzers精品成人一区 | 18禁黄污吃奶免费看网站 | 明星各种姿势顶弄呻吟h | 国产一区二区三区不卡在线观看 | 午夜精品久久久久久99热明星 | 91久久久久国产一区二区 | 三级毛片儿 | av中文在线播放 | 午夜黄色网址 | 亚洲成人av一区二区 | 欧美人与牲动交xxxx | 国产乱码精品一区二区三区四川人 | 91小视频在线观看 | 男女做爰全过程3d | 97精产国品一二三 | 午夜激情视频免费观看 | 亚洲欧美综合精品成人导航 | 欧产日产国产精品三级 | 激情黄色小说视频 | 麻豆91在线 | 成年人免费网站 | 东京一本一道一二三区 | 亚洲蜜桃av | 亚洲成av人片一区二区梦乃 | 成人99一区二区激情免费看 | 手机国产乱子伦精品视频 | 91成人看片免费版 | 一本一本久久a久久精品综合小说 | 亚洲熟妇av一区二区三区 | 欧美亚洲一区二区三区 | 永久免费看黄 | 男人的天堂视频网站 | 每日在线观看av | 中文成人无字幕乱码精品区 | 久久婷香 | 国产成人av影院 | 黄色大片免费在线观看 | 偷拍自中文字av在线 | 国产真实乱偷精品视频 | 91亚洲区| 狼人香蕉 | 少妇精品一区二区三区在线观看 | 视频在线一区 | 色噜噜狠狠色综合日日 | 亚洲免费网站在线观看 | 国产精品尤物yw在线观看 | 国产成人无码18禁午夜福利p | 欧美三级韩国三级日本一级 | 女性脱给我揉视频 | 日韩欧美在线看 | 无码熟熟妇丰满人妻啪啪 | 国产成人精品一区二三区 | 136fldh导航福利视频 | 国产做爰xxx18在线观看网站 | 国产猛男猛女超爽免费视频 | 做爰xxxⅹ性69免费软件 | 成人欧美激情 | 亚洲精品大全 | 一级做a爰片久久毛片一 | 影音先锋国产在线 | 亚洲另类激情综合偷自拍图 | 男女一进一出超猛烈的视频不遮挡在线观看 | 噜噜色av| 成人爱爱 | 亚洲乱亚洲乱妇无码麻豆 | 台湾十八成人网 | 成年午夜无码av片在线观看 | 男人添女人下部高潮全视频 | 久久久久久久久久99 | 无码精品黑人一区二区三区 | 国产精品丝袜久久久久久久不卡 | 妓女爽爽爽爽爽妓女8888 | 91在线中文| 97国产在线播放 | 嫩草午夜少妇在线影视 | 国产成年无码久久久久毛片 | 久久精品手机观看 | 色综合久久久久久久久五月 | 国产精品免费拍拍10000部2 | 91久久久久久久久久久久久 | 天堂在线中文资源 | 91av视频在线观看 | 天天干夜夜爽 | 综合黄色 | 欧美性折磨bdsm激情另类视频 | 中文字幕精品国产 | 伊人首页 | 色yeye香蕉凹凸视频在线观看 | 国产福利一区二区三区视频 | 男男成人高潮片免费网站 | 欧洲亚洲色一区二区色99 | 国产一区二区亚洲 | 成人免费乱码大片a毛片软件 | 人人妻人人澡人人爽欧美一区 | 蜜臀久久99精品久久久 | 国产亚洲欧美精品久久久久久 | 国产理论av | 久久99精品久久久久婷综合 | av网站网址| 欧美特一级 | 国产亚洲第一伦理片在线c 国产亚洲精品久久久久动 国产亚洲精品久久久久久大师 | 欧美aⅴ在线观看 | 亚洲砖区区免费 | 日本亚洲综合 | 亚洲一区二区不卡在线观看 | 国产日韩不卡 | 性欧美jzjz2 性欧美videossex精品 | 偷偷操影院 | 国产偷国产偷亚洲清高app | 成人免费视频网 | 精品视频在线免费观看 | 国内成人精品2018免费看 | 亚洲开心网 | 国产女主播视频一区二区三区 | 精品麻豆av| 国产二区一区 | 亚洲欧美日韩精品成人 | 中文字幕在线一区 | 国产在线不卡一区二区三区 | 一区二区三区四区视频 | 国产精品一区二区免费 | 三级av网| 日本啪啪网 | 国产成人亚洲精品自产在线 | 91精品国产成人 | 99视频在线精品免费观看2 | 91高清国产视频 | ass亚洲肉体欣赏pics | 日本丰满护士bbw | 亚洲精品在 |