Android超簡(jiǎn)單實(shí)現(xiàn)自定義抽獎(jiǎng)轉(zhuǎn)盤效果

目錄

目錄

效果展示

前言

●之前有一個(gè)項(xiàng)目需要用到轉(zhuǎn)盤效果,但是那個(gè)時(shí)候思路不是很清晰,所以引用了一下別人的控件但是別人的源碼還是比較復(fù)雜的午阵,后來經(jīng)過分析后使用一種簡(jiǎn)單的方式寫出了之前的效果。
●如果有小伙伴想實(shí)現(xiàn)九宮格抽獎(jiǎng)效果的話請(qǐng)看我的另一篇文章《Android超簡(jiǎn)單實(shí)現(xiàn)九宮格抽獎(jiǎng)》

實(shí)現(xiàn)步驟

1.畫轉(zhuǎn)盤

  • 實(shí)現(xiàn)原理


  • 對(duì)應(yīng)代碼
public class LuckPan extends View {
    private Paint mPaintArc;//轉(zhuǎn)盤扇形畫筆
    private float mRadius;//圓盤的半徑
    private RectF rectFPan;//構(gòu)建轉(zhuǎn)盤的矩形
    private String[] mItemStrs = {"俯臥撐30個(gè)","波比跳15個(gè)","卷腹30個(gè)","高抬腿30下","深蹲30下","開合跳30下"};
    private float mItemAnge;
    public LuckPan(Context context) {
        this(context,null);
    }

    public LuckPan(Context context, @Nullable AttributeSet attrs) {
        this(context, attrs,0);
    }

    public LuckPan(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init();
    }

    private void init() {
        mPaintArc = new Paint(Paint.ANTI_ALIAS_FLAG);
        mPaintArc.setStyle(Paint.Style.FILL);
    }
    @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        super.onSizeChanged(w, h, oldw, oldh);
        mRadius = Math.min(w,h)/2*0.9f;
        //這里是將(0,0)點(diǎn)作為圓心
        rectFPan = new RectF(-mRadius,-mRadius,mRadius,mRadius);
        //每一個(gè)Item的角度
        mItemAnge = 360 / mItemStrs.length;
    }
    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        canvas.translate(getWidth()/2,getHeight()/2);//為了操作方便將畫布中心點(diǎn)設(shè)置為(0窘拯,0)
        drawPanItem(canvas);//畫轉(zhuǎn)盤
    }
    private void drawPanItem(Canvas canvas) {
        float startAng = 0;//扇形開始的角度
        for (int x = 1;x<= mItemStrs.length;x++){
        //這里我們通過判斷奇數(shù)偶數(shù)來給轉(zhuǎn)盤設(shè)置不同的顏色
            if(x%2 == 1){
                //是奇數(shù)
                mPaintArc.setColor(Color.WHITE);
            }else {
                //偶數(shù)
                mPaintArc.setColor(Color.parseColor("#F8864A"));
            }
            canvas.drawArc(rectFPan,startAng,mItemAnge,true,mPaintArc);//畫扇形
            startAng+=mItemAnge;//每畫完一次增加開始角度
        }
    }
}
  • 對(duì)應(yīng)效果

    2.生成畫文字路徑
  • 實(shí)現(xiàn)原理


  • 對(duì)應(yīng)代碼
    在代碼中我們需要添加幾個(gè)屬性。(其中為了展示方便省略了部分代碼)
public class LuckPan extends View {
    //...省略部分
    private Paint mPaintItemStr;//轉(zhuǎn)盤文字畫筆
    private ArrayList<Path> mArcPaths;
    private RectF rectFStr;//構(gòu)建文字圓盤的矩形
    private float mTextSize = 20;//文字大小
    private String[] mItemStrs = {"俯臥撐30個(gè)","波比跳15個(gè)","卷腹30個(gè)","高抬腿30下","深蹲30下","開合跳30下"};//繪制的文字?jǐn)?shù)組
    public LuckPan(Context context) {
        this(context,null);
    }

    public LuckPan(Context context, @Nullable AttributeSet attrs) {
        this(context, attrs,0);
    }

    public LuckPan(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init();
    }

