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

首頁(yè) > 系統(tǒng) > Android > 正文

Android貝塞爾曲線實(shí)現(xiàn)消息拖拽消失

2019-10-21 21:26:31
字體:
供稿:網(wǎng)友

寫在前頭

寫消息拖拽效果的文章不少,但是大部分都把自定義View寫死了,我們要實(shí)現(xiàn)的是傳入一個(gè)View,每個(gè)View都可以實(shí)現(xiàn)拖拽消失爆炸的效果,當(dāng)然我也是站在巨人的肩膀上來學(xué)習(xí)的。但個(gè)人覺得程序員本就應(yīng)該敢于學(xué)習(xí)和借鑒。

源碼地址:源碼Github地址

效果圖

Android,貝塞爾曲線,消息拖拽

 分析(用到的知識(shí)點(diǎn)): 

(1)ValueAnimator (數(shù)值生成器) 用于生成數(shù)值,可以設(shè)置差值器來改變數(shù)字的變化幅度。

(2)ObjectAnimator (動(dòng)畫生成器) 用于生成各種屬性,布局動(dòng)畫,同樣也可以設(shè)置差值器來改變效果。

(3)貝塞爾一階曲線

(4)自定義View的基礎(chǔ)知識(shí)

(5)WindowManager 使view拖拽能顯示在整個(gè)屏幕的任何地方,而不是局限于父布局內(nèi)

具體實(shí)現(xiàn)方法

一、首先我們要實(shí)現(xiàn)基礎(chǔ)效果

基礎(chǔ)效果是點(diǎn)擊屏幕任意一點(diǎn)能出現(xiàn)消息拖拽的效果,但是此時(shí)我們不用管我們拖動(dòng)的View,只需要完成大致模型。該部分的難點(diǎn)在于貝塞爾一階曲線的怎么實(shí)現(xiàn)。

基礎(chǔ)效果圖

Android,貝塞爾曲線,消息拖拽

 分析:

(1)點(diǎn)擊任意一點(diǎn)畫出兩個(gè)圓,和一個(gè)有貝塞爾曲線組成的path路徑

(2)隨著拖動(dòng)距離的增加原點(diǎn)的圓半徑逐漸縮小,當(dāng)距離達(dá)到一定大以后原點(diǎn)的圓和貝塞爾曲線組成的path不再顯示

貝塞爾曲線的畫法

Android,貝塞爾曲線,消息拖拽

首先我們需要求出角a的大小,根據(jù)角a來求到A,B,C,D的坐標(biāo)位子,然后求到控制點(diǎn)E點(diǎn)的坐標(biāo),通過Path.quadTo()方法來連接A,B和C,D兩條貝塞爾曲線。

各點(diǎn)坐標(biāo)

A(c1.x+sina*c1半徑,c1.y-cina*c1半徑)

B(c2.x+sina*c2半徑,c2.y-cina*c2半徑)

C(c2.x-sina*c1半徑,c2.y+cina*c1半徑)

D(c1.x-sina*c2半徑,c1.y+cina*c2半徑)

E ((c1.x+c2.x)/2,(c1.y+c2.y)/2)

貝塞爾曲線的path代碼

