亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

自定義播放操作(快進,快退,聲音,亮度調節)

2019-11-06 09:39:40
字體:
來源:轉載
供稿:網友
/** * Created by RonQian on 2017/2/22 15:02 * <p> * 詳情描述: 自定義播放操作 */public class CommonVideoView extends FrameLayout implements MediaPlayer.OnPReparedListener, MediaPlayer.OnCompletionListener, MediaPlayer.OnErrorListener, View.OnTouchListener, View.OnClickListener, Animator.AnimatorListener, SeekBar.OnSeekBarChangeListener { private Activity mContext; private final int UPDATE_VIDEO_SEEKBAR = 1000; private GestureDetector mGestureDetector; private Context context; private FrameLayout viewBox; private CommonHitVideoView videoView; private LinearLayout touchStatusView; private RelativeLayout videoControllerLayout; private ImageView touchStatusImg; private ImageView videoPauseImg; private TextView touchStatusTime; private TextView videoCurTimeText; private TextView videoTotalTimeText; private SeekBar videoSeekBar; private ProgressBar progressBar; private int duration; private String formatTotalTime; private Timer timer = new Timer(); //定義用seekBar當前的位置,觸摸快進的時候顯示時間 private int position; private int touchStep = 1000;//快進的時間,1秒 private int touchPosition = -1; private boolean videoControllerShow = true;//底部狀態欄的顯示狀態 private boolean animation = false; private VerticalSeekBar volumeSeekBar, brightSeekBar;//音量 亮度 //最大聲音 private int mMaxVolume; // 當前聲音 private int mVolume = -1; //當前亮度 private float mBrightness = -1f; private AudioManager mAudioManager; private TimerTask timerTask = new TimerTask() { @Override public void run() { videoHandler.sendEmptyMessage(UPDATE_VIDEO_SEEKBAR); } }; private Handler videoHandler = new Handler() { @Override public void handleMessage(Message msg) { switch (msg.what) { case UPDATE_VIDEO_SEEKBAR: if (videoView.isPlaying()) { videoSeekBar.setProgress(videoView.getCurrentPosition()); } break; } } }; public CommonVideoView(Context context) { this(context, null); } public CommonVideoView(Context context, AttributeSet attrs) { this(context, attrs, 0); } public CommonVideoView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); this.context = context; } public void start(String url, Activity mActivity) { mContext = mActivity; mContext.getWindow().getDecorView().setSystemUiVisibility(View.GONE); mAudioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); mMaxVolume = mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC); mGestureDetector = new GestureDetector(context, new MyGestureListener()); videoSeekBar.setEnabled(false); videoView.setVideoURI(Uri.parse(url)); videoView.start(); } public void setFullScreen() { touchStatusImg.setImageResource(R.mipmap.ic_toland); this.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); videoView.requestLayout(); } public void setNormalScreen() { touchStatusImg.setImageResource(R.mipmap.ic_toland); this.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 400)); videoView.requestLayout(); } @Override protected void onFinishInflate() { super.onFinishInflate(); initView(); } private class MyGestureListener extends GestureDetector.SimpleOnGestureListener { @Override public boolean onSingleTapUp(MotionEvent e) { return super.onSingleTapUp(e); } @Override public boolean onSingleTapConfirmed(MotionEvent e) { return super.onSingleTapConfirmed(e); } @Override public boolean onDown(MotionEvent e) { return true; } @Override public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { if (null == e1 || null == e2) { return false; } float minMove = 10; //最小滑動距離 float minVelocity = 10; //最小滑動速度 float beginX = e1.getX(); float endX = e2.getX(); float beginY = e1.getY(); float endY = e2.getY(); float downX = e1.getRawX(); Display disp = mContext.getWindowManager().getDefaultDisplay(); int windowWidth = disp.getWidth(); int windowHeight = disp.getHeight(); if (Math.abs(endX - beginX) < Math.abs(beginY - endY)) { //上下滑動 if (beginY - endY > minMove && Math.abs(distanceY) > minVelocity) { //上滑 if (beginX > windowWidth * 3.0 / 4.0) {// 右邊滑動 屏幕3/4 onBrightnessSlide((beginY - endY) / windowHeight); } else if (beginX < windowWidth * 1.0 / 4.0) {// 左邊滑動 屏幕1/4 onVolumeSlide((beginY - endY) / windowHeight); } } else if (endY - beginY > minMove && Math.abs(distanceY) > minVelocity) { //下滑 if (beginX > windowWidth * 3.0 / 4.0) {// 右邊滑動 屏幕3/4 onBrightnessSlide((beginY - endY) / windowHeight); } else if (beginX < windowWidth * 1.0 / 4.0) {// 左邊滑動 屏幕1/4 onVolumeSlide((beginY - endY) / windowHeight); } } } else { if (Math.abs(distanceX) > Math.abs(distanceY)) {// 橫向移動大于縱向移動 if (touchStatusView.getVisibility() != View.VISIBLE) { touchStatusView.setVisibility(View.VISIBLE); } if (endX - beginX > minMove && Math.abs(distanceX) > minVelocity) { position += touchStep; if (position > duration) { position = duration; } touchPosition = position; touchStatusImg.setImageResource(R.mipmap.right); int[] time = getMinuteAndSecond(position); touchStatusTime.setText(String.format("%02d:%02d/%s", time[0], time[1], formatTotalTime)); } else if (beginX - endX > minMove && Math.abs(distanceX) > minVelocity) { position -= touchStep; if (position < 0) { position = 0; } touchPosition = position; touchStatusImg.setImageResource(R.mipmap.left); int[] time = getMinuteAndSecond(position); touchStatusTime.setText(String.format("%02d:%02d/%s", time[0], time[1], formatTotalTime)); } } } return super.onScroll(e1, e2, distanceX, distanceY); } } private void initView() { View view = LayoutInflater.from(context).inflate(R.layout.common_video_view, null); viewBox = (FrameLayout) view.findViewById(R.id.viewBox); videoView = (CommonHitVideoView) view.findViewById(R.id.videoView); videoControllerLayout = (RelativeLayout) view.findViewById(R.id.rl_video_control); touchStatusView = (LinearLayout) view.findViewById(R.id.touch_view); touchStatusImg = (ImageView) view.findViewById(R.id.touchStatusImg); touchStatusTime = (TextView) view.findViewById(R.id.touch_time); videoCurTimeText = (TextView) view.findViewById(R.id.tv_current_time); videoTotalTimeText = (TextView) view.findViewById(R.id.tv_total_time); videoSeekBar = (SeekBar) view.findViewById(R.id.seekBar); videoPauseImg = (ImageView) view.findViewById(R.id.videoPauseImg); progressBar = (ProgressBar) view.findViewById(R.id.load_progress); brightSeekBar = (VerticalSeekBar) view.findViewById(R.id.pb_bright); volumeSeekBar = (VerticalSeekBar) view.findViewById(R.id.pb_volume); videoSeekBar.setOnSeekBarChangeListener(this); videoView.setOnPreparedListener(this); videoView.setOnCompletionListener(this); //注冊在設置或播放過程中發生錯誤時調用的回調函數。如果未指定回調函數,或回調函數返回false,VideoView 會通知用戶發生了錯誤。 videoView.setOnErrorListener(this); viewBox.setOnTouchListener(this); viewBox.setOnClickListener(this); addView(view); } @Override public void onPrepared(MediaPlayer mp) { duration = videoView.getDuration(); int[] time = getMinuteAndSecond(duration); videoTotalTimeText.setText(String.format("%02d:%02d", time[0], time[1])); formatTotalTime = String.format("%02d:%02d", time[0], time[1]); videoSeekBar.setMax(duration); progressBar.setVisibility(View.GONE); mp.start(); videoSeekBar.setEnabled(true); videoPauseImg.setImageResource(R.mipmap.play_video); refershCurrentDurationSeekbar(); } @Override public void onCompletion(MediaPlayer mp) { videoView.seekTo(0); videoSeekBar.setProgress(0); videoPauseImg.setImageResource(R.mipmap.stop_video); } @Override public boolean onError(MediaPlayer mp, int what, int extra) { return false; } @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: if (!videoView.isPlaying()) { return false; } float downX = event.getRawX(); break; case MotionEvent.ACTION_UP: if (touchPosition != -1) { videoView.seekTo(touchPosition); touchStatusView.setVisibility(View.GONE); touchPosition = -1; if (videoControllerShow) { return true; } } break; } return mGestureDetector.onTouchEvent(event); } Timer mTimer; TimerTask mTimerTask; /** * 設置播放時間 */ private void refershCurrentDurationSeekbar() { mTimer = new Timer(); mTimerTask = new TimerTask() { @Override public void run() { mContext.runOnUiThread(new Runnable() { @Override public void run() { videoCurTimeText.setText(DateFormatUtils.generateTime(videoView.getCurrentPosition()) + ""); } }); } }; mTimer.schedule(mTimerTask, 0, 500); } private int[] getMinuteAndSecond(int mils) { mils /= 1000; int[] time = new int[2]; time[0] = mils / 60; time[1] = mils % 60; return time; } @Override public void onClick(View v) { switch (v.getId()) { case R.id.videoPauseImg: if (videoView.isPlaying()) { videoView.pause(); videoPauseImg.setImageResource(R.mipmap.stop_video); videoPauseImg.setVisibility(View.VISIBLE); } else { videoView.start(); videoPauseImg.setImageResource(R.mipmap.play_video); videoPauseImg.setVisibility(View.INVISIBLE); } break; case R.id.viewBox: float curY = videoControllerLayout.getY(); if (!animation && videoControllerShow) { animation = true; ObjectAnimator animator = ObjectAnimator.ofFloat(videoControllerLayout, "y", curY, curY + videoControllerLayout.getHeight()); animator.setDuration(200); animator.start(); animator.addListener(this); } else if (!animation) { animation = true; ObjectAnimator animator = ObjectAnimator.ofFloat(videoControllerLayout, "y", curY, curY - videoControllerLayout.getHeight()); animator.setDuration(200); animator.start(); animator.addListener(this); } break; } } @Override public void onAnimationStart(Animator animation) { } @Override public void onAnimationEnd(Animator animation) { this.animation = false; this.videoControllerShow = !this.videoControllerShow; } @Override public void onAnimationCancel(Animator animation) { } @Override public void onAnimationRepeat(Animator animation) { } @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { int[] time = getMinuteAndSecond(progress); videoCurTimeText.setText(String.format("%02d:%02d", time[0], time[1])); } @Override public void onStartTrackingTouch(SeekBar seekBar) { videoView.pause(); } @Override public void onStopTrackingTouch(SeekBar seekBar) { videoView.seekTo(videoSeekBar.getProgress()); videoView.start(); videoPauseImg.setVisibility(View.INVISIBLE); videoPauseImg.setImageResource(R.mipmap.play_video); } /** * 滑動改變亮度 * * @param percent */ private void onBrightnessSlide(float percent) { if (mBrightness < 0) { mBrightness = ScreenBrightnessUtil.getSystemBrightness(context) / 255.0F; if (mBrightness <= 0.00f) mBrightness = 0.50f; if (mBrightness < 0.01f) mBrightness = 0.01f; } float finalScreenBrightness = mBrightness + percent; if (finalScreenBrightness > 1.0f) finalScreenBrightness = 1.0f; else if (finalScreenBrightness < 0.01f) finalScreenBrightness = 0.01f; float bright = finalScreenBrightness * 100; int progress = (int) bright; brightSeekBar.setProgress(progress); ScreenBrightnessUtil.setBrightness(mContext, (int) (finalScreenBrightness * 255)); } /** * 滑動改變聲音大小 * * @param percent */ private void onVolumeSlide(float percent) { if (mVolume == -1) { mVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC); if (mVolume < 0) mVolume = 0; } int index = (int) (percent * mMaxVolume) + mVolume; if (index > mMaxVolume) index = mMaxVolume; else if (index < 0) index = 0; double volume = ((double) index / mMaxVolume) * 100; int progress = (int) volume; volumeSeekBar.setProgress(progress); // 變更聲音 mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, index, 0); } /** * 設置activity的樣式 */ private void setActivityTheme() { if (Build.VERSION.SDK_INT >= 21) { View decorView = mContext.getWindow().getDecorView(); int option = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE; decorView.setSystemUiVisibility(option); mContext.getWindow().setNavigationBarColor(Color.TRANSPARENT); mContext.getWindow().setStatusBarColor(Color.TRANSPARENT); } else { View decorView = mContext.getWindow().getDecorView(); int option = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE; decorView.setSystemUiVisibility(option); } } public void stopVideoVide() { if (videoView.isPlaying()) { videoView.pause(); videoPauseImg.setImageResource(R.mipmap.stop_video); } }}

/** * Created by RonQian on 2017/2/22 15:02 *

* 詳情描述: 自定義播放操作 */

public class CommonHitVideoView extends VideoView { private static final float ORIENTATION_PORTRAIT_HEIGHT_SCALE = 0.56F;//視頻寬高比為16:9 private int videoHeight = 0; private int videoWidth = 0;

public int getVideoHeight() { return videoHeight;}public void setVideoHeight(int videoHeight) { this.videoHeight = videoHeight;}public int getVideoWidth() { return videoWidth;}public void setVideoWidth(int videoWidth) { this.videoWidth = videoWidth;}public void resizeView(int videoWidth, int videoHeight) { this.videoWidth = videoWidth; this.videoHeight = videoHeight; measure(videoWidth, videoHeight);}public CommonHitVideoView(Context context) { this(context, null);}public CommonHitVideoView(Context context, AttributeSet attrs) { this(context, attrs, 0);}public CommonHitVideoView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr);}@Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int width = getDefaultSize(0, widthMeasureSpec); int height = getDefaultSize(0, heightMeasureSpec); this.getHolder().setFixedSize(width, height); setMeasuredDimension(width, height); setMeasuredDimension(width, height);}

}

