Android自定義View四(Canvas與ValueAnimator)

一患蹂、Canvas

1、創(chuàng)建畫筆

創(chuàng)建畫筆并初始化

 public BasePieChart(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        initPaint();

    }
    /**
     * 初始化畫筆
     */
    private void initPaint(){
        mPaint=new Paint();
        mPaint.setStyle(Paint.Style.FILL);//設(shè)置畫筆填充
        mPaint.setAntiAlias(true);//抗鋸齒
    };

2砸紊、繪制坐標(biāo)軸

使用onsizeChanged方法传于,獲取根據(jù)父布局等因素確認(rèn)的View寬度


    private int mWidth;
    private int mHeight;
    @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        super.onSizeChanged(w, h, oldw, oldh);
        mWidth=w;
        mHeight=h;
    }

把原點(diǎn)移動(dòng)到屏幕中心

  @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        canvas.translate(mWidth/2,mHeight/2);
    }

繪制坐標(biāo)原點(diǎn)

   /**
     * 初始化畫筆
     */
    private void initPaint(){
        mPaint=new Paint();
        mPaint.setStyle(Paint.Style.FILL);//設(shè)置畫筆填充
        mPaint.setAntiAlias(true);//抗鋸齒
        mPaint.setColor(Color.RED);//設(shè)置畫筆顏色
        mPaint.setStrokeWidth(10);//設(shè)置畫筆寬度
    };
    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        canvas.translate(mWidth/2,mHeight/2);
        canvas.drawPoint(0,0,mPaint);
    }
中心原點(diǎn).png

繪制坐標(biāo)系的4個(gè)端點(diǎn),一次繪制多個(gè)點(diǎn)

  @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        canvas.translate(mWidth/2,mHeight/2);
        canvas.drawPoint(0,0,mPaint);
        float pWidth = mWidth / 2 * 0.8f;//X軸邊緣原點(diǎn)到原點(diǎn)到距離
        float pHeight = mHeight/ 2 * 0.8f;//Y軸邊緣原點(diǎn)到原點(diǎn)到距離
        canvas.drawPoints(new float[]{pWidth,0,0,pHeight,-pWidth,0,0,-pHeight},mPaint);
    }
邊緣原點(diǎn).png

繪制坐標(biāo)軸

  @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        canvas.translate(mWidth/2,mHeight/2);
        mPaint.setStrokeWidth(10);//設(shè)置原點(diǎn)寬度
        canvas.drawPoint(0,0,mPaint);//繪制原點(diǎn)
        canvas.drawPoints(new float[]{pWidth,0,0,pHeight,-pWidth,0,0,-pHeight},mPaint);//繪制邊緣點(diǎn)
        mPaint.setStrokeWidth(1);//重新設(shè)置畫筆到寬度
        canvas.drawLine(-pWidth,0,pWidth,0,mPaint);//繪制X軸
        canvas.drawLine(0,- pHeight,0, pHeight,mPaint);//繪制Y軸
    }
    @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        super.onSizeChanged(w, h, oldw, oldh);
        mWidth=w;
        mHeight=h;
        pWidth = mWidth / 2 * 0.8f;//X軸邊緣原點(diǎn)到原點(diǎn)到距離
        pHeight = mHeight/ 2 * 0.8f;//Y軸邊緣原點(diǎn)到原點(diǎn)到距離
    }
坐標(biāo)軸.png

繪制坐標(biāo)箭頭醉顽,繪制多條線

 mPaint.setStrokeWidth(3);//設(shè)置箭頭寬度
        canvas.drawLines(new float[]{pWidth,0,pWidth*0.95f,-pWidth*0.05f,pWidth,0,pWidth*0.95f,pWidth*0.05f},mPaint);//X軸箭頭
        canvas.drawLines(new float[]{0,pHeight,-pHeight*0.05f,pHeight*0.95f,0,pHeight,pHeight*0.05f,pHeight*0.95f},mPaint);//Y軸箭頭
箭頭.png

如果覺得不舒服格了,一定要箭頭向上的話,可以在繪制Y軸箭頭之前翻轉(zhuǎn)坐標(biāo)系

canvas.scale(1,-1);//翻轉(zhuǎn)Y軸

3徽鼎、畫布變換

繪制矩形

       //繪制矩形
        mPaint.setStyle(Paint.Style.STROKE);
        canvas.drawRect(-mWidth/8,-mHeight/8,mWidth/8,mHeight/8,mPaint);
矩形.png