private Path getBezeierPath() {  double distance = getDistance(mBigCirclePoint,mLittleCirclePoint);   mLittleCircleRadius = (int) (mLittleCircleRadiusMax - distance / 10);  if (mLittleCircleRadius < mLittleCircleRadiusMin) {   // 超過一定距離 貝塞爾和固定圓都不要畫了   return null;  }   Path bezeierPath = new Path();   // 求角 a  // 求斜率  float dy = (mBigCirclePoint.y-mLittleCirclePoint.y);  float dx = (mBigCirclePoint.x-mLittleCirclePoint.x);  float tanA = dy/dx;  // 求角a  double arcTanA = Math.atan(tanA);   // A  float Ax = (float) (mLittleCirclePoint.x + mLittleCircleRadius*Math.sin(arcTanA));  float Ay = (float) (mLittleCirclePoint.y - mLittleCircleRadius*Math.cos(arcTanA));   // B  float Bx = (float) (mBigCirclePoint.x + mBigCircleRadius*Math.sin(arcTanA));  float By = (float) (mBigCirclePoint.y - mBigCircleRadius*Math.cos(arcTanA));   // C  float Cx = (float) (mBigCirclePoint.x - mBigCircleRadius*Math.sin(arcTanA));  float Cy = (float) (mBigCirclePoint.y + mBigCircleRadius*Math.cos(arcTanA));   // D  float Dx = (float) (mLittleCirclePoint.x - mLittleCircleRadius*Math.sin(arcTanA));  float Dy = (float) (mLittleCirclePoint.y + mLittleCircleRadius*Math.cos(arcTanA));     // 拼裝 貝塞爾的曲線路徑  bezeierPath.moveTo(Ax,Ay); // 移動(dòng)  // 兩個(gè)點(diǎn)  PointF controlPoint = getControlPoint();  // 畫了第一條 第一個(gè)點(diǎn)(控制點(diǎn),兩個(gè)圓心的中心點(diǎn)),終點(diǎn)  bezeierPath.quadTo(controlPoint.x,controlPoint.y,Bx,By);   // 畫第二條  bezeierPath.lineTo(Cx,Cy); // 鏈接到  bezeierPath.quadTo(controlPoint.x,controlPoint.y,Dx,Dy);  bezeierPath.close();   return bezeierPath; }

 二、完善代碼

 這部分我們需要完善所有代碼,實(shí)現(xiàn)代碼的分離,使得所用View都能被拖動(dòng),且需要?jiǎng)?chuàng)建一個(gè)監(jiān)聽器來監(jiān)聽View是否拖動(dòng)結(jié)束了,結(jié)束后調(diào)用回調(diào)方法以便需要做其他處理。

需要完成的功能:

(1)將傳入的View畫出來

(2)在手指抬起時(shí)判斷是爆炸還是回彈

(3)完成回彈和爆炸的代碼部分

(4)回彈或者爆炸結(jié)束后調(diào)用回調(diào)通知?jiǎng)赢嫿Y(jié)束

(5)使用WindowManager把自定義拖拽View加進(jìn)去,隱藏原來得View實(shí)現(xiàn)View在任意地方拖動(dòng)

完整代碼部分

(1)自定義View的代碼