    private void init() {
        //...省略部分代碼
        mPaintItemStr = new Paint(Paint.ANTI_ALIAS_FLAG);
        mPaintItemStr.setColor(Color.parseColor("#ED2F2F"));//設(shè)置文字顏色
        mPaintItemStr.setStrokeWidth(3);
        mPaintItemStr.setTextAlign(Paint.Align.CENTER);//設(shè)置文字水平居中對(duì)齊
        mArcPaths = new ArrayList<>();
    }
    @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        super.onSizeChanged(w, h, oldw, oldh);
        rectFStr = new RectF(-mRadius/7*5,-mRadius/7*5,mRadius/7*5,mRadius/7*5);//構(gòu)建文字路徑的矩形半徑為圓盤的五分之七
        mTextSize = mRadius/9;//根據(jù)圓盤的半徑設(shè)置文字大小
        mPaintItemStr.setTextSize(mTextSize);//設(shè)置文字大小
    }
    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        canvas.translate(getWidth()/2,getHeight()/2);//畫布中心點(diǎn)設(shè)置為(0坝茎,0)
        drawPanItem(canvas);
        drawText(canvas);
    }
    //畫文字
    private void drawText(Canvas canvas) {
        for(int x = 0;x<mItemStrs.length;x++){
            Path path = mArcPaths.get(x);
            canvas.drawTextOnPath(mItemStrs[x],path,0,0,mPaintItemStr);
        }
    }

    private void drawPanItem(Canvas canvas) {
        float startAng = 0;//扇形開始的角度
        for (int x = 1;x<= mItemStrs.length;x++){
            if(x%2 == 1){
                //是奇數(shù)
                mPaintArc.setColor(Color.WHITE);
            }else {
                //偶數(shù)
                mPaintArc.setColor(Color.parseColor("#F8864A"));
            }
            //以下是添加文字繪制路徑的代碼
            Path path = new Path();
            path.addArc(rectFStr,startAng,mItemAnge);//文字的路徑圓形比盤的小
            mArcPaths.add(path);
            //==========================
            canvas.drawArc(rectFPan,startAng,mItemAnge,true,mPaintArc);
            startAng+=mItemAnge;
        }
    }
}
  • 對(duì)應(yīng)效果


3.設(shè)置動(dòng)畫實(shí)現(xiàn)轉(zhuǎn)動(dòng)

  • 實(shí)現(xiàn)原理


  • 對(duì)應(yīng)代碼
    這里為了看的清楚也是省略了部分代碼涤姊。
public class LuckPan extends View {
    //省略部分代碼....
    private int mRepeatCount = 4;//轉(zhuǎn)幾圈
    private int mLuckNum = 2;//最終停止的位置
    private ObjectAnimator objectAnimator;
    public LuckPan(Context context) {
        this(context,null);
    }

    public LuckPan(Context context, @Nullable AttributeSet attrs) {
        this(context, attrs,0);
    }

    public LuckPan(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init();
    }
    //省略部分代碼....
    public void startAnim(){
        if(objectAnimator!=null){
            objectAnimator.cancel();
        }
        objectAnimator = ObjectAnimator.ofFloat(this, "rotation", 0, mRepeatCount*360+mLuckNum*mItemAnge);
        objectAnimator.setDuration(4000);
        objectAnimator.start();
    }
}
  • 對(duì)應(yīng)效果

    4.糾正初始角度
    通過上面的代碼我們已經(jīng)基本實(shí)現(xiàn)了轉(zhuǎn)盤效果了,但是我們發(fā)現(xiàn)轉(zhuǎn)盤初始的角度不是在第一個(gè)Item上嗤放。
  • 調(diào)整原理


  • 對(duì)應(yīng)代碼
    為了觀看方便這里只展示onDraw里的代碼
@Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        canvas.translate(getWidth()/2,getHeight()/2);//畫布中心點(diǎn)設(shè)置為(0思喊,0)
        canvas.rotate(-90);//將畫布旋轉(zhuǎn)-90度
        drawPanItem(canvas);
        drawText(canvas);
    }
  • 對(duì)應(yīng)效果



    這里我們發(fā)現(xiàn)在旋轉(zhuǎn)了-90度后雖然指向了第一個(gè)Item但是卻沒有指到扇形的中間,因此我們需要繼續(xù)旋轉(zhuǎn)畫布為-ItemAngle/2的度數(shù)即代碼實(shí)現(xiàn)為:

public class LuckPan extends View {
    private float mOffsetAngle = 0;//圓盤偏移角度(我們需要添加此屬性)
    @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        super.onSizeChanged(w, h, oldw, oldh);
        mItemAnge = 360 / mItemStrs.length;
        mOffsetAngle = mItemAnge/2;//設(shè)置偏移角度
    }
    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        canvas.translate(getWidth()/2,getHeight()/2);//畫布中心點(diǎn)設(shè)置為(0次酌,0)
        canvas.rotate(-90-mOffsetAngle);//將畫布旋轉(zhuǎn)(-90-mOffsetAngle)度
        drawPanItem(canvas);
        drawText(canvas);
    }
}
  • 對(duì)應(yīng)效果

    5.糾正下一次旋轉(zhuǎn)位置為上一次結(jié)束位置以及糾正結(jié)束位置
    我們雖然糾正了初始位置但是我們發(fā)現(xiàn)轉(zhuǎn)盤的下一次旋轉(zhuǎn)角度卻不是上一次結(jié)束的位置恨课,而且停止的位置也不正確,下面我們就來糾正下這兩個(gè)問題岳服。
  • 實(shí)現(xiàn)代碼
    同樣為了方便觀看這里只展示部分代碼剂公。
public class LuckPan extends View {
    private float mStartAngle = 0;//存儲(chǔ)圓盤開始的位置
    private ObjectAnimator objectAnimator;
    public void startAnim(){
        if(objectAnimator!=null){
            objectAnimator.cancel();
        }
        float v = mItemAnge*mLuckNum-mStartAngle%360;//如果轉(zhuǎn)過一次了那下次旋轉(zhuǎn)的角度就需要減去上一次多出的,否則結(jié)束的位置會(huì)不斷增加的
        objectAnimator = ObjectAnimator.ofFloat(this, "rotation", mStartAngle, mStartAngle+mRepeatCount*360+v);
        objectAnimator.setDuration(4000);
        objectAnimator.start();
        mStartAngle += mRepeatCount*360+v;//將上一次的角度加進(jìn)來以達(dá)到下次開始就是上次結(jié)束的位置
    }
}
  • 對(duì)應(yīng)效果



    我們發(fā)現(xiàn)雖然第二次開始的位置是上一次結(jié)束的位置吊宋,但是最終停止的位置卻不對(duì)诬留,因?yàn)槲覀冊(cè)O(shè)置的是2,而停止的卻是倒數(shù)第2個(gè),其實(shí)這主要是因?yàn)檗D(zhuǎn)盤是順時(shí)針旋轉(zhuǎn)的原因文兑,在這里有兩種解決方案:
    1.將結(jié)束位置設(shè)置為負(fù)數(shù):(這種方法就不展示代碼了盒刚,直接將mLuckNum設(shè)置為負(fù)數(shù)即可)
    2.將旋轉(zhuǎn)角度變?yōu)槟鏁r(shí)針:(就是將旋轉(zhuǎn)角度變?yōu)樨?fù)數(shù))
    代碼展示:

//這里其實(shí)就是將角度計(jì)算那部分+變成-
public void startAnim(){
        if(objectAnimator!=null){
            objectAnimator.cancel();
        }
        float v = mItemAnge*mLuckNum+mStartAngle%360;//如果轉(zhuǎn)過一次了那下次旋轉(zhuǎn)的角度就需要減去上一次多出的,否則結(jié)束的位置會(huì)不斷增加的
        objectAnimator = ObjectAnimator.ofFloat(this, "rotation", mStartAngle, mStartAngle-mRepeatCount*360-v);
        objectAnimator.setDuration(4000);
        objectAnimator.start();
        mStartAngle -= mRepeatCount*360+v;
    }
  • 對(duì)應(yīng)效果

    6.添加動(dòng)態(tài)設(shè)置參數(shù)的方法
    就是動(dòng)態(tài)的設(shè)置Item所顯示的內(nèi)容绿贞,及停止的位置因块。
  • 對(duì)應(yīng)代碼
 /**
     * 設(shè)置轉(zhuǎn)盤數(shù)據(jù)
     * @param items
     */
    public void setItems(String[] items){
        mItemStrs = items;
        mOffsetAngle=0;
        mStartAngle=0;
        mOffsetAngle = 360/items.length/2;//根據(jù)item的數(shù)量動(dòng)態(tài)調(diào)整圓盤偏移角度
        invalidate();
    }
    /**
     * 設(shè)置轉(zhuǎn)盤數(shù)據(jù)
     */
    public void setLuckNumber(int luckNumber){
        mLuckNum = luckNumber;
    }
    

