精华内容
下载资源
问答
  • 仿iPhoneQQ气泡聊天样式。  
  • 该源码实现qq聊天应用的气泡对话框效果。并且气泡可以根据文字大小,以及输入的多少而自动改变高度,非常好用,喜欢的朋友可以下载学习看看。。
  • qq气泡实现

    2019-09-29 23:09:26
    使用贝塞尔曲线绘制qq气泡,整个动画过程可分为4个过程: 1、默认状态:此时显示一个气泡和一个消息框。 2、连接状态:一个固定气泡(大小随着拖拽的长度变化而变化),一个移动气泡和它之上的消息框。 3、...

    在这里插入图片描述

    使用贝塞尔曲线绘制qq气泡,整个动画过程可分为4个过程:

    1、默认状态:此时显示一个气泡和一个消息框。
    在这里插入图片描述

    2、连接状态:一个固定气泡(大小随着拖拽的长度变化而变化),一个移动气泡和它之上的消息框。
    在这里插入图片描述

    3、分离状态,此时固定气泡消失,只有移动气泡(和它的消息框)随手指的移动而移动。

    在这里插入图片描述

    4、消失状态:放开手指后气泡爆炸消失。

    在这里插入图片描述

    将整个过程分割为这几个步骤,再分别实现每个步骤,整个过程就完成了!

    首先是默认状态,就是一开始显示的状态。

    在这里插入图片描述这个很简单,覆写onDraw方法,只要在对应的位置使用Canvans对象“画”一个实心的圆,然后“画”文字即可。接着是连接状态的描绘。

    if(mBubbleState == BUBBLE_STATE_CONNECT){
                canvas.drawCircle(mFixedBubbleCenter.x,mFixedBubbleCenter.y,mFixedBubbleRadius,mBubblePaint);
                mBezierPath.reset();
                //画贝塞尔曲线
                //PE = p(y) - o(y)
                float PE = mMovedBubbleCenter.y - mFixedBubbleCenter.y;
                //OE = p(x) - o(x)
                float OE = mMovedBubbleCenter.x - mFixedBubbleCenter.x;
                float sinAngle = PE / mDist;
                float cosAngle = OE / mDist;
    
                //G
                float Gx = (mFixedBubbleCenter.x + mMovedBubbleCenter.x) / 2f;
                float Gy = (mFixedBubbleCenter.y + mMovedBubbleCenter.y) / 2f;
    
                //B
                float Bx = mMovedBubbleCenter.x + sinAngle * mMovedBubbleRadius;
                float By = mMovedBubbleCenter.y - cosAngle * mMovedBubbleRadius;
    
                //A
                float Ax = mFixedBubbleCenter.x + mFixedBubbleRadius * sinAngle;
                float Ay = mFixedBubbleCenter.y - mFixedBubbleRadius * cosAngle;
    
                //D
                float Dx = mFixedBubbleCenter.x - mFixedBubbleRadius * sinAngle;
                float Dy = mFixedBubbleCenter.y + mFixedBubbleRadius * cosAngle;
                //C
                float Cx = mMovedBubbleCenter.x - mMovedBubbleRadius * sinAngle;
                float Cy = mMovedBubbleCenter.y + mMovedBubbleRadius * cosAngle;
    
                mBezierPath.moveTo(Dx,Dy);
                mBezierPath.quadTo(Gx,Gy,Cx,Cy);
    
                mBezierPath.lineTo(Bx,By);
                mBezierPath.quadTo(Gx,Gy,Ax,Ay);
                mBezierPath.close();
                canvas.drawPath(mBezierPath,mBubblePaint);
            }
    

    首先“画”屏幕中心固定的小圆,接着就是2条贝塞尔曲线,通过下面这张图就可以很明显地看出如何运用贝塞尔曲线:

    在这里插入图片描述
    我们需要做的,就是“画”出AB、CD这2条二阶贝塞尔曲线。而ABCD这个不规则多边形,就是“气泡”,根据贝塞尔曲线的定义,可以发现,O点、P点为已知点,G点作为AB、CD这2条贝塞尔曲线的控制点,而A和B、C和D分别是AB、CD贝塞尔曲线的数据点。因此求出A、B、C、D、G5个点的坐标就可以画出这2条贝塞尔曲线了!

    关于坐标的求解,一个个来:
    G:坐标很简单,直接O点与P点的x,y相加除以2就可以算出来。
    ABCD点,根据高中的数学相关知识:

    PE = O的y坐标-P的y坐标
    OE = P的x坐标-O的x坐标

    sin∠POE = PE / OP
    cos∠POE = OE / OP

    A坐标:
    x = O的x坐标 - sin∠POE * 固定圆半径
    y = O的y坐标 - cos∠POE * 固定圆半径

    B坐标:
    x = P的x坐标 - sin∠POE * 动圆半径
    y = P的y坐标 - cos∠POE * 动圆半径

    C坐标:
    x = P的x坐标 + sin∠POE * 动圆半径
    y = P的y坐标 + cos∠POE * 动圆半径

    D坐标:
    x = O的x坐标 + sin∠POE * 固定圆半径
    y = O的y坐标 + cos∠POE * 固定圆半径

    接着通过Path类的quadTo画二阶贝塞尔曲线。

    	  mBezierPath.moveTo(Dx,Dy);
          mBezierPath.quadTo(Gx,Gy,Cx,Cy);
    
          mBezierPath.lineTo(Bx,By);
          mBezierPath.quadTo(Gx,Gy,Ax,Ay);
          mBezierPath.close();
          canvas.drawPath(mBezierPath,mBubblePaint);
    

    接着是气泡爆炸效果的绘制:
    在这里插入图片描述
    至此,onDraw方法覆写完成。

    接着覆写onTouchEvent方法:

    @Override
        public boolean onTouchEvent(MotionEvent event) {
            switch (event.getAction()){
                case MotionEvent.ACTION_DOWN:
                    if(mBubbleState != BUBBLE_STATE_DISMISS) {
                        mDist = (float) Math.hypot(event.getX() - mFixedBubbleCenter.x,
                                event.getY() - mFixedBubbleCenter.y);
                        if(mDist < mFixedBubbleRadius + MOVE_OFFSET){
                            mBubbleState = BUBBLE_STATE_CONNECT;
                        }else{
                            mBubbleState = BUBBLE_STATE_DEFAULT;
                        }
                    }
                    break;
                case MotionEvent.ACTION_MOVE:
                    if(mBubbleState != BUBBLE_STATE_DEFAULT){
                        mDist = (float) Math.hypot(event.getX() - mFixedBubbleCenter.x,
                                event.getY() - mFixedBubbleCenter.y);
                        mMovedBubbleCenter.x = event.getX();
                        mMovedBubbleCenter.y = event.getY();
                        if(mBubbleState == BUBBLE_STATE_CONNECT) {
                            if (mDist < mMaxDist - MOVE_OFFSET){
                                mFixedBubbleRadius = mMovedBubbleRadius - mDist / 8;   //固定气泡半径变化,可自定义更改
                            }else{
                                mBubbleState = BUBBLE_STATE_APART;
                            }
                        }
                        invalidate();    //调用onDraw方法
                    }
                    break;
                case MotionEvent.ACTION_UP:
                    if(mBubbleState == BUBBLE_STATE_CONNECT){
                        //橡皮筋动画效果
                        startBubbleRestAnim();
                    }else if(mBubbleState == BUBBLE_STATE_APART){
                        if(mDist < 2 * mBubbleRadius){
                            startBubbleRestAnim();
                        }else{
                            startBubbleBurstAnim();
                        }
                    }
                    break;
            }
            return true;
        }
    

    将手指在屏幕上的操作分为3步处理:

    ACTION_DOWN:当手指触摸屏幕的一瞬间:
    计算固定圆与动圆的圆心距离,如果<固定圆半径+偏移量时,将状态设置为连接状态,否则仍然是默认状态,这里加上偏移量是为了扩大触碰的面积,它表示在超出固定圆外一定面积内仍然是有效的触碰面积。

    ACTION_MOVE:当手指在屏幕上滑动时:
    代码看似复杂,其实主要的操作就是修改动圆的圆心坐标,以及固定圆的半径大小,接着做个判断:超过一定的距离后(这个距离完全可以自行设置),将状态设置为分离,然后调用invalidate()方法。我们知道ACTION_MOVE在手指的移动中会被调用数次(相当多次),因此这些操作也会被调用数次(相当多次),所以手指移动看似产生拖拽的气泡效果,其实只不过不停的重画2个圆以及贝塞尔曲线而已。

    ACTION_UP:当手指从屏幕上离开时:

    如果仍然是连接状态,那么产生一个回弹的橡皮筋动画效果。
    如果分离状态,那么如果这个动圆与固定圆小于一定距离(这个距离可以自己设置),那么不做爆炸效果而是一样产生一个回弹的橡皮筋动画效果。如果大于这个距离,那么就做爆炸效果。

    关于动画的实现:

    实现橡皮筋回弹效果:

    使用属性动画类ValueAnimator 来实现。

    private void startBubbleRestAnim(){
            ValueAnimator anim = ValueAnimator.ofObject(new PointFEvaluator(),
                    new PointF(mMovedBubbleCenter.x,mMovedBubbleCenter.y),
                    new PointF(mFixedBubbleCenter.x,mFixedBubbleCenter.y));
            anim.setDuration(200);
            anim.setInterpolator(new OvershootInterpolator(5f));
            anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
                @Override
                public void onAnimationUpdate(ValueAnimator valueAnimator) {
                    mMovedBubbleCenter = (PointF) valueAnimator.getAnimatedValue();
                    invalidate();  //反复调用onDraw
                }
            });
            anim.addListener(new AnimatorListenerAdapter() {
                @Override
                public void onAnimationEnd(Animator animation) {
                    super.onAnimationEnd(animation);
                    mBubbleState = BUBBLE_STATE_DEFAULT;
                }
            });
            anim.start();
        }
    

    实现爆炸效果:

    private void startBubbleBurstAnim(){
            mBubbleState = BUBBLE_STATE_DISMISS;
            ValueAnimator anim = ValueAnimator.ofInt(0,mBurstBitmapsArray.length);
            anim.setInterpolator(new LinearInterpolator());
            anim.setDuration(500);
            anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
                @Override
                public void onAnimationUpdate(ValueAnimator valueAnimator) {
                    mCurrentDrawableIndex = (int) valueAnimator.getAnimatedValue();
                    invalidate();
                }
            });
            anim.start();
        }
    

    demo展示:https://github.com/lyx19970504/qqBubbleDemo

    展开全文
  • 来源:github/WHC_-ContainerViLicence:MIT作者:WHC_MobileDevelopers  
  • 仿iPhoneQQ气泡聊天样式源码.zip
  • Good looking C# source code
  • Android自定义View实现QQ气泡效果,手势拖动气泡,两条贝塞尔曲线,回弹动画,爆炸气泡效果实现。。。。
  • 这个是模仿QQ聊天框里的气泡聊天控件源码。---希望可以帮助同类的c#学习者
  • 这篇文章主要介绍了HTML5实现QQ聊天气泡效果,用 HTML/CSS 做了个类似QQ的聊天气泡,具有一定的参考价值,感兴趣的小伙伴们可以参考一下今天自己用 HTML/CSS 做了个类似QQ的聊天气泡,以下是效果图:以下说下关键...

    这篇文章主要介绍了HTML5实现QQ聊天气泡效果,用 HTML/CSS 做了个类似QQ的聊天气泡,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

    今天自己用 HTML/CSS 做了个类似QQ的聊天气泡,以下是效果图:

    d76079e7efed24be9664ab4564ea4a16.png

    以下说下关键地方的样式设置。然后贴出html和css代码(不多)。

    步骤1:布局

    消息採用p+float布局,每条消息用一个p标签包裹,里面再放两个p分别用来包裹用户图标和用户消息内容。左側消息,先清除浮动,然后设置 float:left。这样用户图标和消息内容就能够显示在同一行了,当中用户图标在左边,消息内容紧邻着用户图标。

    右側消息,相同先清除浮动。然后设置 float:right,这样用户图标和消息显示在同一行了。当中图标在最右边。图标左側是消息。

    e2a65c4895e0b96a9a44a9fb593b5681.png

    步骤2:设置圆角矩形border-radius:7px;

    b07645defe1f185e68f1ed670ae5c11c.png

    步骤3:三角形箭头

    &n

    将p的宽度和高度设置为0,设置边框宽度,能够使其表现出一个由四个三角形组成的矩形,每一个三角形的颜色和大小能够通过设置border宽度和颜色设置。

    这里将当中三个三角形颜色设置为透明。仅仅留下一个三角形可见。

    53c92362d0dbb014dcfe2e5dd0516a80.png

    .triangle{

    width: 0px;

    height: 0px;

    border-width: 15px;

    border-style: solid;

    border-color: red blue green gold;

    }

    023388401d37be2d95dd613258b0aa81.png

    .triangle{

    width: 0px;

    height: 0px;

    border-width: 15px;

    border-style: solid;

    border-color: transparent transparent transparent red;

    }

    关键点4:三角形尾随矩形框

    使用相对定位。能够使三角形始终固定在矩形框的边上。

    position:relative;

    d76079e7efed24be9664ab4564ea4a16.png

    所有代码:

    /* bubble style */

    .sender{

    clear:both;

    }

    .sender p:nth-of-type(1){

    float: left;

    }

    .sender p:nth-of-type(2){

    background-color: aquamarine;

    float: left;

    margin: 0 20px 10px 15px;

    padding: 10px 10px 10px 0px;

    border-radius:7px;

    }

    .receiver p:first-child img,

    .sender p:first-child img{

    width:50px;

    height: 50px;

    }

    .receiver{

    clear:both;

    }

    .receiver p:nth-child(1){

    float: right;

    }

    .receiver p:nth-of-type(2){

    float:right;

    background-color: gold;

    margin: 0 10px 10px 20px;

    padding: 10px 0px 10px 10px;

    border-radius:7px;

    }

    .left_triangle{

    height:0px;

    width:0px;

    border-width:8px;

    border-style:solid;

    border-color:transparent aquamarine transparent transparent;

    position: relative;

    left:-16px;

    top:3px;

    }

    .right_triangle{

    height:0px;

    width:0px;

    border-width:8px;

    border-style:solid;

    border-color:transparent transparent transparent gold;

    position: relative;

    right:-16px;

    top:3px;

    }

    cat.jpg

    hello, man!

    cat.jpg

    hello world

    展开全文
  • http://zb.vip.qq.com/bubble?id=对应数字 可用数字有: 11 12 34 41 50 53 54 57 60 62 63 70 77 84 93 96 104 107 110 114 117 129 149 181 216 238 257 272 311 336 349 398 效果图展示如下: ...

    话不多说,附上代码一份:

    http://zb.vip.qq.com/bubble?id=对应数字

    可用数字有:

    1112344150535457
    6062637077849396
    104107110114117129149181
    216238257272311336349398

    效果图展示如下:
    在这里插入图片描述
    使用方法:
    复制链接地址给任意好友或者发送电脑,然后点击进去,进行设置后即可使用。
    注:有些是活动获取的,可能会用不了。
    在这里插入图片描述

    数字为114的气泡
    数字为272的气泡

    展开全文
  • 从手机QQ中反编译取出的.9.png图片,可以直接在自己的IM项目中使用。
  • 仿QQ气泡拖动删除

    2017-09-25 21:42:45
    private RelativeLayout root; private BounceCircle messageCount; private BounceCircle contactCount; private ImageView messageIcon; private ImageView contactIcon;... private int radius = 40;...
  • MSN,QQ气泡提示

    2011-07-11 18:08:53
    类似MSN,QQ右下角弹出的东西。是完整的例子。
  • Android 仿iPhoneQQ气泡聊天样式源码.rar
  • 仿iPhoneQQ气泡聊天样式。
  • Android源码——仿iPhoneQQ气泡聊天样式源码.zip
  • (1)绘制出QQ气泡静止时候的样式 (2)绘制出当手指拖动时候相连接的样式 (3)超过一定距离气泡炸裂的样式 下面进行详细的讲解,首先第一步我们通过Canvas.drawCircle()以及drawText()方法绘制出气泡和气泡上的...

      本篇文章主要是一个对贝塞尔曲线以及Path的一个应用,仿照QQ做了一个气泡的效果,效果如下:

      

     首先实现这个效果的主要步骤

    (1)绘制出QQ气泡静止时候的样式

    (2)绘制出当手指拖动时候相连接的样式

    (3)超过一定距离气泡炸裂的样式

    下面进行详细的讲解,首先第一步我们通过Canvas.drawCircle()以及drawText()方法绘制出气泡和气泡上的文字

      canvas.drawCircle(moveBubbleCenter.x, moveBubbleCenter.y, bubbleRadius, bPaint);
                textPaint.getTextBounds(bubbleText, 0, bubbleText.length(), textRect);
                canvas.drawText(bubbleText, moveBubbleCenter.x - textRect.width() / 2, moveBubbleCenter.y + textRect.height() / 2, textPaint);

    这一步较简单就是简单的API的使用。接下来我们进行手指拖动的时候相连接的绘制,通过观察我们可以知道在拖动的时候View主要可以分为三部分,一、原地不动的随距离不断变小的气泡,二、可以移动的大气泡,三、与气泡相连接的弧形。在这三部分中其中大小两个气泡实现方式主要也是通过Canvas.drawCircle()实现的,随着invalidate()的不断调用,更改小圆的绘制的半径和大圆的位置即可,随着手指移动大圆的位置和小圆的半径计算如下:

     if (event.getAction() == MotionEvent.ACTION_MOVE) {
                if (mBubbleState != BUBBLE_STATE_STATIC) {
                    moveBubbleCenter.x = event.getX();
                    moveBubbleCenter.y = event.getY();
                    dist = (float) Math.hypot(event.getX() - stillBubbleCenter.x,
                            event.getY() - stillBubbleCenter.y);
                    if (mBubbleState == BUBBLE_STATE_CONNECTION) {
                        // 减去MOVE_OFFSET是为了让不动气泡半径到一个较小值时就直接消失
                        // 或者说是进入分离状态
                        if (dist < maxDist - moveOffsize) {
    
                            bubbleStillRadius = bubbleRadius - dist / 10;
                        } else {
                            mBubbleState = BUBBLE_STATE_APART;//消失的状态
                        }
                    }
                    invalidate();
                }
            } 

    大圆的绘制依然如上再次不重复贴代码,小圆的绘制代码如下:

     canvas.drawCircle(stillBubbleCenter.x, stillBubbleCenter.y, bubbleStillRadius, bPaint);

    那么重点以及难点就来了怎么实现两个大圆和小圆之间的连接部分,在点与点的连线中实现弧线的方式是通过贝塞尔曲线,因此我们可以把这个连接部分看成是上下两条二阶贝塞尔曲线,通过path进行绘制,最后一闭合就能实现该种效果。

    思路是有了,那么我们怎么找这个贝塞尔曲线的起点终点和控制点,我们可以看出曲线开始部分是在圆的边缘部分,凹下去的部分是在他们差不多距离的中间位置,因此我们可以把两个圆心的连线的中间点看做控制点,并在两个圆中做这条连线的垂线,分别交两个圆与两点,我们可以暂时称为A、B、C、D点,其图像以及运算思路如下图:

    代码实现如下:

    // 1、画静止气泡
                canvas.drawCircle(mBubStillCenter.x,mBubStillCenter.y,
                        mBubStillRadius,mBubblePaint);
                // 2、画相连曲线
                // 计算控制点坐标,两个圆心的中点
                int iAnchorX = (int) ((mBubStillCenter.x + mBubMoveableCenter.x) / 2);
                int iAnchorY = (int) ((mBubStillCenter.y + mBubMoveableCenter.y) / 2);
    
                float cosTheta = (mBubMoveableCenter.x - mBubStillCenter.x) / mDist;
                float sinTheta = (mBubMoveableCenter.y - mBubStillCenter.y) / mDist;
    
                float iBubStillStartX = mBubStillCenter.x - mBubStillRadius * sinTheta;
                float iBubStillStartY = mBubStillCenter.y + mBubStillRadius * cosTheta;
                float iBubMoveableEndX = mBubMoveableCenter.x - mBubMoveableRadius * sinTheta;
                float iBubMoveableEndY = mBubMoveableCenter.y + mBubMoveableRadius * cosTheta;
                float iBubMoveableStartX = mBubMoveableCenter.x + mBubMoveableRadius * sinTheta;
                float iBubMoveableStartY = mBubMoveableCenter.y - mBubMoveableRadius * cosTheta;
                float iBubStillEndX = mBubStillCenter.x + mBubStillRadius * sinTheta;
                float iBubStillEndY = mBubStillCenter.y - mBubStillRadius * cosTheta;
    
                mBezierPath.reset();
                // 画上半弧
                mBezierPath.moveTo(iBubStillStartX,iBubStillStartY);
                mBezierPath.quadTo(iAnchorX,iAnchorY,iBubMoveableEndX,iBubMoveableEndY);
                // 画上半弧
                mBezierPath.lineTo(iBubMoveableStartX,iBubMoveableStartY);
                mBezierPath.quadTo(iAnchorX,iAnchorY,iBubStillEndX,iBubStillEndY);
                //path闭合
                mBezierPath.close();
                canvas.drawPath(mBezierPath,mBubblePaint);

    以上就是连接的贝塞尔曲线。

    接下来最后一步,炸裂效果,在这里我们是通过几张炸裂的图片,使用属性动画依次绘制出来这几张图片。

    mBubbleState = BUBBLE_STATE_DISMISS;//设置为消失的状态
            isBombAnimStarting = true;
            ValueAnimator valueAnimator = ValueAnimator.ofInt(0, BOOM_ARRAY.length);
            valueAnimator.setDuration(500);
            valueAnimator.setInterpolator(new LinearInterpolator());
            valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
                @Override
                public void onAnimationUpdate(ValueAnimator animation) {
                    bombDrawableIndex = (int) animation.getAnimatedValue();
                    invalidate();
    
                }
            });
    
            valueAnimator.addListener(new AnimatorListenerAdapter() {
                @Override
                public void onAnimationEnd(Animator animation) {
                    isBombAnimStarting = false;
                }
            });
            valueAnimator.start();
     bombRect.set((int) (moveBubbleCenter.x - bubbleRadius),
                        (int) (moveBubbleCenter.y - bubbleRadius),
                        (int) (moveBubbleCenter.x + bubbleRadius),
                        (int) (moveBubbleCenter.y + bubbleRadius));
                canvas.drawBitmap(bomb_bitmaps[bombDrawableIndex], null, bombRect, bombPaint);

    以上即为QQ气泡的模仿效果,其实可以看出它也只是对于一些简单算法以及android UI绘制一些简单的API的使用。项目源码我已经上传至Github上,有需要的可以下载使用仿QQ拖拽气泡

    展开全文
  • 安卓Android源码——仿iPhoneQQ气泡聊天样式源码.zip
  • 模拟 qq 消息气泡 demo

    2017-08-01 22:34:25
    qq 消息气泡,http://blog.csdn.net/qq_18983205/article/details/76166576 对应代码
  • 气泡:装饰墙

    2020-04-20 14:12:58
    受弦理论中构造de Sitter真空的困难的启发,在arXiv:1807.01570和arXiv:1907.04268中提出了一种新方法,其中在膨胀的球形气泡上将四维de Sitter空间实现为具有物质和辐射的有效宇宙论。 在弦论中将非超对称AdS5的...
  • 仿 IPhoneQQ 气 泡 聊 天 样 式 DEMO
  • androidqq气泡效果

    2011-08-19 17:22:24
    一款android的qq聊天气泡效果程序,附带源代码
  • delphi实现QQ气泡窗体

    2012-02-04 11:45:46
    delphi程序实现QQ上的右下角的气泡提示功能,可以添加到系统中,定时提示。
  • 大神的一个仿qq气泡

    2019-10-01 09:14:50
    https://github.com/MonkeyMushroom/DragBubbleView 转载于:https://www.cnblogs.com/qcgAd/p/6503328.html
  • QQ气泡效果(贝斯曲线)
  • 基于Qt的类QQ气泡聊天的界面开发

    千次阅读 2014-06-24 14:07:56
     最近在写IM 聊天界面,想设计出一个类似QQ气泡聊天的样式 使用了几种办法 1:使用Qt下面的QListview来实现QQ类似效果,差强人意 2:使用QWebview加载html css样式来完成,发现效果不错,但是...
  • 定义QQ气泡diy接口

    2021-06-04 21:10:12
    定义QQ气泡diy接口 ** https://zb.vip.qq.com/collection/aio?diyText=加内容&_wv=16778243&id=2276&adtag=mvip.gongneng.android.bubble.collection_aio&_preload=3&type=bubble&_wvx=3&...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,115
精华内容 2,046
关键字:

qq气泡