Android自定義儀表盤 并實現(xiàn)動畫

packagecom.yuntong.tv.view;

importandroid.animation.ValueAnimator;

importandroid.content.Context;

importandroid.content.res.TypedArray;

importandroid.graphics.Bitmap;

importandroid.graphics.BitmapFactory;

importandroid.graphics.Canvas;

importandroid.graphics.Color;

importandroid.graphics.Paint;

importandroid.graphics.PaintFlagsDrawFilter;

import android.graphics.RectF;

importandroid.os.Handler;

importandroid.os.Message;

importandroid.text.TextUtils;

importandroid.util.AttributeSet;

importandroid.view.View;

importandroid.view.animation.AccelerateDecelerateInterpolator;

importandroid.view.animation.LinearInterpolator;

importcom.yuntong.tv.R;

/**

* Created by ctdw on 2017/1/10.

*/

public classYiBiaoPanViewNewextendsView {

privateContextcontext;

//刻度的結(jié)束位置

private intendDst;

//刻度的開始位置

private intstartDst;

//外環(huán)圖片

privateBitmapmBitmapOutRing;

//光標圖片

privateBitmapmBitmapGuangBiao;

//外環(huán)底部圖片

privateBitmapmBitmapOutDoor;

//當前的刻度

private intmPerent;

//View的寬

private intmWidth;

//View的高

private intmHeight;

//總刻度的顏色

private inttotalKeDuColor;

//當前刻度的顏色

private intcurrentKeDuColor;

//最外層圖片圓環(huán)和底部圖片的畫筆寬度

private intoutPaintWidth;

//畫刻度的畫筆寬度

private intkeduPaintWidth;

privatePaintFlagsDrawFiltermPaintFlagsDrawFilter;

//外層圓環(huán)和底部圖片畫筆

privatePaintmBitmapOutRingAndOutDoorPaint;

//總刻度的畫筆

privatePaintmTotalKeduPaint;

//當前刻度的畫筆

privatePaintmCurrentKeduPaint;

//最外層圓環(huán)圖片的矩陣

privateRectFmBitmapOutRingRectf;

//底部圖片的矩陣

privateRectFmBitmapOutDoorRecft;

private intmBitmapOutRingWidth;

private intmBitmapOutRingHeight;

private intmBitmapOutDoorWidth;

private intmBitmapOutDoorHeight;

//文本的畫筆

privatePaintmCenterTextPaint;

//最上層文本的顏色

private static final intWHITE_COLOR= Color.parseColor("#ffffff");

//底部文本顏色

private static final intBLACK_COLOR= Color.parseColor("#000000");

//室內(nèi)PM2.5

privateStringmPmText;

privateStringmPmTextNumber;

privateStringmPmTextLevel;

privateStringmPmTextOut;

private intcurrentKeDuColorDi;

private intmMaxNum=1000;

private intmMinNum=0;

private intmMinNumOut=0;

private intmPerents=0;

privateRectFmBitmapGuangBiaoRectf;

private intmBitmapGuangBiaoWidth;

private intmBitmapGuangBiaoHeight;

private float[]pos;

private float[]tan;

privateRectFmMiddleProgressRect;

private floatmStartAngle=139f;

private floatmCurrentAngle=0f;

privatePaintmArcProgressPaint;

private floatmTotalAngle;

privatePaintmCenterTextPaints;

privatePaintmCenterTextPaints1;

privateStringmUnitPM25="";

publicYiBiaoPanViewNew(Context context) {

this(context, null);

}

publicYiBiaoPanViewNew(Context context,AttributeSet attrs) {

this(context,attrs,0);

}

private static final intDATA_CHANGED=0;

booleanisHint=true;

HandlermHandler=newHandler() {

@Override

public voidhandleMessage(Message msg) {

switch(msg.what) {

caseDATA_CHANGED:

isHint= !isHint;

postInvalidate();

break;

}

}

};

RunnablemRunnable=newRunnable() {

@Override

public voidrun() {

mHandler.postDelayed(mRunnable,1000);

Message message =newMessage();

message.what=DATA_CHANGED;

mHandler.sendMessage(message);

}

};

publicYiBiaoPanViewNew(Context context,AttributeSet attrs, intdefStyleAttr) {

super(context,attrs,defStyleAttr);

this.context= context;

TypedArray typedArray = context.obtainStyledAttributes(attrs,R.styleable.PanelView);

totalKeDuColor= typedArray.getColor(R.styleable.PanelView_keduColor,Color.parseColor("#365275"));

//? ? ? ? currentKeDuColor = typedArray.getColor(R.styleable.PanelView_arcColor, Color.parseColor("#14B8D4"));

outPaintWidth= typedArray.getDimensionPixelSize(R.styleable.PanelView_outPaintWidth,5);

keduPaintWidth= typedArray.getDimensionPixelSize(R.styleable.PanelView_keduPaintWidth,3);

startDst= typedArray.getDimensionPixelOffset(R.styleable.PanelView_startDst,22);

endDst= typedArray.getDimensionPixelOffset(R.styleable.PanelView_endDst,45);

//初始化畫筆

init();

mHandler.post(mRunnable);

}

/**

*初始化畫筆

*/

private voidinit() {

//設(shè)置圖片線條的抗鋸齒

mPaintFlagsDrawFilter=newPaintFlagsDrawFilter

(0,Paint.ANTI_ALIAS_FLAG| Paint.FILTER_BITMAP_FLAG);

//外層圓環(huán)和底部圖片畫筆

mBitmapOutRingAndOutDoorPaint=newPaint();

mBitmapOutRingAndOutDoorPaint.setStyle(Paint.Style.STROKE);

mBitmapOutRingAndOutDoorPaint.setStrokeWidth(outPaintWidth);

//總刻度的畫筆

mTotalKeduPaint=newPaint();

mTotalKeduPaint.setStyle(Paint.Style.STROKE);

mTotalKeduPaint.setStrokeWidth(keduPaintWidth);

mTotalKeduPaint.setColor(totalKeDuColor);

//當前刻度的畫筆

mCurrentKeduPaint=newPaint();

mCurrentKeduPaint.setStyle(Paint.Style.STROKE);

mCurrentKeduPaint.setStrokeWidth(keduPaintWidth);

//文本畫筆

mCenterTextPaint=newPaint();

mCenterTextPaint.setTextAlign(Paint.Align.CENTER);

mCenterTextPaints=newPaint();

mCenterTextPaints.setTextAlign(Paint.Align.RIGHT);

mCenterTextPaints1=newPaint();

mCenterTextPaints1.setTextAlign(Paint.Align.LEFT);

mArcProgressPaint=newPaint(Paint.ANTI_ALIAS_FLAG);

mArcProgressPaint.setStrokeWidth(1);

mArcProgressPaint.setColor(Color.TRANSPARENT);

mArcProgressPaint.setStyle(Paint.Style.STROKE);

mArcProgressPaint.setStrokeCap(Paint.Cap.ROUND);

}

/**

*測量控件的寬和高

*

*@paramwidthMeasureSpec

*@paramheightMeasureSpec

*/

@Override

protected voidonMeasure(intwidthMeasureSpec, intheightMeasureSpec) {

intwidthSize = MeasureSpec.getSize(widthMeasureSpec);

intwidthMode = MeasureSpec.getMode(widthMeasureSpec);

intheightSize = MeasureSpec.getSize(heightMeasureSpec);

intheightMode = MeasureSpec.getMode(heightMeasureSpec);

if(widthMode == MeasureSpec.EXACTLY) {

mWidth= widthSize;

}else{

mWidth=477;

}

if(heightMode == MeasureSpec.EXACTLY) {

mHeight= heightSize;

}else{

mHeight=477;

}

setMeasuredDimension(mWidth,mHeight);

}

@Override

protected voidonDraw(Canvas canvas) {

//設(shè)置畫布繪圖無鋸齒

canvas.setDrawFilter(mPaintFlagsDrawFilter);

//畫圓環(huán)和底部圖片

drawBitmapOutRingAndDoor(canvas);

//畫文本文字

drawCenterText(canvas);

//畫總刻度

drawTotalKedu(canvas);

//畫當前刻度

drawCurrentKedu(canvas);

drawGuangBiao(canvas);

}

/**

*畫文本文字

*

*@paramcanvas

*/

private voiddrawCenterText(Canvas canvas) {

//繪制最上邊文本

mCenterTextPaint.setTextSize(36);

mCenterTextPaint.setColor(WHITE_COLOR);

canvas.drawText(mPmText,mWidth/2,outPaintWidth+114,mCenterTextPaint);

String mMinNums =mMinNum+"";

//繪制中間文本

mCenterTextPaints.setTextSize(120);

mCenterTextPaints.setColor(WHITE_COLOR);

mCenterTextPaints1.setTextSize(40);

mCenterTextPaints1.setColor(WHITE_COLOR);

intnum;

intdanwei;

if(mMinNums.length() ==4){

mCenterTextPaints.setTextSize(100);

num =40;

danwei =50;

}else{

num =30;

danwei =50;

}

canvas.drawText(mPmTextNumber,mWidth/2+ num,outPaintWidth+250,mCenterTextPaints);

canvas.drawText(mUnitPM25,mWidth/2+ danwei,outPaintWidth+250,mCenterTextPaints1);

//繪制下邊文本

mCenterTextPaint.setTextSize(35);

mCenterTextPaint.setColor(WHITE_COLOR);

canvas.drawText(mPmTextLevel,mWidth/2,mHeight-88-outPaintWidth,mCenterTextPaint);

mCenterTextPaint.setTextSize(40);

mCenterTextPaint.setColor(WHITE_COLOR);

canvas.drawText(mPmTextOut,mWidth/2,mHeight-18,mCenterTextPaint);

}

/**

*畫當前刻度

*

*@paramcanvas

*/

private voiddrawCurrentKedu(Canvas canvas) {

mCurrentKeduPaint.setColor(currentKeDuColor);

if(mPerent==0) {

//旋轉(zhuǎn)畫布

canvas.save();

canvas.rotate(-139f,mWidth/2,mWidth/2);

//旋轉(zhuǎn)的角度

floatrAngle = (280.9f/100);

for(inti =1;i <=0;i++) {

canvas.drawLine(mWidth/2,startDst,mWidth/2,endDst,mCurrentKeduPaint);

canvas.rotate(rAngle,mWidth/2,mWidth/2);

}

canvas.restore();

}else if(mPerent==100) {

//旋轉(zhuǎn)畫布

canvas.save();

//旋轉(zhuǎn)的角度

floatrAngle = (280.9f/100);

canvas.rotate(-139,mWidth/2,mWidth/2);

for(inti =1;i <=100;i++) {

if(i ==100) {

if(isHint) {

canvas.drawLine(mWidth/2,startDst,mWidth/2,endDst,mCurrentKeduPaint);

}

}

canvas.rotate(rAngle,mWidth/2,mWidth/2);

}

canvas.restore();

//旋轉(zhuǎn)畫布

canvas.save();

//旋轉(zhuǎn)的角度

floatrAngles = (280.9f/100);

canvas.rotate(-139,mWidth/2,mWidth/2);

for(inti =1;i <100;i++) {

canvas.drawLine(mWidth/2,startDst,mWidth/2,endDst,mCurrentKeduPaint);

canvas.rotate(rAngles,mWidth/2,mWidth/2);

}

canvas.restore();

}else{

//旋轉(zhuǎn)畫布

canvas.save();

//旋轉(zhuǎn)的角度

floatrAngle = (280.9f/100);

canvas.rotate(-139,mWidth/2,mWidth/2);

for(inti =1;i <=mPerents;i++) {

if(i ==mPerents) {

if(isHint) {

canvas.drawLine(mWidth/2,startDst,mWidth/2,endDst,mCurrentKeduPaint);

}

}

canvas.rotate(rAngle,mWidth/2,mWidth/2);

}

canvas.restore();

//旋轉(zhuǎn)畫布

canvas.save();

//旋轉(zhuǎn)的角度

floatrAngles = (280.9f/100);

canvas.rotate(-139,mWidth/2,mWidth/2);

for(inti =1;i

canvas.drawLine(mWidth/2,startDst,mWidth/2,endDst,mCurrentKeduPaint);

canvas.rotate(rAngles,mWidth/2,mWidth/2);

}

canvas.restore();

}

}

private voiddrawGuangBiao(Canvas canvas) {

mCurrentKeduPaint.setColor(currentKeDuColor);

//光標的矩陣

mBitmapGuangBiaoRectf=newRectF((mWidth-mBitmapGuangBiaoWidth) /2,outPaintWidth/2+ dp2px(3f),(mWidth-mBitmapGuangBiaoWidth) /2+mBitmapGuangBiaoWidth,outPaintWidth/2+ dp2px(3f) +mBitmapGuangBiaoHeight);

if(mPerents==0) {

//旋轉(zhuǎn)畫布

canvas.save();

canvas.rotate(-139f,mWidth/2,mWidth/2);

//旋轉(zhuǎn)的角度

floatrAngle = (280.9f/100);

for(inti =1;i <=0;i++) {

canvas.rotate(rAngle,mWidth/2,mWidth/2);

}

if(isHint) {

canvas.drawBitmap(mBitmapGuangBiao, null,mBitmapGuangBiaoRectf,mCurrentKeduPaint);

}

canvas.restore();

}else if(mPerents==100) {

//旋轉(zhuǎn)畫布

canvas.save();

canvas.rotate(-139f,mWidth/2,mWidth/2);

//旋轉(zhuǎn)的角度

floatrAngle = (280.9f/100);

for(inti =2;i <=mPerents;i++) {

canvas.rotate(rAngle,mWidth/2,mWidth/2);

}

if(isHint) {

canvas.drawBitmap(mBitmapGuangBiao, null,mBitmapGuangBiaoRectf,mCurrentKeduPaint);

}

canvas.restore();

}else{

//旋轉(zhuǎn)畫布

canvas.save();

//旋轉(zhuǎn)的角度

floatrAngle = (280.9f/100);

canvas.rotate(-139,mWidth/2,mWidth/2);

for(inti =2;i <=mPerents;i++) {

canvas.rotate(rAngle,mWidth/2,mWidth/2);

}

if(isHint) {

canvas.drawBitmap(mBitmapGuangBiao, null,mBitmapGuangBiaoRectf,mCurrentKeduPaint);

}

canvas.restore();

}

}

/**

*畫總刻度

*

*@paramcanvas

*/

private voiddrawTotalKedu(Canvas canvas) {

canvas.save();

canvas.rotate(139f,mWidth/2,mWidth/2);

//旋轉(zhuǎn)的角度

floatrAngle = -280.9f/100;

for(inti =1;i <=100;i++) {

canvas.drawLine(mWidth/2,startDst,mWidth/2,endDst,mTotalKeduPaint);

canvas.rotate(rAngle,mWidth/2,mWidth/2);

}

canvas.restore();

}

/**

*畫圓環(huán)和底部圖片

*

*@paramcanvas

*/

private voiddrawBitmapOutRingAndDoor(Canvas canvas) {

mBitmapOutRingAndOutDoorPaint.setColor(currentKeDuColorDi);

//最外層圓環(huán)圖片的矩陣

mBitmapOutRingRectf=newRectF(outPaintWidth/2,outPaintWidth/2,mWidth-outPaintWidth/2,mHeight-outPaintWidth/2);

//底部圖片的矩陣

mBitmapOutDoorRecft=newRectF((mWidth-mBitmapOutDoorWidth-outPaintWidth) /2+3,mHeight-mBitmapOutDoorHeight-outPaintWidth/2+2,(mWidth-mBitmapOutDoorWidth) /2+mBitmapOutDoorWidth+outPaintWidth/2-2,mHeight);

canvas.drawBitmap(mBitmapOutDoor, null,mBitmapOutDoorRecft,mBitmapOutRingAndOutDoorPaint);

mBitmapOutRingAndOutDoorPaint.setColor(currentKeDuColor);

canvas.drawBitmap(mBitmapOutRing, null,mBitmapOutRingRectf,mBitmapOutRingAndOutDoorPaint);

}

/**

*設(shè)置當前PM25的值

*@paramnumber

*@paramnumOut

*@paramvalues

*@parami

*@paramunitPM25

*/

public voidsetCurrentPM25Values(intnumber,String numOut,String values, inti,String unitPM25) {

intnumberOut;

if(TextUtils.equals("",numOut)) {

numberOut =0;

}else{

numberOut = Integer.parseInt(numOut);

}

if(i <=35&& i >=0) {

//空氣質(zhì)量優(yōu)

mPerent= number;

mPmTextLevel="空氣質(zhì)量優(yōu)";

mBitmapOutRing= BitmapFactory.decodeResource(getResources(),R.drawable.pollution_degree1);

mBitmapGuangBiao= BitmapFactory.decodeResource(getResources(),R.drawable.cursor_icon1);

currentKeDuColor= Color.parseColor("#5dca7e");

currentKeDuColorDi= Color.parseColor("#5dca7e");

mBitmapOutDoor= BitmapFactory.decodeResource(getResources(),R.drawable.outdoor_data_bg1);

}else if(i >35&& i <=75) {

//空氣質(zhì)量良

mPmTextLevel="空氣質(zhì)量良";

mPerent= number;

currentKeDuColor= Color.parseColor("#a6d062");

mBitmapGuangBiao= BitmapFactory.decodeResource(getResources(),R.drawable.cursor_icon2);

mBitmapOutRing= BitmapFactory.decodeResource(getResources(),R.drawable.pollution_degree2);

currentKeDuColorDi= Color.parseColor("#a6d062");

mBitmapOutDoor= BitmapFactory.decodeResource(getResources(),R.drawable.outdoor_data_bg2);

}else if(i >75&& i <=115) {

//輕度污染

mPerent= number;

mPmTextLevel="輕度污染";

currentKeDuColor= Color.parseColor("#f9cf61");

mBitmapGuangBiao= BitmapFactory.decodeResource(getResources(),R.drawable.cursor_icon3);

mBitmapOutRing= BitmapFactory.decodeResource(getResources(),R.drawable.pollution_degree3);

currentKeDuColorDi= Color.parseColor("#f9cf61");

mBitmapOutDoor= BitmapFactory.decodeResource(getResources(),R.drawable.outdoor_data_bg3);

}else if(i >115&& i <=150) {

//中度污染

mPerent= number;

mPmTextLevel="中度污染";

currentKeDuColor= Color.parseColor("#fcb161");

mBitmapGuangBiao= BitmapFactory.decodeResource(getResources(),R.drawable.cursor_icon4);

mBitmapOutRing= BitmapFactory.decodeResource(getResources(),R.drawable.pollution_degree4);

currentKeDuColorDi= Color.parseColor("#fcb161");

mBitmapOutDoor= BitmapFactory.decodeResource(getResources(),R.drawable.outdoor_data_bg4);

}else if(i >150&& i <=250) {

//重度污染

mPerent= number;

mPmTextLevel="重度污染";

mTotalAngle= number *280.9f/100;

currentKeDuColor= Color.parseColor("#ef855b");

mBitmapGuangBiao= BitmapFactory.decodeResource(getResources(),R.drawable.cursor_icon5);

mBitmapOutRing= BitmapFactory.decodeResource(getResources(),R.drawable.pollution_degree5);

currentKeDuColorDi= Color.parseColor("#ef855b");

mBitmapOutDoor= BitmapFactory.decodeResource(getResources(),R.drawable.outdoor_data_bg5);

}else if(i >250&& i <=1000) {

//嚴重污染

mPerent= number;

mPmTextLevel="嚴重污染";

mTotalAngle=280.9f;

currentKeDuColor= Color.parseColor("#ed6160");

mBitmapGuangBiao= BitmapFactory.decodeResource(getResources(),R.drawable.cursor_icon6);

mBitmapOutRing= BitmapFactory.decodeResource(getResources(),R.drawable.pollution_degree6);

currentKeDuColorDi= Color.parseColor("#ed6160");

mBitmapOutDoor= BitmapFactory.decodeResource(getResources(),R.drawable.outdoor_data_bg6);

}else{

//嚴重污染

mPerent=100;

mPmTextLevel="嚴重污染";

mTotalAngle=280.9f;

currentKeDuColor= Color.parseColor("#ed6160");

mBitmapGuangBiao= BitmapFactory.decodeResource(getResources(),R.drawable.cursor_icon6);

mBitmapOutRing= BitmapFactory.decodeResource(getResources(),R.drawable.pollution_degree6);

currentKeDuColorDi= Color.parseColor("#ed6160");

mBitmapOutDoor= BitmapFactory.decodeResource(getResources(),R.drawable.outdoor_data_bg6);

}

this.mUnitPM25= unitPM25;

mPmText="室內(nèi)PM2.5";

mPmTextNumber= values;

mPmTextOut="室外:"+ numOut;

mBitmapOutRingWidth=mBitmapOutRing.getWidth();

mBitmapOutRingHeight=mBitmapOutRing.getHeight();

mBitmapGuangBiaoWidth=px2dip(context,mBitmapGuangBiao.getWidth());

mBitmapGuangBiaoHeight=px2dip(context,mBitmapGuangBiao.getHeight());

mBitmapOutDoorWidth=px2dip(context,mBitmapOutDoor.getWidth());

mBitmapOutDoorHeight=px2dip(context,mBitmapOutDoor.getHeight());

startRotateAnim(number,values,numOut,mTotalAngle);

}

/**

*開始刻度繪制動畫和數(shù)字的改變 和文字的改變

*/

private voidstartRotateAnim(intnum,String values,String numOut, floattotalAngle) {

ValueAnimator mAngleAnim = ValueAnimator.ofFloat(mCurrentAngle,totalAngle);

mAngleAnim.setInterpolator(newAccelerateDecelerateInterpolator());

mAngleAnim.setDuration(2000);

mAngleAnim.addUpdateListener(newValueAnimator.AnimatorUpdateListener() {

@Override

public voidonAnimationUpdate(ValueAnimator valueAnimator) {

mCurrentAngle= (float) valueAnimator.getAnimatedValue();

postInvalidate();

}

});

mAngleAnim.start();

ValueAnimator keduAnim = ValueAnimator.ofInt(mPerents,num);

keduAnim.setInterpolator(newAccelerateDecelerateInterpolator());

keduAnim.setDuration(2000);

keduAnim.addUpdateListener(newValueAnimator.AnimatorUpdateListener() {

@Override

public voidonAnimationUpdate(ValueAnimator animation) {

mPerents= (int) animation.getAnimatedValue();

postInvalidate();

}

});

keduAnim.start();

ValueAnimator mNumAnim = ValueAnimator.ofInt(mMinNum,Integer.parseInt(values));

mNumAnim.setDuration(2000);

mNumAnim.setInterpolator(newLinearInterpolator());

mNumAnim.addUpdateListener(newValueAnimator.AnimatorUpdateListener() {

@Override

public voidonAnimationUpdate(ValueAnimator valueAnimator) {

mMinNum= (int) valueAnimator.getAnimatedValue();

postInvalidate();

}

});

mNumAnim.start();

ValueAnimator mNumAnimOut = ValueAnimator.ofInt(mMinNumOut,Integer.parseInt(numOut));

mNumAnimOut.setDuration(2000);

mNumAnimOut.setInterpolator(newLinearInterpolator());

mNumAnimOut.addUpdateListener(newValueAnimator.AnimatorUpdateListener() {

@Override

public voidonAnimationUpdate(ValueAnimator valueAnimator) {

mMinNumOut= (int) valueAnimator.getAnimatedValue();

postInvalidate();

}

});

mNumAnimOut.start();

}

/**

* dp2px

*/

public intdp2px(floatvalues) {

floatdensity = getResources().getDisplayMetrics().density;

return(int) (values * density +0.5f);

}

public static intpx2dip(Context context, intpxValue) {

floatscale = context.getResources().getDisplayMetrics().density;

return(int) (pxValue / scale +0.5f);

}

}



