自定義view之一個簡單的包含開始停止兩種狀態(tài)的動畫(仿uber取消訂單動畫)

還是老規(guī)矩先看看動畫效果

car.gif

分析狀態(tài)值及邏輯事件:0荸百、初始狀態(tài)1茂契、點擊實現(xiàn)旋轉(zhuǎn)動畫 2载慈、長按倒計時動畫(類似于uber取消訂單的效果)

實現(xiàn)步驟

1、來分析下我們自定義view需要的屬性

1褒纲、內(nèi)圓的半徑round_radius
2、外圓環(huán)的寬度ring_width
3钥飞、內(nèi)圓與外圓環(huán)之間的間距space_inner_out
4莺掠、未點擊時剛開始的狀態(tài)下的顏色start_round_color(我們這個動畫其實只用到了兩周顏色,所以就定為開始的顏色和過程中的顏色)
5读宙、點擊開始動畫的顏色centre_round_color
6彻秆、文字的大小text_size
7、文字的顏色text_color

2结闸、定義view的屬性唇兑,創(chuàng)建一個名字叫MyProgressView的類繼承自view,這里提前創(chuàng)建它桦锄,只是為了我們在創(chuàng)建attrs資源文件自定義view屬性的時方便命名

<resources>
    <declare-styleable name="MyProgressView">
        <attr name="space_inner_out" format="integer"/>
        <attr name="round_radius" format="integer"/>
        <attr name="ring_width" format="integer"/>
        <attr name="text_size" format="integer"/>
        <attr name="text_color" format="color"/>
        <attr name="start_round_color" format="color"/>
        <attr name="centre_round_color" format="color"/>
    </declare-styleable>
</resources>

3扎附、我們就該來實現(xiàn)自定義view的功能了

首先獲取自定義屬性


    private void init(Context context, AttributeSet attrs) {
        //獲取自定義屬性值
        TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.MyProgressView);
        screenWidth = ScreenUtils.getScreenWidth(context);
        round_radius = a.getInt(R.styleable.MyProgressView_round_radius, screenWidth / 14);//默認(rèn)大小為屏幕寬度的6分之一
        ring_width = a.getInt(R.styleable.MyProgressView_ring_width, 16);//默認(rèn)外圓的寬度為20
        space_inner_out = a.getInt(R.styleable.MyProgressView_space_inner_out, 30);
        //獲取文字的大小,默認(rèn)為30
        text_size = a.getInt(R.styleable.MyProgressView_text_size, 30);
        text_color = a.getColor(R.styleable.MyProgressView_text_color, Color.WHITE);
        mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
        start_round_color = a.getColor(R.styleable.MyProgressView_start_round_color,Color.BLUE);
        centre_round_color = a.getColor(R.styleable.MyProgressView_centre_round_color,Color.RED);
        calculate();
    }

    /**
     * 計算
     */
    public void calculate() {
        //計算view的大小
        viewSizw = round_radius * 2 + ring_width * 2 + space_inner_out * 2;
        //獲取bitmap
        Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.yuanhuan);
        progress_bitmap = Bitmap.createScaledBitmap(bitmap, viewSizw, viewSizw, true);
        //繪制旋轉(zhuǎn)動畫用到的matrix
        matrix = new Matrix();
    }

添加一個設(shè)置stute的方法

/**
     * 設(shè)置狀態(tài)值
     * @param stute
     */
    public void setStute(int stute) {
        this.stute = stute;
        if (stute == 1) {
            if (animator_stute2 != null) {//當(dāng)前是stute=2向stute=1轉(zhuǎn)時结耀,結(jié)束上一個動畫
                animator_stute2.cancel();
            }
            startAnimator();
        } else if (stute == 2) {
            if (animator_stute1 != null)//當(dāng)前是stute=1向stute=2轉(zhuǎn)時留夜,結(jié)束上一個動畫
                animator_stute1.cancel();
            startCountDown();
        }
    }

重寫on Measure()

 @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        setMeasuredDimension(viewSizw, viewSizw);//設(shè)置view的大小是上面計算的
        //圓環(huán)的位置
        ring_rect = new RectF(0+ring_width/2, 0+ring_width/2,getWidth()-ring_width/2,getHeight()-ring_width/2);
        width = getWidth();
        height = getHeight();
        //圓心
        cx = width / 2;
        cy = height / 2;
    }