public class MsgDrafitingView extends View{  private PointF mLittleCirclePoint; private PointF mBigCirclePoint; private Paint mPaint; //大圓半徑 private int mBigCircleRadius = 10; //小圓半徑 private int mLittleCircleRadiusMax = 10; private int mLittleCircleRadiusMin = 2; private int mLittleCircleRadius; private Bitmap dragBitmap; private OnToucnUpListener mOnToucnUpListener;   public MsgDrafitingView(Context context) {  this(context,null); }  public MsgDrafitingView(Context context, @Nullable AttributeSet attrs) {  this(context, attrs,0); }  public MsgDrafitingView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {  super(context, attrs, defStyleAttr);  mBigCircleRadius = dip2px(mBigCircleRadius);  mLittleCircleRadiusMax = dip2px(mLittleCircleRadiusMax);  mLittleCircleRadiusMin = dip2px(mLittleCircleRadiusMin);  mPaint = new Paint();  mPaint.setColor(Color.RED);  mPaint.setAntiAlias(true);  mPaint.setDither(true); }  private int dip2px(int dip) {  return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,dip,getResources().getDisplayMetrics()); }  @Override protected void onDraw(Canvas canvas) {  if (mBigCirclePoint == null || mLittleCirclePoint == null) {   return;  }  //畫大圓  canvas.drawCircle(mBigCirclePoint.x, mBigCirclePoint.y, mBigCircleRadius, mPaint);  //獲得貝塞爾路徑  Path bezeierPath = getBezeierPath();  if (bezeierPath!=null) {   // 小到一定層度就不見了(不畫了)   canvas.drawCircle(mLittleCirclePoint.x, mLittleCirclePoint.y, mLittleCircleRadius, mPaint);   // 畫貝塞爾曲線   canvas.drawPath(bezeierPath, mPaint);  }  // 畫圖片  if (dragBitmap != null) {   canvas.drawBitmap(dragBitmap, mBigCirclePoint.x - dragBitmap.getWidth() / 2,     mBigCirclePoint.y - dragBitmap.getHeight() / 2, null);  } }  private Path getBezeierPath() {  double distance = getDistance(mBigCirclePoint,mLittleCirclePoint);   mLittleCircleRadius = (int) (mLittleCircleRadiusMax - distance / 10);  if (mLittleCircleRadius < mLittleCircleRadiusMin) {   // 超過一定距離 貝塞爾和固定圓都不要畫了   return null;  }   Path bezeierPath = new Path();   // 求角 a  // 求斜率  float dy = (mBigCirclePoint.y-mLittleCirclePoint.y);  float dx = (mBigCirclePoint.x-mLittleCirclePoint.x);  float tanA = dy/dx;  // 求角a  double arcTanA = Math.atan(tanA);   // A  float Ax = (float) (mLittleCirclePoint.x + mLittleCircleRadius*Math.sin(arcTanA));  float Ay = (float) (mLittleCirclePoint.y - mLittleCircleRadius*Math.cos(arcTanA));   // B  float Bx = (float) (mBigCirclePoint.x + mBigCircleRadius*Math.sin(arcTanA));  float By = (float) (mBigCirclePoint.y - mBigCircleRadius*Math.cos(arcTanA));   // C  float Cx = (float) (mBigCirclePoint.x - mBigCircleRadius*Math.sin(arcTanA));  float Cy = (float) (mBigCirclePoint.y + mBigCircleRadius*Math.cos(arcTanA));   // D  float Dx = (float) (mLittleCirclePoint.x - mLittleCircleRadius*Math.sin(arcTanA));  float Dy = (float) (mLittleCirclePoint.y + mLittleCircleRadius*Math.cos(arcTanA));     // 拼裝 貝塞爾的曲線路徑  bezeierPath.moveTo(Ax,Ay); // 移動(dòng)  // 兩個(gè)點(diǎn)  PointF controlPoint = getControlPoint();  // 畫了第一條 第一個(gè)點(diǎn)(控制點(diǎn),兩個(gè)圓心的中心點(diǎn)),終點(diǎn)  bezeierPath.quadTo(controlPoint.x,controlPoint.y,Bx,By);   // 畫第二條  bezeierPath.lineTo(Cx,Cy); // 鏈接到  bezeierPath.quadTo(controlPoint.x,controlPoint.y,Dx,Dy);  bezeierPath.close();   return bezeierPath; } /**  * 獲得控制點(diǎn)距離  */ public PointF getControlPoint() {  return new PointF((mLittleCirclePoint.x+mBigCirclePoint.x)/2,(mLittleCirclePoint.y+mBigCirclePoint.y)/2); }  /**  * 獲得兩點(diǎn)之間的距離  */ private double getDistance(PointF point1, PointF point2) {  return Math.sqrt((point1.x - point2.x) * (point1.x - point2.x) + (point1.y - point2.y) * (point1.y - point2.y)); }  /**  * 綁定View  */ public static void attach(View view, MsgDrafitingListener.BubbleDisappearListener disappearListener) {  view.setOnTouchListener(new MsgDrafitingListener(view.getContext(),disappearListener)); }  public void initPoint(float x, float y) {  mBigCirclePoint = new PointF(x,y);  mLittleCirclePoint = new PointF(x,y); }  public void updatePoint(float x,float y) {  mBigCirclePoint.x = x;  mBigCirclePoint.y = y;  invalidate(); }  public void setDragBitmap(Bitmap dragBitmap) {  this.dragBitmap = dragBitmap; }  public void setOnToucnUpListener(OnToucnUpListener listener) {  mOnToucnUpListener = listener; }  public interface OnToucnUpListener {  // 還原  void restore();  // 消失爆炸  void dismiss(PointF pointF); }  /**  * 處理手指抬起后的操作  */ public void OnTouchUp() {  if (mLittleCircleRadius > mLittleCircleRadiusMin) {   // 回彈 ValueAnimator 值變化的動(dòng)畫 0 變化到 1   ValueAnimator animator = ObjectAnimator.ofFloat(1);   animator.setDuration(250);   final PointF start = new PointF(mBigCirclePoint.x, mBigCirclePoint.y);   final PointF end = new PointF(mLittleCirclePoint.x, mLittleCirclePoint.y);   animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {    @Override    public void onAnimationUpdate(ValueAnimator animation) {     float percent = (float) animation.getAnimatedValue();// 0 - 1     PointF pointF = Utils.getPointByPercent(start, end, percent);     //更新位子     updatePoint(pointF.x, pointF.y);    }   });   // 設(shè)置一個(gè)差值器 在結(jié)束的時(shí)候回彈   animator.setInterpolator(new OvershootInterpolator(3f));   animator.start();   // 還要通知 TouchListener   animator.addListener(new AnimatorListenerAdapter() {    @Override    public void onAnimationEnd(Animator animation) {     if(mOnToucnUpListener != null){      mOnToucnUpListener.restore();     }    }   });  } else {   // 爆炸   if(mOnToucnUpListener != null){    mOnToucnUpListener.dismiss(mBigCirclePoint);   }  } }}