布局代碼:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.itfitness.luckpan.MainActivity">
    <com.itfitness.luckpan.widget.LuckPan
        android:id="@+id/pan"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
    <ImageView
        android:id="@+id/img_start"
        android:src="@mipmap/ic_luckdrawstart"
        android:layout_centerInParent="true"
        android:layout_width="130dp"
        android:layout_height="130dp" />
</RelativeLayout>

Avtivity代碼:

public class MainActivity extends AppCompatActivity {
    private LuckPan pan;
    private ImageView imgStart;
    private String[] mItemStrs = {"123","撒大聲道1","撒大聲道2","撒旦說","撒大聲道3","哥哥哥","對(duì)應(yīng)效果","對(duì)應(yīng)代碼"};
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        pan = (LuckPan) findViewById(R.id.pan);
        imgStart = (ImageView) findViewById(R.id.img_start);
        pan.setItems(mItemStrs);
        pan.setLuckNumber(2);
        imgStart.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                pan.startAnim();
            }
        });
    }
}
  • 對(duì)應(yīng)效果

    7.添加結(jié)束回調(diào)函數(shù)
  • 對(duì)應(yīng)代碼
    回調(diào)接口代碼:
public interface LuckPanAnimEndCallBack {
    void onAnimEnd(String str);
}

LuckPan代碼:這里為了方便省略部分代碼

public class LuckPan extends View {
    private ObjectAnimator objectAnimator;
    private LuckPanAnimEndCallBack luckPanAnimEndCallBack;

    public LuckPanAnimEndCallBack getLuckPanAnimEndCallBack() {
        return luckPanAnimEndCallBack;
    }

    public void setLuckPanAnimEndCallBack(LuckPanAnimEndCallBack luckPanAnimEndCallBack) {
        this.luckPanAnimEndCallBack = luckPanAnimEndCallBack;
    }

    public void startAnim(){
//        mLuckNum = random.nextInt( mItemStrs.length);//隨機(jī)生成結(jié)束位置
        if(objectAnimator!=null){
            objectAnimator.cancel();
        }
        float v = mItemAnge*mLuckNum+mStartAngle%360;//如果轉(zhuǎn)過一次了那下次旋轉(zhuǎn)的角度就需要減去上一次多出的,否則結(jié)束的位置會(huì)不斷增加的
        objectAnimator = ObjectAnimator.ofFloat(this, "rotation", mStartAngle, mStartAngle-mRepeatCount*360-v);
        objectAnimator.setDuration(4000);
        //在動(dòng)畫的監(jiān)聽事件中增加我們實(shí)現(xiàn)的回調(diào)函數(shù)
        objectAnimator.addListener(new AnimatorListenerAdapter() {
            @Override
            public void onAnimationEnd(Animator animation) {
                super.onAnimationEnd(animation);
                if(luckPanAnimEndCallBack!=null){
                    luckPanAnimEndCallBack.onAnimEnd(mItemStrs[mLuckNum]);
                }
            }
        });
        objectAnimator.start();
        mStartAngle -= mRepeatCount*360+v;
    }
}

Activity代碼:

public class MainActivity extends AppCompatActivity {
    private LuckPan pan;
    private ImageView imgStart;
    private String[] mItemStrs = {"123","撒大聲道1","撒大聲道2","撒旦說","撒大聲道3","哥哥哥","對(duì)應(yīng)效果","對(duì)應(yīng)代碼"};
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        pan = (LuckPan) findViewById(R.id.pan);
        imgStart = (ImageView) findViewById(R.id.img_start);
        pan.setItems(mItemStrs);
        pan.setLuckNumber(2);
        pan.setLuckPanAnimEndCallBack(new LuckPanAnimEndCallBack() {
            @Override
            public void onAnimEnd(String str) {
                Toast.makeText(MainActivity.this, str, Toast.LENGTH_SHORT).show();
            }
        });
        imgStart.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                pan.startAnim();
            }
        });
    }
}
  • 對(duì)應(yīng)效果