繪制

 @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        switch (stute) {
            case 0://開始
                //繪制內(nèi)圓
                mPaint.setColor(start_round_color);
                mPaint.setStyle(Paint.Style.FILL);
                canvas.drawCircle(cx, cy, round_radius, mPaint);//繪制內(nèi)圓
                //繪制外圓環(huán)
                mPaint.setStyle(Paint.Style.STROKE);
                mPaint.setStrokeWidth(ring_width);
                canvas.drawCircle(cx, cy, width / 2 - ring_width / 2, mPaint);
                //繪制文字
                mPaint.setStrokeWidth(0);
                mPaint.setColor(text_color);
                mPaint.setTextSize(text_size);
                float v = mPaint.measureText(START_TEXT);
                canvas.drawText(START_TEXT, width / 2 - v / 2, height / 2 + text_size / 2, mPaint);
                break;
            case 1:
                //繪制內(nèi)圓
                mPaint.setColor(centre_round_color);
                mPaint.setStyle(Paint.Style.FILL);
                canvas.drawCircle(cx, cy, round_radius, mPaint);//繪制內(nèi)圓

                //繪制文字
                mPaint.setStrokeWidth(0);
                mPaint.setColor(text_color);
                mPaint.setTextSize(text_size);
                float v1 = mPaint.measureText(CENTRE_TEXT);
                canvas.drawText(CENTRE_TEXT, width / 2 - v1 / 2, height / 2 + text_size / 2, mPaint);
                //繪制外圓環(huán)
                canvas.drawBitmap(progress_bitmap, matrix, mPaint);
                break;
            case 2:
                //繪制內(nèi)圓
                mPaint.setColor(centre_round_color);
                mPaint.setStyle(Paint.Style.FILL);
                canvas.drawCircle(cx, cy, round_radius, mPaint);//繪制內(nèi)圓
                //繪制外圓環(huán)
                mPaint.setStyle(Paint.Style.STROKE);
                mPaint.setStrokeWidth(ring_width);
                canvas.drawArc(ring_rect, 270, index, false, mPaint);
                //繪制文字
                mPaint.setStrokeWidth(0);
                mPaint.setColor(text_color);
                mPaint.setTextSize(text_size);
                float v2 = mPaint.measureText(CENTRE_TEXT);
                canvas.drawText(CENTRE_TEXT, width / 2 - v2 / 2, height / 2 + text_size / 2, mPaint);
                break;
        }
    }

還有兩個動畫的實現(xiàn)

 /**
     * 開啟動畫
     */
    private void startAnimator() {
        animator_stute1 = ValueAnimator.ofInt(360);
        animator_stute1.setDuration(2000);
        animator_stute1.setInterpolator(new LinearInterpolator());
        animator_stute1.setRepeatCount(ValueAnimator.INFINITE);
        animator_stute1.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator valueAnimator) {
                //這里使用來實現(xiàn)旋轉(zhuǎn)動畫
                matrix.postRotate(DEGREES, progress_bitmap.getWidth() / 2, progress_bitmap.getHeight() / 2);
                postInvalidate();
            }
        });
        animator_stute1.start();
    }

    /**
     * 停止的動畫
     */
    private void startCountDown() {
        index=360;//將index設(shè)置為初始值
        animator_stute2 = ValueAnimator.ofInt(360);
        animator_stute2.setDuration(TIME_FOR_SOTP);
        animator_stute2.setInterpolator(new LinearInterpolator());
        animator_stute2.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator valueAnimator) {
                index -= S;
                if (index <= 0) {
                    stute = 0;//設(shè)置為初始狀態(tài)
                    index = 360;//將index設(shè)置為初始狀態(tài)
                    is_stop = true;//停止動畫結(jié)束
                }
                postInvalidate();
            }
        });
        animator_stute2.start();
    }
旋轉(zhuǎn)動畫實現(xiàn)的主要方法

matrix.postRotate(DEGREES, progress_bitmap.getWidth() / 2, progress_bitmap.getHeight() / 2);//這里這是旋轉(zhuǎn)的角度DEGREES,旋轉(zhuǎn)中心就是圖片的中心
這里就是繪制旋轉(zhuǎn)后的圖片
//繪制外圓環(huán) canvas.drawBitmap(progress_bitmap, matrix, mPaint);

在mainactivity中的使用