 (2)自定義OnTouchListenner的代碼

public class MsgDrafitingListener implements View.OnTouchListener {  private WindowManager mWindowManager; private WindowManager.LayoutParams params; private MsgDrafitingView mMsgDrafitingView; private Context context; // 爆炸動(dòng)畫 private FrameLayout mBombFrame; private ImageView mBombImage; private BubbleDisappearListener mDisappearListener;  public MsgDrafitingListener(Context context,BubbleDisappearListener disappearListener) {  mWindowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);  params = new WindowManager.LayoutParams();  mMsgDrafitingView = new MsgDrafitingView(context);  //背景透明  params.format = PixelFormat.TRANSPARENT;  this.context = context;   mBombFrame = new FrameLayout(context);  mBombImage = new ImageView(context);  mBombImage.setLayoutParams(new FrameLayout.LayoutParams(Utils.dip2px(30,context),    Utils.dip2px(30,context)));  mBombFrame.addView(mBombImage);  this.mDisappearListener = disappearListener; }   @Override public boolean onTouch(final View view, MotionEvent motionEvent) {   switch (motionEvent.getAction())  {   case MotionEvent.ACTION_DOWN:    //隱藏自己    view.setVisibility(View.INVISIBLE);    mWindowManager.addView(mMsgDrafitingView,params);    int[] location = new int[2];    view.getLocationOnScreen(location);    Bitmap bitmap = getBitmapByView(view);    //y軸需要減去狀態(tài)欄的高度    mMsgDrafitingView.initPoint(location[0] + view.getWidth() / 2,      location[1]+view.getHeight()/2 -Utils.getStatusBarHeight(context));    // 給消息拖拽設(shè)置一個(gè)Bitmap    mMsgDrafitingView.setDragBitmap(bitmap);    //設(shè)置OnTouchUpListener    mMsgDrafitingView.setOnToucnUpListener(new MsgDrafitingView.OnToucnUpListener() {     @Override     public void restore() {      //還原位子      // 把消息的View移除      mWindowManager.removeView(mMsgDrafitingView);      // 把原來的View顯示      view.setVisibility(View.VISIBLE);     }      @Override     public void dismiss(PointF pointF) {      //爆炸效果      // 要去執(zhí)行爆炸動(dòng)畫 (幀動(dòng)畫)      //移除拖拽的view      mWindowManager.removeView(mMsgDrafitingView);      // 要在 mWindowManager 添加一個(gè)爆炸動(dòng)畫      mWindowManager.addView(mBombFrame,params);      mBombImage.setBackgroundResource(R.drawable.anim_bubble_pop);       AnimationDrawable drawable = (AnimationDrawable) mBombImage.getBackground();      mBombImage.setX(pointF.x-drawable.getIntrinsicWidth()/2);      mBombImage.setY(pointF.y-drawable.getIntrinsicHeight()/2);      drawable.start();      // 等它執(zhí)行完之后我要移除掉這個(gè) 爆炸動(dòng)畫也就是 mBombFrame      mBombImage.postDelayed(new Runnable() {       @Override       public void run() {        mWindowManager.removeView(mBombFrame);        // 通知一下外面該消失        if(mDisappearListener != null){         mDisappearListener.dismiss(view);        }       }      },getAnimationDrawableTime(drawable));     }    });    break;   case MotionEvent.ACTION_MOVE:    mMsgDrafitingView.updatePoint(motionEvent.getRawX(),      motionEvent.getRawY() - Utils.getStatusBarHeight(context));    break;   case MotionEvent.ACTION_UP:    mMsgDrafitingView.OnTouchUp();    break;  }  return true; }  private Bitmap getBitmapByView(View view) {  view.buildDrawingCache();  Bitmap bitmap = view.getDrawingCache();  return bitmap; }   public interface BubbleDisappearListener {  void dismiss(View view); }  /**  * 獲取爆炸動(dòng)畫畫的時(shí)間  * @param drawable  * @return  */ private long getAnimationDrawableTime(AnimationDrawable drawable) {  int numberOfFrames = drawable.getNumberOfFrames();  long time = 0;  for (int i=0;i<numberOfFrames;i++){   time += drawable.getDuration(i);  }  return time; }}