項(xiàng)目源碼:https://github.com/myml666/LuckPan

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末籍铁,一起剝皮案震驚了整個(gè)濱河市涡上,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌拒名,老刑警劉巖吩愧,帶你破解...
    沈念sama閱讀 218,858評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異增显,居然都是意外死亡雁佳,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門同云,熙熙樓的掌柜王于貴愁眉苦臉地迎上來糖权,“玉大人,你說我怎么就攤上這事炸站⌒前模” “怎么了?”我有些...
    開封第一講書人閱讀 165,282評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵旱易,是天一觀的道長(zhǎng)禁偎。 經(jīng)常有香客問我,道長(zhǎng)阀坏,這世上最難降的妖魔是什么如暖? 我笑而不...
    開封第一講書人閱讀 58,842評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮全释,結(jié)果婚禮上装处,老公的妹妹穿的比我還像新娘误债。我一直安慰自己浸船,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評(píng)論 6 392
  • 文/花漫 我一把揭開白布寝蹈。 她就那樣靜靜地躺著李命,像睡著了一般。 火紅的嫁衣襯著肌膚如雪箫老。 梳的紋絲不亂的頭發(fā)上封字,一...
    開封第一講書人閱讀 51,679評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼阔籽。 笑死流妻,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的笆制。 我是一名探鬼主播绅这,決...
    沈念sama閱讀 40,406評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼在辆!你這毒婦竟也來了证薇?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,311評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤匆篓,失蹤者是張志新(化名)和其女友劉穎浑度,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體鸦概,經(jīng)...
    沈念sama閱讀 45,767評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡箩张,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了完残。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片伏钠。...
    茶點(diǎn)故事閱讀 40,090評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖谨设,靈堂內(nèi)的尸體忽然破棺而出熟掂,到底是詐尸還是另有隱情,我是刑警寧澤扎拣,帶...
    沈念sama閱讀 35,785評(píng)論 5 346
  • 正文 年R本政府宣布赴肚,位于F島的核電站,受9級(jí)特大地震影響二蓝,放射性物質(zhì)發(fā)生泄漏誉券。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評(píng)論 3 331
  • 文/蒙蒙 一刊愚、第九天 我趴在偏房一處隱蔽的房頂上張望踊跟。 院中可真熱鬧,春花似錦鸥诽、人聲如沸商玫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽拳昌。三九已至,卻和暖如春钠龙,著一層夾襖步出監(jiān)牢的瞬間炬藤,已是汗流浹背御铃。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評(píng)論 1 271
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留沈矿,地道東北人上真。 一個(gè)月前我還...
    沈念sama閱讀 48,298評(píng)論 3 372
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像羹膳,于是被迫代替她去往敵國(guó)和親谷羞。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫溜徙、插件湃缎、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,105評(píng)論 4 62
  • 1 CALayer IOS SDK詳解之CALayer(一) http://doc.okbase.net/Hell...
    Kevin_Junbaozi閱讀 5,152評(píng)論 3 23
  • 我想寫一首詩, 不寫大風(fēng)和烏云蠢壹, 不寫飛雨和秋葉嗓违, 詩里只寫你。 寫你的唇勾起的性感图贸, 寫你的手挑起的溫柔蹂季, 寫你...
    廿九詩閱讀 109評(píng)論 0 0
  • 兒子跑門口把飲水機(jī)的空桶拎到了客廳偿洁,他“覬覦”這個(gè)“玩具”很久了。因?yàn)榭紤]安全問題沟优,飲水機(jī)一直被餐椅擋著涕滋,他想碰也...
    魏婭慧閱讀 351評(píng)論 0 0
  • 今天宾肺,被這個(gè)問題糾纏不休,這個(gè)念頭時(shí)不時(shí)的冒出來侵俗。理性锨用,夢(mèng)想,生活隘谣,現(xiàn)實(shí)增拥。糾結(jié)著… 不配談夢(mèng)想的時(shí)候就老老實(shí)實(shí)的待...
    月小樓336閱讀 141評(píng)論 0 0