@Override
   public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);
       final MyProgressView m = (MyProgressView) findViewById(R.id.mp);
       m.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View view) {
               if (m.getStute()==1){//如果當(dāng)前已經(jīng)是開始狀態(tài)图甜,則return
                   return;
               }
               m.setStute(1);
           }
       });
       m.setOnLongClickListener(new View.OnLongClickListener() {
           @Override
           public boolean onLongClick(View view) {
               if (m.getStute()==1){//如果當(dāng)前是開始狀態(tài)才觸發(fā)停止動畫
                   m.setStute(2);
               }
               return false;
           }
       });
   }

當(dāng)然還要重寫view的onTouchEvent()方法

 @Override
    public boolean onTouchEvent(MotionEvent event) {
        if (event.getAction() == MotionEvent.ACTION_UP && !is_stop && stute == 2) {
            setStute(1);//沒有結(jié)束停止動畫碍粥,就返回出車動畫
            index=360;
        } else if (event.getAction() == MotionEvent.ACTION_UP && is_stop && stute == 0) {
            is_stop = false;//當(dāng)前停止動畫已經(jīng)結(jié)束,則將is_stop設(shè)置為初始值
            return true;
        }
        return super.onTouchEvent(event);
    }

xml中的布局

  <com.dituwuyou.myapplication.MyProgressView
        android:id="@+id/mp"
        android:layout_centerInParent="true"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:text_color="@android:color/white"
        app:text_size="30"
        app:space_inner_out="30"
        app:round_radius="150"
        app:ring_width="20"
        app:centre_round_color="@color/color_ff4631"
        app:start_round_color="@color/color_3F51B5"/>

接下來我貼出整個自定義view的代碼


/**
 * Created by Laer on 2016/10/24.
 */
public class MyProgressView extends View {
    private int space_inner_out;//外圓環(huán)和內(nèi)圓的間距(不提供大小設(shè)置黑毅,代碼計算)
    private int round_radius;//內(nèi)圓的半徑
    private int ring_width;//外圓環(huán)的寬度
    private int text_size;//文字的大小
    private int text_color;//文字的顏色
    private int centre_round_color;//開始動畫的內(nèi)圓顏色值
    private int start_round_color;//沒開始的內(nèi)圓顏色值

    //常量
    private static final String START_TEXT = "開始";
    private static final String CENTRE_TEXT = "停止";
    private static final int S = 3;//減少時的速率
    private static  final int DEGREES =2;//旋轉(zhuǎn)動畫的速率
    private static final int TIME_FOR_SOTP = 3000;//長按停止出車的時間,這里默認(rèn)是3秒
    //畫筆
    private Paint mPaint;
    private RectF ring_rect;
    //標(biāo)識
    private boolean is_stop;//是否停止出車
    private boolean is_start_animotor;//是否開啟動畫
    //
    private int screenWidth;
    private int viewSizw;//當(dāng)前view的大小
    private Bitmap progress_bitmap;
    private Matrix matrix;
    private int index = 360;//當(dāng)前倒計時的進(jìn)度值
    private int stute = 0;//當(dāng)前的狀態(tài)值
    private ValueAnimator animator_stute1;
    private ValueAnimator animator_stute2;
    private int width;//當(dāng)前view的寬度
    private int height;//當(dāng)前view的高度
    private int cx;//圓心的x坐標(biāo)
    private int cy;//圓心的y坐標(biāo)