 (3)View的調(diào)用代碼

public class MsgDrafitingViewActivity extends AppCompatActivity{ private Button mButton; private TextView mText; @Override protected void onCreate(@Nullable Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  setContentView(R.layout.qq_msg_drafitingview_activity);  mButton = findViewById(R.id.mBtn);  mText = findViewById(R.id.mText);  MsgDrafitingView.attach(mButton, new MsgDrafitingListener.BubbleDisappearListener() {   @Override   public void dismiss(View view) {    }  });  MsgDrafitingView.attach(mText, new MsgDrafitingListener.BubbleDisappearListener() {   @Override   public void dismiss(View view) {    }  }); }}

源碼地址:源碼Github地址

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持VEVB武林網(wǎng)。


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到Android開發(fā)頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
久久99精品久久久久久久久久| 日韩天堂在线视频| 久久在精品线影院精品国产| 欧美性另类69xxxx| 啪啪av大全导航福利综合导航| 国产精品青青在线观看爽香蕉| 久草成人在线视频| 最近中文字幕免费mv视频多少集| 久久久国产精品午夜一区ai换脸| 完美搭档在线观看| 黄色三级免费电影| 欧美成人69av| 亚洲福利影院| 亚洲四虎影院| 欧美自拍偷拍网| 日韩乱码人妻无码中文字幕| 欧洲美女女同性互添| 色视频精品视频在线观看| 91精品国产91久久久久久不卡| 制服丝袜影音先锋| 99在线免费视频| 免费观看国产视频| 亚洲春色在线| 日韩欧美一区二区三区在线观看| 中文字幕在线观看你懂的| 国产亚洲精品拍拍拍拍拍| 亚洲精品乱码久久久久久日本蜜臀| 91中文字幕网| 欧美专区亚洲专区| 国产对白在线播放| 国产精品一区二| 公肉吊粗大爽色翁浪妇视频| 精品国产31久久久久久| 超碰在线caoporen| 日韩一级免费看| 久久久久久国产| 国产午夜麻豆影院在线观看| 亚洲国产精品免费视频| 成人天堂yy6080亚洲高清| 天堂在线亚洲| 欧美一区二区麻豆红桃视频| 国产精品永久入口久久久| 国产又大又黄又粗又爽| 国产9色视频| 性伦欧美刺激片在线观看| 性欧美亚洲xxxx乳在线观看| 麻豆视频网站在线观看| 亚洲熟妇无码另类久久久| 成人中文字幕电影| 国产精品二区在线观看| 日本欧美韩国一区三区| 欧美三级在线看| 一区二区三区四区在线播放| 捷克做爰xxxⅹ性视频| 欧美激情成人动漫| 久久久久久久久综合影视网| 轻轻草成人在线| 日韩 欧美一区二区三区| www欧美com| 亚洲国产日韩综合久久精品| 亚洲新声在线观看| 人妻一区二区视频| 国产精品久久久久久久| 91亚洲精品久久久| 久久av免费看| 成人直播大秀| 中文字幕视频在线免费欧美日韩综合在线看| 在线免费毛片| 91综合网人人| 性折磨bdsm欧美激情另类| 黄无遮挡免费网站| 三级网站免费观看| 欧美极品一区二区| 91欧美精品午夜性色福利在线| www.麻豆| 欧美日韩成人一区二区三区| 久久精品日产第一区二区三区精品版| 免费一级片91| 精品人妻无码一区二区三区换脸| 久久九九99| 亚洲人精品午夜在线观看| 国产性xxxx18免费观看视频| 日韩欧美国产免费播放| jizz国产视频| 欧美多人野外伦交| 九九久久国产| 天天综合天天添夜夜添狠狠添| 亚洲国产精品一区二区www在线| 亚洲欧美日韩国产成人| 性高爱久久久久久久久| 国内精品**久久毛片app| 狠狠爱成人网| 欧美午夜精品一区二区蜜桃| 91手机在线视频| 97婷婷大伊香蕉精品视频| 精品人妻少妇一区二区| 成人三级高清视频在线看| 国产又爽又黄又嫩又猛又粗| 超碰av在线免费观看| 成人免费观看www在线| 午夜精品久久久久久久四虎美女版| 两性午夜免费视频| 美女性感视频久久久| 羞羞答答国产精品www一本| www.亚洲自拍| 巨大荫蒂视频欧美另类大| 精品91久久久| 免费高清在线观看电视| 自拍偷拍一区二区三区| 91玉足脚交白嫩脚丫| av在线这里只有精品| 上原亚衣av一区二区三区| 欧区一欧区二欧区三| 韩国精品免费视频| 导航艳情国产电影| 国产免费永久在线观看| 久久久久久久九九九九| 漂亮人妻被中出中文字幕| 亚洲第一福利一区| 免费观看日韩毛片| 欧美xingq一区二区| 91成人精品观看| 免费观看的毛片| 日韩欧美一级在线| 日本中文字幕不卡免费| 极品美乳网红视频免费在线观看| 亚洲免费网址| av在线网页| 美女国内精品自产拍在线播放| 日韩免费精品| 一级在线观看视频| 国产福利一区二区三区视频| 91福利精品在线观看| 97人妻人人澡人人爽人人精品| 国产女主播在线写真| 亚洲精品电影院| 成人在线观看91| 污污网址在线观看| 久久97久久97精品免视看| 国产伦精品一区二区三区四区视频| 国产成人调教视频在线观看| 免费av手机在线观看| 小日子的在线观看免费第8集| 欧美无人高清视频在线观看| 国产偷窥女洗浴在线观看亚洲| 天天操夜夜添| 精品亚洲免费视频| 波多野结衣中文字幕在线播放| 欧美精品777| 狠狠做六月爱婷婷综合aⅴ| 国产成人精品一区二区无码呦| 少妇精品在线| 亚洲国产私拍精品国模在线观看| 中文字幕av一区二区三区免费看| 久久久久久久久91| 69av.com| 久久久久久久麻豆| 国产亚洲成人精品| 丝袜美腿小色网| 国产艳俗歌舞表演hd| 麻豆精品国产自产在线| 国产亚洲精品资源在线26u| 一个人看的www视频免费观看| 日韩视频在线你懂得| 亚洲av成人无码久久精品老人| 欧美视频精品全部免费观看| 亚洲一区二区在线免费观看视频| 久久久久久久久久久久久久一区| 国产chinese精品一区二区| 日本a级片免费| 国产精品美乳一区二区免费| 91大神在线播放精品| 青青一区二区| 久草视频这里只有精品| 国产亚洲精aa在线看| 亚洲的天堂在线中文字幕| 美女黄色网址| sihu影院永久在线影院| 又黄又爽毛片免费观看| www.色就是色| 欧美综合在线视频观看| 国产精品久久久久永久免费观看| 欧美 亚洲 另类 激情 另类| 少妇高潮流白浆| 国产日韩在线播放| 亚洲二区三区四区| 国产一二区在线观看| 日韩xxxxxxxxx| 成人在线短视频| 一级特黄性色生活片| 国产精品免费久久久久影院| 亚洲欧美aⅴ...| 台湾av在线二三区观看| 最近中文字幕免费视频| 黄色片av在线| 亚洲精品9999| 99视频精品全部免费在线| 136国产福利精品导航网址应用| 欧美人妻精品一区二区免费看| 成人在线视频免费| 亚洲激情中文在线| www.午夜| 中文字幕av一区二区三区谷原希美| 中文字幕在线视频久| 久久久久久18| 日本jizz中国| 国产欧美一区二区精品性色超碰| 1769国内精品视频在线播放| 色悠久久久久综合欧美99| 苍井空张开腿实干12次| 92国产精品久久久久首页| 亚洲国产人成综合网站| 最新理论片影院| 性xxxx18| 欧美激情网站在线观看| 精品在线视频一区二区三区| 亚洲激情第一页| 久久国产成人| 一区二区三区四区在线| 天天操天天干视频| 免费在线播放第一区高清av| 国产区在线观看| 五十路亲子中出在线观看| 中文国产字幕在线观看| 日韩三级视频| 亚洲精品日韩在线观看| 亚洲午夜激情影院| 亚洲色图美腿丝袜| 丰满岳乱妇一区二区三区| 成年人免费在线视频| 欧美成人精品一区二区| 亚洲一二三专区| 在线看三级网站视频| 久久精品免视看国产成人| 国产乱码精品一区二区三区日韩精品| 欧美性受xxxx黑人| 日韩中文字幕在线播放| 精品乱码一区内射人妻无码| 国产又色又爽又高潮免费| 涩涩av在线| 青青草原一区二区| 精品在线观看一区二区| 中文字幕欧美在线| 欧美电影一二区| 超碰96在线| 亚洲大片精品永久免费| 国产美女福利在线| 91 com成人网| 日韩精品aaa| 亚洲精品国产嫩草在线观看| 狠狠狠狠狠狠狠| 天堂网www天堂在线网| 久久久久久久久久婷婷| 亚洲av无码一区二区三区性色| 亚洲国产精品99久久| 欧美色图888| 日韩电影免费在线观看网站| 第四色中文综合网| 高清乱码毛片入口| 亚洲一区二区三区精品在线观看| 欧美福利小视频| 成年人免费在线视频| 亚洲最大的成人网| 影音先锋国产精品| 精品久久香蕉国产线看观看亚洲| 有码在线播放| 免费黄色小网站| 日本美女一区二区三区| 丁香婷婷综合激情| 首页综合国产亚洲丝袜| 高清无码一区二区在线观看吞精| 中文字幕一二三区在线观看| 天天操夜夜爽| 国产欧美一区二区三区在线老狼| 国产精品系列在线观看| 欧美性受xxxx狂喷水| 久久精品这里都是精品| 日韩欧美精品久久| 久久久久成人精品免费播放动漫| 91在线中字| 亚洲精品视频在线播放| 久久久免费精品视频| 亚洲成在人线免费| 亚洲一区二区三区四区五区六区| 国产一级淫片a视频免费观看| 国产精品一区二区亚洲| 中文字幕观看视频| 天天操人人爽| 看片网址国产福利av中文字幕| 国产不卡免费视频| 亚洲另类在线制服丝袜| 国产中文字幕91| 亚洲经典在线看| 黄页免费在线| 国产黄色一区| 天天干视频在线观看| 亚洲高清不卡在线| ...中文天堂在线一区| 少妇一级淫免费放| 精品sm在线观看| 高清不卡亚洲| 一级黄色录像免费看| 色偷偷亚洲男人天堂| 在线观看国产小视频| 波多野结衣 在线| 中文字幕在线亚洲| 国产精品美女主播| 全免费一级毛片免费看| 成人av网页| 岛国在线视频免费看| 秘密影院久久综合亚洲综合| eeuss影院在线观看| 国产又粗又长又大视频| 国产视频二区在线观看| 日韩三级电影网址| 久久亚洲综合国产精品99麻豆精品福利| 午夜久久久久久久久久久| 亚洲欧美专区| 国产肉丝袜一区二区| 女色窝人体色77777| 中文字幕无码毛片免费看| 亚洲福利合集| 日韩欧美一区二区三区久久婷婷| 欧美人与禽猛交乱配| 免费电影日韩网站| 美女一区二区在线观看| 日韩成人高清| 日韩一区二区三区在线免费观看|