附上自定義屬性





最后附上效果圖:




最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末辈双,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子柜砾,更是在濱河造成了極大的恐慌湃望,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件痰驱,死亡現(xiàn)場離奇詭異证芭,居然都是意外死亡,警方通過查閱死者的電腦和手機担映,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進店門檩帐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人另萤,你說我怎么就攤上這事湃密。” “怎么了四敞?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵泛源,是天一觀的道長。 經(jīng)常有香客問我忿危,道長达箍,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任铺厨,我火速辦了婚禮缎玫,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘解滓。我一直安慰自己赃磨,他們只是感情好,可當我...
    茶點故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布洼裤。 她就那樣靜靜地躺著邻辉,像睡著了一般。 火紅的嫁衣襯著肌膚如雪腮鞍。 梳的紋絲不亂的頭發(fā)上值骇,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天,我揣著相機與錄音移国,去河邊找鬼吱瘩。 笑死,一個胖子當著我的面吹牛迹缀,可吹牛的內(nèi)容都是我干的使碾。 我是一名探鬼主播皱卓,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼部逮!你這毒婦竟也來了娜汁?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤兄朋,失蹤者是張志新(化名)和其女友劉穎掐禁,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體颅和,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡傅事,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了峡扩。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蹭越。...
    茶點故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖教届,靈堂內(nèi)的尸體忽然破棺而出响鹃,到底是詐尸還是另有隱情,我是刑警寧澤案训,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布买置,位于F島的核電站,受9級特大地震影響强霎,放射性物質(zhì)發(fā)生泄漏忿项。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一城舞、第九天 我趴在偏房一處隱蔽的房頂上張望轩触。 院中可真熱鬧,春花似錦家夺、人聲如沸脱柱。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽褐捻。三九已至掸茅,卻和暖如春椅邓,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背昧狮。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工景馁, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人逗鸣。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓合住,卻偏偏與公主長得像绰精,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子透葛,可洞房花燭夜當晚...
    茶點故事閱讀 42,792評論 2 345

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