    public MyProgressView(Context context) {
        super(context);
        mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);

    }
    public MyProgressView(Context context, AttributeSet attrs) {
        super(context, attrs);
        init(context, attrs);
    }

    /**
     * 獲取當(dāng)前狀態(tài)值
     * @return
     */
    public int getStute() {
        return stute;
    }

    /**
     * 設(shè)置狀態(tài)值
     * @param stute
     */
    public void setStute(int stute) {
        this.stute = stute;
        if (stute == 1) {
            if (animator_stute2 != null) {//當(dāng)前是stute=2向stute=1轉(zhuǎn)時嚼摩,結(jié)束上一個動畫
                animator_stute2.cancel();
            }
            startAnimator();
        } else if (stute == 2) {
            if (animator_stute1 != null)//當(dāng)前是stute=1向stute=2轉(zhuǎn)時,結(jié)束上一個動畫
                animator_stute1.cancel();
            startCountDown();
        }
    }

    /**
     * 開啟動畫
     */
    private void startAnimator() {
        animator_stute1 = ValueAnimator.ofInt(360);
        animator_stute1.setDuration(2000);
        animator_stute1.setInterpolator(new LinearInterpolator());
        animator_stute1.setRepeatCount(ValueAnimator.INFINITE);
        animator_stute1.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator valueAnimator) {
                matrix.postRotate(DEGREES, progress_bitmap.getWidth() / 2, progress_bitmap.getHeight() / 2);
                postInvalidate();
            }
        });
        animator_stute1.start();
    }

    /**
     * 停止的動畫
     */
    private void startCountDown() {
        index=360;//將index設(shè)置為初始值
        animator_stute2 = ValueAnimator.ofInt(360);
        animator_stute2.setDuration(TIME_FOR_SOTP);
        animator_stute2.setInterpolator(new LinearInterpolator());
        animator_stute2.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator valueAnimator) {
                index -= S;
                if (index <= 0) {
                    stute = 0;//設(shè)置為初始狀態(tài)
                    index = 360;//將index設(shè)置為初始狀態(tài)
                    is_stop = true;//停止動畫結(jié)束
                }
                postInvalidate();
            }
        });
        animator_stute2.start();
    }
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        if (event.getAction() == MotionEvent.ACTION_UP && !is_stop && stute == 2) {
            setStute(1);//沒有結(jié)束停止動畫博肋,就返回出車動畫
            index=360;
        } else if (event.getAction() == MotionEvent.ACTION_UP && is_stop && stute == 0) {
            is_stop = false;//當(dāng)前停止動畫已經(jīng)結(jié)束低斋,則將is_stop設(shè)置為初始值
            return true;
        }
        return super.onTouchEvent(event);
    }

    private void init(Context context, AttributeSet attrs) {
        //獲取自定義屬性值
        TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.MyProgressView);
        screenWidth = ScreenUtils.getScreenWidth(context);
        round_radius = a.getInt(R.styleable.MyProgressView_round_radius, screenWidth / 14);//默認(rèn)大小為屏幕寬度的6分之一
        ring_width = a.getInt(R.styleable.MyProgressView_ring_width, 16);//默認(rèn)外圓的寬度為20
        space_inner_out = a.getInt(R.styleable.MyProgressView_space_inner_out, 30);
        //獲取文字的大小,默認(rèn)為30
        text_size = a.getInt(R.styleable.MyProgressView_text_size, 30);
        text_color = a.getColor(R.styleable.MyProgressView_text_color, Color.WHITE);
        mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
        start_round_color = a.getColor(R.styleable.MyProgressView_start_round_color,Color.BLUE);
        centre_round_color = a.getColor(R.styleable.MyProgressView_centre_round_color,Color.RED);
        calculate();
    }

    /**
     * 計算
     */
    public void calculate() {
        //計算view的大小
        viewSizw = round_radius * 2 + ring_width * 2 + space_inner_out * 2;
        //獲取bitmap
        Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.yuanhuan);
        progress_bitmap = Bitmap.createScaledBitmap(bitmap, viewSizw, viewSizw, true);
        //繪制旋轉(zhuǎn)動畫用到的matrix
        matrix = new Matrix();
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        setMeasuredDimension(viewSizw, viewSizw);//設(shè)置view的大小是上面計算的
        //圓環(huán)的位置
        ring_rect = new RectF(0+ring_width/2, 0+ring_width/2,getWidth()-ring_width/2,getHeight()-ring_width/2);
        width = getWidth();
        height = getHeight();
        //圓心
        cx = width / 2;
        cy = height / 2;
    }
    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        switch (stute) {
            case 0://開始
                //繪制內(nèi)圓
                mPaint.setColor(start_round_color);
                mPaint.setStyle(Paint.Style.FILL);
                canvas.drawCircle(cx, cy, round_radius, mPaint);//繪制內(nèi)圓
                //繪制外圓環(huán)
                mPaint.setStyle(Paint.Style.STROKE);
                mPaint.setStrokeWidth(ring_width);
                canvas.drawCircle(cx, cy, width / 2 - ring_width / 2, mPaint);
                //繪制文字
                mPaint.setStrokeWidth(0);
                mPaint.setColor(text_color);
                mPaint.setTextSize(text_size);
                float v = mPaint.measureText(START_TEXT);
                canvas.drawText(START_TEXT, width / 2 - v / 2, height / 2 + text_size / 2, mPaint);
                break;
            case 1:
                //繪制內(nèi)圓
                mPaint.setColor(centre_round_color);
                mPaint.setStyle(Paint.Style.FILL);
                canvas.drawCircle(cx, cy, round_radius, mPaint);//繪制內(nèi)圓

                //繪制文字
                mPaint.setStrokeWidth(0);
                mPaint.setColor(text_color);
                mPaint.setTextSize(text_size);
                float v1 = mPaint.measureText(CENTRE_TEXT);
                canvas.drawText(CENTRE_TEXT, width / 2 - v1 / 2, height / 2 + text_size / 2, mPaint);
                //繪制外圓環(huán)
                canvas.drawBitmap(progress_bitmap, matrix, mPaint);
                break;
            case 2:
                //繪制內(nèi)圓
                mPaint.setColor(centre_round_color);
                mPaint.setStyle(Paint.Style.FILL);
                canvas.drawCircle(cx, cy, round_radius, mPaint);//繪制內(nèi)圓
                //繪制外圓環(huán)
                mPaint.setStyle(Paint.Style.STROKE);
                mPaint.setStrokeWidth(ring_width);
                canvas.drawArc(ring_rect, 270, index, false, mPaint);
                //繪制文字
                mPaint.setStrokeWidth(0);
                mPaint.setColor(text_color);
                mPaint.setTextSize(text_size);
                float v2 = mPaint.measureText(CENTRE_TEXT);
                canvas.drawText(CENTRE_TEXT, width / 2 - v2 / 2, height / 2 + text_size / 2, mPaint);
                break;
        }
    }
}