平移盛末,同時(shí)使用new Rect方法設(shè)置矩形

 //平移畫布
        canvas.translate(150,150);
        mPaint.setColor(Color.BLUE);
        canvas.drawRect(new RectF(-mWidth/8,-mHeight/8,mWidth/8,mHeight/8),mPaint);
平移.png

縮放

 //縮放
        canvas.scale(0.5f,0.5f);
        mPaint.setColor(Color.BLUE);
        canvas.drawRect(new RectF(-mWidth/8,-mHeight/8,mWidth/8,mHeight/8),mPaint)
縮放.png

旋轉(zhuǎn)

 //旋轉(zhuǎn)
        canvas.rotate(90);
        mPaint.setColor(Color.BLUE);
        canvas.drawRect(new RectF(-mWidth/8,-mHeight/8,mWidth/8,mHeight/8),mPaint);
旋轉(zhuǎn).png

錯(cuò)切

  //錯(cuò)切
        canvas.skew(1,0.5f);
        mPaint.setColor(Color.BLUE);
        canvas.drawRect(new RectF(-mWidth/8,-mHeight/8,mWidth/8,mHeight/8),mPaint);
錯(cuò)切.png

4、畫布的保存和恢復(fù)

save():用于保存canvas的狀態(tài)否淤,之后可以調(diào)用canvas的平移悄但、旋轉(zhuǎn)、縮放石抡、錯(cuò)切檐嚣、裁剪等操作

  float r = Math.min(mWidth, mHeight) * 0.06f / 2;
        mPaint.setStyle(Paint.Style.STROKE);
        mPaint.setColor(Color.GREEN);
        canvas.save();
        canvas.rotate(90);
        canvas.drawCircle(200,0,r,mPaint);
        canvas.restore();
        mPaint.setColor(Color.BLUE);
        canvas.drawCircle(200,0,r,mPaint);
````