/** * Created by RonQian on 2017/2/21 10:46 * <p> * 詳情描述:垂直seekbar */public class VerticalSeekBar extends SeekBar { private boolean mIsDragging; private float mTouchDownY; private int mScaledTouchSlop; private boolean isInScrollingContainer = false; public boolean isInScrollingContainer() { return isInScrollingContainer; } public void setInScrollingContainer(boolean isInScrollingContainer) { this.isInScrollingContainer = isInScrollingContainer; } /** * On touch, this offset plus the scaled value from the position of the * touch will form the progress value. Usually 0. */ float mTouchProgressOffset; public VerticalSeekBar(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); mScaledTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop(); } public VerticalSeekBar(Context context, AttributeSet attrs) { super(context, attrs); } public VerticalSeekBar(Context context) { super(context); } @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { super.onSizeChanged(h, w, oldh, oldw); } @Override protected synchronized void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(heightMeasureSpec, widthMeasureSpec); setMeasuredDimension(getMeasuredHeight(), getMeasuredWidth()); } @Override protected synchronized void onDraw(Canvas canvas) { canvas.rotate(-90); canvas.translate(-getHeight(), 0); super.onDraw(canvas); } @Override public boolean onTouchEvent(MotionEvent event) { if (!isEnabled()) { return false; } switch (event.getAction()) { case MotionEvent.ACTION_DOWN: if (isInScrollingContainer()) { mTouchDownY = event.getY(); } else { setPressed(true); invalidate(); onStartTrackingTouch(); trackTouchEvent(event); attemptClaimDrag(); onSizeChanged(getWidth(), getHeight(), 0, 0); } break; case MotionEvent.ACTION_MOVE: if (mIsDragging) { trackTouchEvent(event); } else { final float y = event.getY(); if (Math.abs(y - mTouchDownY) > mScaledTouchSlop) { setPressed(true); invalidate(); onStartTrackingTouch(); trackTouchEvent(event); attemptClaimDrag(); } } onSizeChanged(getWidth(), getHeight(), 0, 0); break; case MotionEvent.ACTION_UP: if (mIsDragging) { trackTouchEvent(event); onStopTrackingTouch(); setPressed(false); } else { // Touch up when we never crossed the touch slop threshold // should // be interpreted as a tap-seek to that location. onStartTrackingTouch(); trackTouchEvent(event); onStopTrackingTouch(); } onSizeChanged(getWidth(), getHeight(), 0, 0); // ProgressBar doesn't know to repaint the thumb drawable // in its inactive state when the touch stops (because the // value has not apparently changed) invalidate(); break; } return true; } private void trackTouchEvent(MotionEvent event) { final int height = getHeight(); final int top = getPaddingTop(); final int bottom = getPaddingBottom(); final int available = height - top - bottom; int y = (int) event.getY(); float scale; float progress = 0; // 下面是最小值 if (y > height - bottom) { scale = 0.0f; } else if (y < top) { scale = 1.0f; } else { scale = (float) (available - y + top) / (float) available; progress = mTouchProgressOffset; } final int max = getMax(); progress += scale * max; setProgress((int) progress); } /** * This is called when the user has started touching this widget. */ void onStartTrackingTouch() { mIsDragging = false; } /** * This is called when the user either releases his touch or the touch is * canceled. */ void onStopTrackingTouch() { mIsDragging = false; } private void attemptClaimDrag() { ViewParent p = getParent(); if (p != null) { p.requestDisallowInterceptTouchEvent(true); } } @Override public synchronized void setProgress(int progress) { super.setProgress(progress); onSizeChanged(getWidth(), getHeight(), 0, 0); }}

未完,待續…


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲综合最新在线| 亚洲欧美激情一区| 2018日韩中文字幕| 欧美性xxxxxxxxx| 久色乳综合思思在线视频| 一本色道久久综合狠狠躁篇的优点| 日韩www在线| 国产成人精品日本亚洲| 久久久最新网址| 91精品国产高清久久久久久| 亚洲欧美日韩另类| 国产在线999| 国产亚洲一区精品| 国产精品高清在线观看| 亚洲电影免费观看| 日韩精品中文字幕在线| 欧美日本黄视频| 日韩欧美中文第一页| 国产午夜精品一区理论片飘花| 青青在线视频一区二区三区| 国产精品美女呻吟| 久久天天躁狠狠躁夜夜爽蜜月| 欧美电影在线观看高清| 伊人久久久久久久久久| 国产精品久久久亚洲| 国产欧美日韩精品专区| 亚洲一区二区三区四区在线播放| 91亚洲一区精品| 最新中文字幕亚洲| 欧美激情在线观看| 中文字幕亚洲无线码a| 亚洲人免费视频| 日本不卡免费高清视频| 在线观看日韩专区| 最近2019年日本中文免费字幕| 国产欧美一区二区三区在线看| 97在线精品国自产拍中文| 国产精品ⅴa在线观看h| 最近2019中文免费高清视频观看www99| 九九九热精品免费视频观看网站| 最新国产精品亚洲| 久久天天躁狠狠躁夜夜躁| 国产成人鲁鲁免费视频a| 久久久中文字幕| 日本视频久久久| 亚洲精品乱码久久久久久金桔影视| 国产97在线亚洲| 久久久久久久网站| 亚洲少妇激情视频| 亚洲在线免费看| 7m第一福利500精品视频| 亚洲激情视频在线| 欧美日韩xxxxx| 亚洲深夜福利视频| 久久青草精品视频免费观看| 久久精品免费播放| 日韩av成人在线观看| 欧美国产亚洲精品久久久8v| 久久久噜噜噜久久久| 奇米4444一区二区三区| 亚洲一二三在线| 精品久久久久久久久久| 国模视频一区二区| 欧美成人免费在线视频| 精品一区二区三区四区| 亚洲欧美日韩天堂一区二区| 欧美小视频在线| 亚洲2020天天堂在线观看| 日韩欧美亚洲成人| 国色天香2019中文字幕在线观看| 国产综合久久久久| 欧美日韩在线第一页| 欧美日韩国产精品| 亚洲天堂第一页| 国产日韩欧美成人| 97人人做人人爱| 91av视频导航| 日韩成人免费视频| 欧美一级在线播放| 久久综合久久88| 久久久之久亚州精品露出| 亚洲成人久久电影| 国产精品免费网站| 久久激情视频免费观看| 2025国产精品视频| 日韩精品在线免费观看| 国产噜噜噜噜久久久久久久久| 国产美女久久精品香蕉69| 欧美精品午夜视频| 97成人精品视频在线观看| 欧美黑人性生活视频| 九九久久综合网站| 亚洲免费人成在线视频观看| 激情懂色av一区av二区av| 亚洲欧美资源在线| 国产精品久久久亚洲| www.99久久热国产日韩欧美.com| 国产精品久久久久久av下载红粉| 色爱av美腿丝袜综合粉嫩av| 欧美精品在线免费| 国产精品毛片a∨一区二区三区|国| 欧美电影免费观看高清完整| 久久久伊人欧美| 亚洲a一级视频| 欧美日本精品在线| 国产视频久久久久久久| 国产精品亚洲网站| 欧美色欧美亚洲高清在线视频| 久久久久久久久久久网站| 午夜精品久久久久久久久久久久| 久久视频在线观看免费| 三级精品视频久久久久| 91免费人成网站在线观看18| 国产999精品| 欧美性高跟鞋xxxxhd| 亚洲色图18p| 尤物yw午夜国产精品视频明星| 久久91精品国产91久久久| 中文字幕亚洲精品| 97不卡在线视频| 黑丝美女久久久| 97成人超碰免| 少妇高潮久久久久久潘金莲| 日韩精品免费在线| 久久91精品国产91久久久| 国产欧美一区二区三区四区| 日韩电影在线观看永久视频免费网站| 午夜精品一区二区三区av| 色噜噜久久综合伊人一本| 尤物九九久久国产精品的特点| 亚洲视频电影图片偷拍一区| 久久99热精品这里久久精品| 亚洲一区美女视频在线观看免费| 91sa在线看| 欧美日韩国产在线| 日韩av免费看网站| 成人在线激情视频| 日韩美女毛茸茸| 久久99久国产精品黄毛片入口| 亚洲a级在线观看| 国产高清视频一区三区| 97欧美精品一区二区三区| 亚洲日本成人网| 国产亚洲欧美另类中文| 国产欧美日韩丝袜精品一区| 最新69国产成人精品视频免费| 亚洲欧美精品一区| 日韩中文字幕在线| 精品久久久中文| 日韩av网站大全| 亚洲精品不卡在线| 久久精品国产亚洲精品2020| 国产精品日韩av| 亚洲国产古装精品网站| 97视频在线观看亚洲| 在线成人免费网站| 日韩精品在线观看一区二区| 亚洲国产精品va在线| 国产亚洲欧美日韩一区二区| 97在线视频免费观看| 55夜色66夜色国产精品视频| 91av福利视频| 国产91精品高潮白浆喷水| 亚洲欧美日韩国产中文|