由于寫的比較倉促所以可能沒有解釋的很詳細(xì)匪凡,正好讀者就可以仔細(xì)推敲了

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末膊畴,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子病游,更是在濱河造成了極大的恐慌唇跨,老刑警劉巖稠通,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異买猖,居然都是意外死亡改橘,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進(jìn)店門玉控,熙熙樓的掌柜王于貴愁眉苦臉地迎上來飞主,“玉大人,你說我怎么就攤上這事高诺÷凳叮” “怎么了?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵虱而,是天一觀的道長筏餐。 經(jīng)常有香客問我,道長牡拇,這世上最難降的妖魔是什么魁瞪? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮惠呼,結(jié)果婚禮上导俘,老公的妹妹穿的比我還像新娘。我一直安慰自己罢杉,他們只是感情好趟畏,可當(dāng)我...
    茶點故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著滩租,像睡著了一般赋秀。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上律想,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天猎莲,我揣著相機(jī)與錄音,去河邊找鬼技即。 笑死著洼,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的而叼。 我是一名探鬼主播身笤,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼葵陵!你這毒婦竟也來了液荸?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤脱篙,失蹤者是張志新(化名)和其女友劉穎娇钱,沒想到半個月后伤柄,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡文搂,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年适刀,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片煤蹭。...
    茶點故事閱讀 39,834評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡笔喉,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出疯兼,到底是詐尸還是另有隱情然遏,我是刑警寧澤,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布吧彪,位于F島的核電站,受9級特大地震影響丢早,放射性物質(zhì)發(fā)生泄漏姨裸。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一怨酝、第九天 我趴在偏房一處隱蔽的房頂上張望傀缩。 院中可真熱鬧,春花似錦农猬、人聲如沸赡艰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽慷垮。三九已至,卻和暖如春揍堕,著一層夾襖步出監(jiān)牢的瞬間料身,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工衩茸, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留芹血,地道東北人。 一個月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓楞慈,卻偏偏與公主長得像幔烛,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子囊蓝,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,779評論 2 354

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

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,111評論 25 707
  • 內(nèi)容抽屜菜單ListViewWebViewSwitchButton按鈕點贊按鈕進(jìn)度條TabLayout圖標(biāo)下拉刷新...
    皇小弟閱讀 46,759評論 22 665
  • 紅點:善良饿悬,熱情,重情重義慎颗,有執(zhí)行力 黑點:不專注乡恕,不堅持言询,不會演講,不喜歡喝酒應(yīng)酬傲宜≡撕迹口才不好,又沒有什么銷售技巧函卒。
    塵埃里的一粒沙閱讀 164評論 0 0
  • 感賞自己一次次在氣急敗壞的時候辆憔,相信只要我堅持,感賞兒子兒子的好报嵌,他一定會好的 感賞兒子上午不愿意寫作業(yè)的時候虱咧,在...
    果然媽閱讀 155評論 4 6
  • 我?guī)鄼C(jī),你帶上錢锚国,我們遠(yuǎn)行腕巡。 你在沙漠里見過我嗎 我好像在那片山間見過你 你坐在大石頭上面 細(xì)數(shù)年月 遠(yuǎn)方與你 ...
    __舊隱閱讀 322評論 0 0