![save.png](http://upload-images.jianshu.io/upload_images/3523210-5b4b715e7f12b8fb.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

保存畫布,旋轉(zhuǎn)90°啰扛,繪制一個(gè)圓嚎京,之后恢復(fù)畫布,使用相同參數(shù)再繪制一個(gè)圓隐解“暗郏可以看到在恢復(fù)畫布前后,相同參數(shù)繪制的圓煞茫,分別顯示在了坐標(biāo)系的不同位置帕涌。

####二摄凡、加載動(dòng)畫
繪制2個(gè)點(diǎn)和一個(gè)半圓弧
````
        mPaint.setStyle(Paint.Style.STROKE);
        mPaint.setColor(Color.GREEN);
        mPaint.setStrokeWidth(10);
        float point = Math.min(mWidth, mHeight) / 2 * 0.2f;
        float r = point*(float) Math.sqrt(2);
        RectF rectF=new RectF(-r,-r,r,r);
        canvas.drawArc(rectF,0,180,false,mPaint);
        canvas.drawPoints(new float[]{-point,-point,point,-point},mPaint);
````

![點(diǎn)半圓.png](http://upload-images.jianshu.io/upload_images/3523210-73f6052df4186b92.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
繪制連接兩點(diǎn)到270度到圓弧
````
  mPaint.setStrokeWidth(10);
        float point = Math.min(mWidth, mHeight) / 2 * 0.2f;
        float r = point*(float) Math.sqrt(2);
        RectF rectF=new RectF(-r,-r,r,r);
//        canvas.drawArc(rectF,0,180,false,mPaint);
//        canvas.drawPoints(new float[]{-point,-point,point,-point},mPaint);
        canvas.drawArc(rectF,-180,270,false,mPaint);
````
![270圓弧.png](http://upload-images.jianshu.io/upload_images/3523210-6382c29271765f8b.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
通過ValueAnimator類將笑臉和半圓進(jìn)行連貫動(dòng)畫看效果



![animatiorGIF.gif](http://upload-images.jianshu.io/upload_images/3523210-d0bc4055c24a6245.gif?imageMogr2/auto-orient/strip)
####ValueAnimator類簡單介紹
|API|描述|
|-----|-----|
|ofFloat(float'''values)|構(gòu)建ValueAnimator,設(shè)置動(dòng)畫到浮點(diǎn)值,需要設(shè)置2個(gè)以上到值|
|setDuration(long   duration)|設(shè)置動(dòng)畫時(shí)長蚓曼,默認(rèn)到持續(xù)時(shí)間為300毫秒|
|setInterpolator(Timelnterpolator value)|設(shè)置動(dòng)畫到線性非線性運(yùn)動(dòng)亲澡,默認(rèn)AccelerateDecelerateinterpolator|
|addUpdateListener(ValueAnimator.AnimatorUpdateListener listener)|監(jiān)聽動(dòng)畫屬性每一幀的變化|
####動(dòng)畫部分
````
 public ValueAnimator animator;
    private float animatedValue;
    private TimeInterpolator timeInterpolator =  new  DecelerateInterpolator();

    private void initAnimator(long duration){
        if(animator!=null&&animator.isRunning()){
            animator.cancel();
            animator.start();
        }else{
            animator=ValueAnimator.ofFloat(0,855).setDuration(duration);
            animator.setInterpolator(timeInterpolator);
            animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
                @Override
                public void onAnimationUpdate(ValueAnimator animation) {
                     animatedValue =(float) animation.getAnimatedValue();
//                    Log.d("DXDD",animatedValue+"");
                    invalidate();
                }
            });
        }
    }
````
表情部分:在繪制前最好使用sava()方法保存當(dāng)前的畫布狀態(tài),在結(jié)束后使用restore()恢復(fù)之前保存的狀態(tài)纫版。角度計(jì)算慢慢順順就明白了
````
 //設(shè)置動(dòng)畫
    private void  setAnimator(Canvas canvas,Paint mPaint){
        mPaint.setStyle(Paint.Style.STROKE);//描邊
        mPaint.setStrokeCap(Paint.Cap.ROUND);//圓角筆觸
        mPaint.setColor(Color.parseColor("#F84B25"));
        mPaint.setStrokeWidth(15);
        float point = Math.min(mWidth,mHeight)*0.06f/2;
        float r = point*(float) Math.sqrt(2);
        RectF rectF = new RectF(-r,-r,r,r);
        canvas.save();

        if(animatedValue>=135){
            canvas.rotate(animatedValue-135);
        }
        float startAngle=0, sweepAngle=0;
        if (animatedValue<135){
            startAngle = animatedValue +5;
            sweepAngle = 170+animatedValue/3;
        }else if (animatedValue<270){
            startAngle = 135+5;
            sweepAngle = 170+animatedValue/3;
        }else if (animatedValue<630){
            startAngle = 135+5;
            sweepAngle = 260-(animatedValue-270)/5;
        }else if (animatedValue<720){
            startAngle = 135-(animatedValue-630)/2+5;
            sweepAngle = 260-(animatedValue-270)/5;
        }else{
            startAngle = 135-(animatedValue-630)/2-(animatedValue-720)/6+5;
            sweepAngle = 170;
        }
        Log.d("DXDD","startAngle:"+startAngle+"sweepAngle:"+sweepAngle);
        canvas.drawArc(rectF,startAngle,sweepAngle,false,mPaint);

        canvas.drawPoints(new float[]{
                -point,-point
                ,point,-point
        },mPaint);
        canvas.restore();
    }
````
以下貼出源碼
####xml
····
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.hedan.hedan_pie_char.MainActivity">

    <com.hedan.hedan_pie_char.BasePieChart
        android:id="@+id/basePieChart"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        />
    <Button
        android:id="@+id/button"
        android:layout_width="100dp"
        android:layout_height="50dp"
        android:text="開始"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        />

</RelativeLayout>
····
####MainActivity
````
public class MainActivity extends AppCompatActivity {

    private BasePieChart pieChart;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        pieChart = (BasePieChart) findViewById(R.id.basePieChart);
        findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                pieChart.animator.start();
            }
        });
    }
}
````
####BasePieChart.java
````
/**
 * Created by DengXiao on 2017/2/13.
 */

public class BasePieChart extends View {
    private Paint mPaint;
    private float pWidth;
    private float pHeight;
    private int mWidth;
    private int mHeight;



    public BasePieChart(Context context) {
        this(context,null);
    }

    public BasePieChart(Context context, AttributeSet attrs) {
        this(context,attrs,0);
    }

    public BasePieChart(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        initPaint();
    }
    /**
     * 初始化畫筆
     */
    private void initPaint(){
        mPaint=new Paint();
        mPaint.setStyle(Paint.Style.FILL);//設(shè)置畫筆填充
        mPaint.setAntiAlias(true);//抗鋸齒
        mPaint.setColor(Color.RED);//設(shè)置畫筆顏色

    };
    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        canvas.translate(mWidth/2,mHeight/2);

//        canvas.scale(1,-1);
     /*   mPaint.setStrokeWidth(10);//設(shè)置原點(diǎn)寬度
        canvas.drawPoint(0,0,mPaint);//繪制原點(diǎn)
        canvas.drawPoints(new float[]{pWidth,0,0,pHeight,-pWidth,0,0,-pHeight},mPaint);//繪制邊緣點(diǎn)*/

       /* mPaint.setStrokeWidth(1);//重新設(shè)置畫筆到寬度
        canvas.drawLine(-pWidth,0,pWidth,0,mPaint);//繪制X軸
        canvas.drawLine(0,- pHeight,0, pHeight,mPaint);//繪制Y軸*/

       /* mPaint.setStrokeWidth(3);//設(shè)置箭頭寬度
        canvas.drawLines(new float[]{pWidth,0,pWidth*0.95f,-pWidth*0.05f,pWidth,0,pWidth*0.95f,pWidth*0.05f},mPaint);//X軸箭頭
        canvas.drawLines(new float[]{0,pHeight,-pHeight*0.05f,pHeight*0.95f,0,pHeight,pHeight*0.05f,pHeight*0.95f},mPaint);//Y軸箭頭
*/
        /*//繪制矩形
        mPaint.setStyle(Paint.Style.STROKE);
        canvas.drawRect(-mWidth/8,-mHeight/8,mWidth/8,mHeight/8,mPaint);*/
        /*//平移畫布
        canvas.translate(150,150);
        mPaint.setColor(Color.BLUE);
        canvas.drawRect(new RectF(-mWidth/8,-mHeight/8,mWidth/8,mHeight/8),mPaint);*/
       /* //縮放
        canvas.scale(0.5f,0.5f);
        mPaint.setColor(Color.BLUE);
        canvas.drawRect(new RectF(-mWidth/8,-mHeight/8,mWidth/8,mHeight/8),mPaint);*/
      /*  //旋轉(zhuǎn)
        canvas.rotate(90);
        mPaint.setColor(Color.BLUE);
        canvas.drawRect(new RectF(-mWidth/8,-mHeight/8,mWidth/8,mHeight/8),mPaint);*/
       /* //錯(cuò)切
        canvas.skew(1,0.5f);
        mPaint.setColor(Color.BLUE);
        canvas.drawRect(new RectF(-mWidth/8,-mHeight/8,mWidth/8,mHeight/8),mPaint);*/
       /* float r = Math.min(mWidth, mHeight) * 0.06f / 2;
        mPaint.setStyle(Paint.Style.STROKE);
        mPaint.setColor(Color.GREEN);
        canvas.save();
        canvas.rotate(90);
        canvas.drawCircle(200,0,r,mPaint);
        canvas.restore();
        mPaint.setColor(Color.BLUE);
        canvas.drawCircle(200,0,r,mPaint);*/
        //繪制2個(gè)點(diǎn)和一個(gè)半圓弧
 /*       mPaint.setStyle(Paint.Style.STROKE);
        mPaint.setColor(Color.GREEN);
        mPaint.setStrokeWidth(10);
        float point = Math.min(mWidth, mHeight) / 2 * 0.2f;
        float r = point*(float) Math.sqrt(2);
        RectF rectF=new RectF(-r,-r,r,r);*/
//        canvas.drawArc(rectF,0,180,false,mPaint);
//        canvas.drawPoints(new float[]{-point,-point,point,-point},mPaint);
//        canvas.drawArc(rectF,-180,270,false,mPaint);
        setAnimator(canvas,mPaint);

    }
    @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        super.onSizeChanged(w, h, oldw, oldh);
        mWidth=w;
        mHeight=h;
        pWidth = mWidth / 2 * 0.8f;//X軸邊緣原點(diǎn)到原點(diǎn)到距離
        pHeight = mHeight/ 2 * 0.8f;//Y軸邊緣原點(diǎn)到原點(diǎn)到距離
    }

    public ValueAnimator animator;
    private float animatedValue;
    private TimeInterpolator timeInterpolator =  new  DecelerateInterpolator();

    private void initAnimator(long duration){
        if(animator!=null&&animator.isRunning()){
            animator.cancel();
            animator.start();
        }else{
            animator=ValueAnimator.ofFloat(0,855).setDuration(duration);
            animator.setInterpolator(timeInterpolator);
            animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
                @Override
                public void onAnimationUpdate(ValueAnimator animation) {
                     animatedValue =(float) animation.getAnimatedValue();
//                    Log.d("DXDD",animatedValue+"");
                    invalidate();
                }
            });
        }
    }
    //設(shè)置動(dòng)畫
    private void  setAnimator(Canvas canvas,Paint mPaint){
        mPaint.setStyle(Paint.Style.STROKE);//描邊
        mPaint.setStrokeCap(Paint.Cap.ROUND);//圓角筆觸
        mPaint.setColor(Color.parseColor("#F84B25"));
        mPaint.setStrokeWidth(15);
        float point = Math.min(mWidth,mHeight)*0.06f/2;
        float r = point*(float) Math.sqrt(2);
        RectF rectF = new RectF(-r,-r,r,r);
        canvas.save();

        if(animatedValue>=135){
            canvas.rotate(animatedValue-135);
        }
        float startAngle=0, sweepAngle=0;
        if (animatedValue<135){
            startAngle = animatedValue +5;
            sweepAngle = 170+animatedValue/3;
        }else if (animatedValue<270){
            startAngle = 135+5;
            sweepAngle = 170+animatedValue/3;
        }else if (animatedValue<630){
            startAngle = 135+5;
            sweepAngle = 260-(animatedValue-270)/5;
        }else if (animatedValue<720){
            startAngle = 135-(animatedValue-630)/2+5;
            sweepAngle = 260-(animatedValue-270)/5;
        }else{
            startAngle = 135-(animatedValue-630)/2-(animatedValue-720)/6+5;
            sweepAngle = 170;
        }
        Log.d("DXDD","startAngle:"+startAngle+"sweepAngle:"+sweepAngle);
        canvas.drawArc(rectF,startAngle,sweepAngle,false,mPaint);

        canvas.drawPoints(new float[]{
                -point,-point
                ,point,-point
        },mPaint);
        canvas.restore();
    }

    @Override
    public void onWindowFocusChanged(boolean hasWindowFocus) {
        super.onWindowFocusChanged(hasWindowFocus);
        initAnimator(3000);
    }
}
````
####如有疑問歡迎交流床绪!
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市其弊,隨后出現(xiàn)的幾起案子癞己,更是在濱河造成了極大的恐慌,老刑警劉巖瑞凑,帶你破解...
    沈念sama閱讀 222,000評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件末秃,死亡現(xiàn)場離奇詭異概页,居然都是意外死亡籽御,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評論 3 399
  • 文/潘曉璐 我一進(jìn)店門惰匙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來技掏,“玉大人,你說我怎么就攤上這事项鬼⊙剖幔” “怎么了?”我有些...
    開封第一講書人閱讀 168,561評論 0 360
  • 文/不壞的土叔 我叫張陵绘盟,是天一觀的道長鸠真。 經(jīng)常有香客問我,道長龄毡,這世上最難降的妖魔是什么吠卷? 我笑而不...
    開封第一講書人閱讀 59,782評論 1 298
  • 正文 為了忘掉前任,我火速辦了婚禮沦零,結(jié)果婚禮上祭隔,老公的妹妹穿的比我還像新娘。我一直安慰自己路操,他們只是感情好疾渴,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,798評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著屯仗,像睡著了一般搞坝。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上魁袜,一...
    開封第一講書人閱讀 52,394評論 1 310
  • 那天瞄沙,我揣著相機(jī)與錄音己沛,去河邊找鬼。 笑死距境,一個(gè)胖子當(dāng)著我的面吹牛申尼,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播垫桂,決...
    沈念sama閱讀 40,952評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼师幕,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了诬滩?” 一聲冷哼從身側(cè)響起霹粥,我...
    開封第一講書人閱讀 39,852評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎疼鸟,沒想到半個(gè)月后后控,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,409評論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡空镜,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,483評論 3 341
  • 正文 我和宋清朗相戀三年浩淘,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片吴攒。...
    茶點(diǎn)故事閱讀 40,615評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡张抄,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出洼怔,到底是詐尸還是另有隱情署惯,我是刑警寧澤,帶...
    沈念sama閱讀 36,303評論 5 350
  • 正文 年R本政府宣布镣隶,位于F島的核電站极谊,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏安岂。R本人自食惡果不足惜轻猖,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,979評論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望嗜闻。 院中可真熱鬧蜕依,春花似錦、人聲如沸琉雳。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,470評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽翠肘。三九已至檐束,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間束倍,已是汗流浹背被丧。 一陣腳步聲響...
    開封第一講書人閱讀 33,571評論 1 272
  • 我被黑心中介騙來泰國打工盟戏, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人甥桂。 一個(gè)月前我還...
    沈念sama閱讀 49,041評論 3 377
  • 正文 我出身青樓柿究,卻偏偏與公主長得像,于是被迫代替她去往敵國和親黄选。 傳聞我的和親對象是個(gè)殘疾皇子蝇摸,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,630評論 2 359

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