圖片加載框架 - Glide 的使用

作者簡(jiǎn)介 原創(chuàng)微信公眾號(hào)郭霖 WeChat ID: guolin_blog

現(xiàn)在Android上的圖片加載框架非常成熟,從最早的老牌圖片加載框架UniversalImageLoader剿干,到后來(lái)Google推出的Volley他匪,再到后來(lái)的新興軍Glide和Picasso黎烈,當(dāng)然還有Facebook的Fresco灌诅。每一個(gè)都非常穩(wěn)定絮宁,功能也都十分強(qiáng)大按傅。但是它們的使用場(chǎng)景基本都是重合的捉超,也就是說(shuō)我們基本只需要選擇其中一個(gè)來(lái)進(jìn)行學(xué)習(xí)和使用就足夠了,每一個(gè)框架都嘗試去掌握的話則有些浪費(fèi)時(shí)間唯绍。

在這幾個(gè)框架當(dāng)中拼岳,我對(duì)VolleyGlide研究得比較深入,對(duì)UniversalImageLoader况芒、PicassoFresco都只是有一些基本的了解惜纸。從易用性上來(lái)講,GlidePicasso應(yīng)該都是完勝其他框架的,這兩個(gè)框架都實(shí)在是太簡(jiǎn)單好用了耐版,大多數(shù)情況下加載圖片都是一行代碼就能解決的祠够,而UniversalImageLoaderFresco則在這方面略遜一些。

總之粪牲,沒(méi)有最好的框架古瓤,只有最適合自己的框架。經(jīng)過(guò)多方面對(duì)比之后腺阳,我還是決定選擇了Glide來(lái)進(jìn)行研究落君,并且這也是Google官方推薦的圖片加載框架。

說(shuō)實(shí)話亭引,關(guān)于Glide的文章我已經(jīng)籌備了好久绎速,去年這個(gè)時(shí)候本來(lái)就打算要寫了,但是一直都沒(méi)有動(dòng)筆焙蚓。因?yàn)槿ツ晡业拇蟛糠謺r(shí)間都放在了寫

[《第二行代碼》]
(http://mp.weixin.qq.com/s?__biz=MzA5MzI3NjE2MA==&mid=2650237816&idx=1&sn=c01dfa0c78b8979db1061ae9c337cdcd&chksm=88639a17bf1413011906abb263daf07e6b4e916f259c57ed385b9b544f8fb0ebb47628c643e4&scene=21#wechat_redirect)

上面纹冤,只能用碎片時(shí)間來(lái)寫寫博客,但是Glide的難度遠(yuǎn)超出了我用碎片時(shí)間所能掌握的難度主届。

當(dāng)然赵哲,這里我說(shuō)的是對(duì)它的源碼進(jìn)行解析的難度,不是使用上的難度君丁,Glide的用法是很簡(jiǎn)單的枫夺。所以,我覺(jué)得去年我寫不好Glide這個(gè)題材的文章绘闷,也就一直拖到了今年橡庞。

而現(xiàn)在,我花費(fèi)了大量的精力去研究Glide的源碼和各種用法印蔗,相信現(xiàn)在已經(jīng)可以將它非常好地掌握了扒最,因此我準(zhǔn)備將我掌握的這些知識(shí)整理成一個(gè)新的系列,幫忙大家更好地學(xué)習(xí)Glide华嘹。這個(gè)Glide系列大概會(huì)有8篇左右文章煎源,預(yù)計(jì)花半年時(shí)間寫完,將會(huì)包括Glide的基本用法榜揖、源碼解析仰楚、高級(jí)用法、功能擴(kuò)展等內(nèi)容薛躬,可能會(huì)是目前互聯(lián)網(wǎng)上最詳盡的Glide教程俯渤。

那么本篇文章是這個(gè)系列的第一篇文章,我們先來(lái)了解一下Glide的基本用法吧型宝。
開始
Glide是一款由Bump Technologies開發(fā)的圖片加載框架八匠,使得我們可以在Android平臺(tái)上以極度簡(jiǎn)單的方式加載和展示圖片絮爷。

目前,Glide最新的穩(wěn)定版本是3.7.0梨树,雖然3.8.0已經(jīng)推出預(yù)覽版了坑夯,但是暫時(shí)問(wèn)題還比較多。因此劝萤,我們這個(gè)系列的博客都會(huì)使用Glide 3.7.0版本來(lái)進(jìn)行講解渊涝,這個(gè)版本的Glide相當(dāng)成熟和穩(wěn)定。

要想使用Glide床嫌,首先需要將這個(gè)庫(kù)引入到我們的項(xiàng)目當(dāng)中跨释。新建一個(gè)GlideTest項(xiàng)目,然后在app/build.gradle文件當(dāng)中添加如下依賴:

dependencies {    compile'com.github.bumptech.glide:glide:3.7.0'}

另外厌处,Glide中需要用到網(wǎng)絡(luò)功能鳖谈,因此你還得在AndroidManifest.xml中聲明一下網(wǎng)絡(luò)權(quán)限才行:

android:name="android.permission.INTERNET"/>

就是這么簡(jiǎn)單,然后我們就可以自由地使用Glide中的任意功能了阔涉。

加載圖片
現(xiàn)在我們就來(lái)嘗試一下如何使用Glide來(lái)加載圖片吧缆娃。比如這是必應(yīng)上一張首頁(yè)美圖的地址:
http://cn.bing.com/az/hprichbg/rb/Dongdaemun_ZH-CN10736487148_1920x1080.jpg
然后我們想要在程序當(dāng)中去加載這張圖片。

那么首先打開項(xiàng)目的布局文件瑰排,在布局當(dāng)中加入一個(gè)Button和一個(gè)ImageView贯要,如下所示:

為了讓用戶點(diǎn)擊Button的時(shí)候能夠?qū)偛诺膱D片顯示在ImageView上,我們需要修改MainActivity中的代碼椭住,如下所示:

publicclassMainActivityextendsAppCompatActivity{
     ImageViewimageView;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    imageView=(ImageView) findViewById(R.id.image);  
}

public void loadImage(View view) {
    Stringurl="http://cn.bing.com/az/hprichbg/rb/Dongdaemun_ZH- CN10736487148_1920x1080.jpg";
    Glide.with(this).load(url).into(imageView);  
}
}

沒(méi)錯(cuò)崇渗,就是這么簡(jiǎn)單。現(xiàn)在我們來(lái)運(yùn)行一下程序京郑,效果如下圖所示:


可以看到宅广,一張網(wǎng)絡(luò)上的圖片已經(jīng)被成功下載,并且展示到ImageView上了些举。
而我們到底做了什么跟狱?實(shí)際上核心的代碼就只有這一行而已:

Glide.with(this).load(url).into(imageView);

千萬(wàn)不要小看這一行代碼,實(shí)際上僅僅就這一行代碼户魏,你已經(jīng)可以做非常非常多的事情了驶臊,包括加載網(wǎng)絡(luò)上的圖片、加載手機(jī)本地的圖片叼丑、加載應(yīng)用資源中的圖片等等资铡。
下面我們就來(lái)詳細(xì)解析一下這行代碼。

首先幢码,調(diào)用Glide.with()方法用于創(chuàng)建一個(gè)加載圖片的實(shí)例。with()方法可以接收Context尖飞、Activity或者Fragment類型的參數(shù)症副。也就是說(shuō)我們選擇的范圍非常廣店雅,不管是在Activity還是Fragment中調(diào)用with()方法,都可以直接傳this贞铣。那如果調(diào)用的地方既不在Activity中也不在Fragment中呢闹啦?也沒(méi)關(guān)系,我們可以獲取當(dāng)前應(yīng)用程序的ApplicationContext辕坝,傳入到with()方法當(dāng)中窍奋。

注意with()方法中傳入的實(shí)例會(huì)決定Glide加載圖片的生命周期,如果傳入的是Activity或者Fragment的實(shí)例酱畅,那么當(dāng)這個(gè)Activity或Fragment被銷毀的時(shí)候琳袄,圖片加載也會(huì)停止。如果傳入的是ApplicationContext纺酸,那么只有當(dāng)應(yīng)用程序被殺掉的時(shí)候窖逗,圖片加載才會(huì)停止。

接下來(lái)看一下load()方法餐蔬,這個(gè)方法用于指定待加載的圖片資源碎紊。Glide支持加載各種各樣的圖片資源,包括網(wǎng)絡(luò)圖片樊诺、本地圖片仗考、應(yīng)用資源、二進(jìn)制流词爬、Uri對(duì)象等等秃嗜。因此load()方法也有很多個(gè)方法重載,除了我們剛才使用的加載一個(gè)字符串網(wǎng)址之外缸夹,你還可以這樣使用load()方法:

//加載本地圖片F(xiàn)ilefile=getImagePath();
Glide.with(this).load(file).into(imageView);
//加載應(yīng)用資源
intresource=R.drawable.image;
Glide.with(this).load(resource).into(imageView);
//加載二進(jìn)制流
byte[] image=getImageBytes();
Glide.with(this).load(image).into(imageView);
//加載Uri對(duì)象
UriimageUri=getImageUri();
Glide.with(this).load(imageUri).into(imageView);

最后看一下into()方法痪寻,這個(gè)方法就很簡(jiǎn)單了,我們希望讓圖片顯示在哪個(gè)ImageView上虽惭,把這個(gè)ImageView的實(shí)例傳進(jìn)去就可以了橡类。當(dāng)然,into()方法不僅僅是只能接收ImageView類型的參數(shù)芽唇,還支持很多更豐富的用法顾画,不過(guò)那個(gè)屬于高級(jí)技巧,我們會(huì)在后面的文章當(dāng)中學(xué)習(xí)匆笤。
那么回顧一下Glide最基本的使用方式研侣,其實(shí)就是關(guān)鍵的三步走:先with(),再load()炮捧,最后into()庶诡。熟記這三步,你就已經(jīng)入門Glide了咆课。

占位圖
現(xiàn)在我們來(lái)學(xué)一些Glide的擴(kuò)展內(nèi)容末誓。其實(shí)剛才所學(xué)的三步走就是Glide最核心的東西扯俱,而我們后面所要學(xué)習(xí)的所有東西都是在這個(gè)三步走的基礎(chǔ)上不斷進(jìn)行擴(kuò)展而已。

觀察剛才加載網(wǎng)絡(luò)圖片的效果喇澡,你會(huì)發(fā)現(xiàn)迅栅,點(diǎn)擊了Load Image按鈕之后,要稍微等一會(huì)圖片才會(huì)顯示出來(lái)晴玖。這其實(shí)很容易理解读存,因?yàn)閺木W(wǎng)絡(luò)上下載圖片本來(lái)就是需要時(shí)間的。那么我們有沒(méi)有辦法再優(yōu)化一下用戶體驗(yàn)?zāi)嘏皇海慨?dāng)然可以让簿,Glide提供了各種各樣非常豐富的API支持,其中就包括了占位圖功能榨惰。
顧名思義拜英,占位圖就是指在圖片的加載過(guò)程中,我們先顯示一張臨時(shí)的圖片琅催,等圖片加載出來(lái)了再替換成要加載的圖片居凶。

下面我們就來(lái)學(xué)習(xí)一下Glide占位圖功能的使用方法,首先我事先準(zhǔn)備好了一張loading.jpg圖片藤抡,用來(lái)作為占位圖顯示侠碧。然后修改Glide加載部分的代碼,如下所示:
Glide.with(this) .load(url) .placeholder(R.drawable.loading) .into(imageView);
沒(méi)錯(cuò)缠黍,就是這么簡(jiǎn)單弄兜。我們只是在剛才的三步走之間插入了一個(gè)placeholder()方法,然后將占位圖片的資源id傳入到這個(gè)方法中即可瓷式。另外替饿,這個(gè)占位圖的用法其實(shí)也演示了Glide當(dāng)中絕大多數(shù)API的用法,其實(shí)就是在load()和into()方法之間串接任意想添加的功能就可以了贸典。
不過(guò)如果你現(xiàn)在重新運(yùn)行一下代碼并點(diǎn)擊Load Image视卢,很可能是根本看不到占位圖效果的。因?yàn)镚lide有非常強(qiáng)大的緩存機(jī)制廊驼,我們剛才加載那張必應(yīng)美圖的時(shí)候Glide自動(dòng)就已經(jīng)將它緩存下來(lái)了据过,下次加載的時(shí)候?qū)?huì)直接從緩存中讀取,不會(huì)再去網(wǎng)絡(luò)下載了妒挎,因而加載的速度非成快,所以占位圖可能根本來(lái)不及顯示酝掩。

因此這里我們還需要稍微做一點(diǎn)修改鳞芙,來(lái)讓占位圖能有機(jī)會(huì)顯示出來(lái),修改代碼如下所示:

Glide.with(this)     .load(url)     .placeholder(R.drawable.loading)     .diskCacheStrategy(DiskCacheStrategy.NONE)     .into(imageView);

可以看到,這里串接了一個(gè)diskCacheStrategy()方法积蜻,并傳入DiskCacheStrategy.NONE參數(shù)闯割,這樣就可以禁用掉Glide的緩存功能。

關(guān)于Glide緩存方面的內(nèi)容我們將會(huì)在后面的文章進(jìn)行詳細(xì)的講解竿拆,這里只是為了測(cè)試占位圖功能而加的一個(gè)額外配置,暫時(shí)你只需要知道禁用緩存必須這么寫就可以了宾尚。
現(xiàn)在重新運(yùn)行一下代碼丙笋,效果如下圖所示:


可以看到,當(dāng)點(diǎn)擊Load Image按鈕之后會(huì)立即顯示一張占位圖煌贴,然后等真正的圖片加載完成之后會(huì)將占位圖替換掉御板。
當(dāng)然,這只是占位圖的一種牛郑,除了這種加載占位圖之外怠肋,還有一種異常占位圖。異常占位圖就是指淹朋,如果因?yàn)槟承┊惓G闆r導(dǎo)致圖片加載失敗笙各,比如說(shuō)手機(jī)網(wǎng)絡(luò)信號(hào)不好,這個(gè)時(shí)候就顯示這張異常占位圖础芍。

異常占位圖的用法相信你已經(jīng)可以猜到了杈抢,首先準(zhǔn)備一張error.jpg圖片,然后修改Glide加載部分的代碼仑性,如下所示:

Glide.with(this)     .load(url)     .placeholder(R.drawable.loading)     .error(R.drawable.error)     .diskCacheStrategy(DiskCacheStrategy.NONE)     .into(imageView);

很簡(jiǎn)單惶楼,這里又串接了一個(gè)error()方法就可以指定異常占位圖了。
現(xiàn)在你可以將圖片的url地址修改成一個(gè)不存在的圖片地址诊杆,或者干脆直接將手機(jī)的網(wǎng)絡(luò)給關(guān)了歼捐,然后重新運(yùn)行程序,效果如下圖所示:


這樣我們就把Glide提供的占位圖功能都掌握了晨汹。
指定圖片格式
我們還需要再了解一下Glide另外一個(gè)強(qiáng)大的功能豹储,那就是Glide是支持加載GIF圖片的。這一點(diǎn)確實(shí)非常牛逼宰缤,因?yàn)橄啾戎翵ake Warton曾經(jīng)明確表示過(guò)颂翼,Picasso是不會(huì)支持加載GIF圖片的。

而使用Glide加載GIF圖并不需要編寫什么額外的代碼慨灭,Glide內(nèi)部會(huì)自動(dòng)判斷圖片格式朦乏。比如這是一張GIF圖片的URL地址:
http://p1.pstatp.com/large/166200019850062839d3
我們只需要將剛才那段加載圖片代碼中的URL地址替換成上面的地址就可以了,現(xiàn)在重新運(yùn)行一下代碼氧骤,效果如下圖所示:

也就是說(shuō)呻疹,不管我們傳入的是一張普通圖片,還是一張GIF圖片筹陵,Glide都會(huì)自動(dòng)進(jìn)行判斷刽锤,并且可以正確地把它解析并展示出來(lái)镊尺。

但是如果我想指定圖片的格式該怎么辦呢?就比如說(shuō)并思,我希望加載的這張圖必須是一張靜態(tài)圖片庐氮,我不需要Glide自動(dòng)幫我判斷它到底是靜圖還是GIF圖。

想實(shí)現(xiàn)這個(gè)功能仍然非常簡(jiǎn)單宋彼,我們只需要再串接一個(gè)新的方法就可以了弄砍,如下所示:

Glide.with(this)     .load(url)     .asBitmap()     .placeholder(R.drawable.loading)     .error(R.drawable.error)     .diskCacheStrategy(DiskCacheStrategy.NONE)     .into(imageView);

可以看到,這里在load()方法的后面加入了一個(gè)asBitmap()方法输涕,這個(gè)方法的意思就是說(shuō)這里只允許加載靜態(tài)圖片音婶,不需要Glide去幫我們自動(dòng)進(jìn)行圖片格式的判斷了。
現(xiàn)在重新運(yùn)行一下程序莱坎,效果如下圖所示:


由于調(diào)用了asBitmap()方法衣式,現(xiàn)在GIF圖就無(wú)法正常播放了,而是會(huì)在界面上顯示第一幀的圖片檐什。

那么類似地碴卧,既然我們能強(qiáng)制指定加載靜態(tài)圖片,就也能強(qiáng)制指定加載動(dòng)態(tài)圖片厢汹。比如說(shuō)我們想要實(shí)現(xiàn)必須加載動(dòng)態(tài)圖片的功能螟深,就可以這樣寫:

Glide.with(this)     .load(url)     .asGif()     .placeholder(R.drawable.loading)     .error(R.drawable.error)     .diskCacheStrategy(DiskCacheStrategy.NONE)     .into(imageView);

這里調(diào)用了asGif()方法替代了asBitmap()方法,很好理解烫葬,相信不用我多做什么解釋了界弧。

那么既然指定了只允許加載動(dòng)態(tài)圖片,如果我們傳入了一張靜態(tài)圖片的URL地址又會(huì)怎么樣呢搭综?試一下就知道了垢箕,將圖片的URL地址改成剛才的必應(yīng)美圖,然后重新運(yùn)行代碼兑巾,效果如下圖所示条获。
動(dòng)圖
Android

沒(méi)錯(cuò),如果指定了只能加載動(dòng)態(tài)圖片蒋歌,而傳入的圖片卻是一張靜圖的話帅掘,那么結(jié)果自然就只有加載失敗嘍。
指定圖片大小
實(shí)際上堂油,使用Glide在絕大多數(shù)情況下我們都是不需要指定圖片大小的修档。

在學(xué)習(xí)本節(jié)內(nèi)容之前,你可能還需要先了解一個(gè)概念府框,就是我們平時(shí)在加載圖片的時(shí)候很容易會(huì)造成內(nèi)存浪費(fèi)吱窝。什么叫內(nèi)存浪費(fèi)呢?比如說(shuō)一張圖片的尺寸是10001000像素,但是我們界面上的ImageView可能只有200200像素院峡,這個(gè)時(shí)候如果你不對(duì)圖片進(jìn)行任何壓縮就直接讀取到內(nèi)存中兴使,這就屬于內(nèi)存浪費(fèi)了,因?yàn)槌绦蛑懈揪陀貌坏竭@么高像素的圖片照激。

而使用Glide发魄,我們就完全不用擔(dān)心圖片內(nèi)存浪費(fèi),甚至是內(nèi)存溢出的問(wèn)題俩垃。因?yàn)镚lide從來(lái)都不會(huì)直接將圖片的完整尺寸全部加載到內(nèi)存中欠母,而是用多少加載多少。Glide會(huì)自動(dòng)判斷ImageView的大小吆寨,然后只將這么大的圖片像素加載到內(nèi)存當(dāng)中,幫助我們節(jié)省內(nèi)存開支踩寇。

也正是因?yàn)镚lide是如此的智能啄清,所以剛才在開始的時(shí)候我就說(shuō)了,在絕大多數(shù)情況下我們都是不需要指定圖片大小的俺孙,因?yàn)镚lide會(huì)自動(dòng)根據(jù)ImageView的大小來(lái)決定圖片的大小辣卒。

不過(guò),如果你真的有這樣的需求睛榄,必須給圖片指定一個(gè)固定的大小荣茫,Glide仍然是支持這個(gè)功能的。修改Glide加載部分的代碼场靴,如下所示:

Glide.with(this)     .load(url)     .placeholder(R.drawable.loading)     .error(R.drawable.error)     .diskCacheStrategy(DiskCacheStrategy.NONE)     .override(100,100)     .into(imageView);

仍然非常簡(jiǎn)單啡莉,這里使用override()方法指定了一個(gè)圖片的尺寸,也就是說(shuō)旨剥,Glide現(xiàn)在只會(huì)將圖片加載成100*100像素的尺寸咧欣,而不會(huì)管你的ImageView的大小是多少了。

好了轨帜,今天是我們這個(gè)Glide系列的第一篇文章魄咕,寫了這么多內(nèi)容已經(jīng)算是挺不錯(cuò)的了。現(xiàn)在你已經(jīng)了解了Glide的基本用法蚌父,當(dāng)然也是一些最常用的用法哮兰。在本系列的第二篇文章中,我們會(huì)嘗試去分析Glide的源碼苟弛,研究一下在這些基本用法的背后喝滞,Glide到底執(zhí)行了什么神奇的操作,能夠使得我們加載圖片變得這么簡(jiǎn)單嗡午?敬請(qǐng)期待囤躁。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子狸演,更是在濱河造成了極大的恐慌言蛇,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,198評(píng)論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件宵距,死亡現(xiàn)場(chǎng)離奇詭異腊尚,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)满哪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門婿斥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人哨鸭,你說(shuō)我怎么就攤上這事民宿。” “怎么了像鸡?”我有些...
    開封第一講書人閱讀 167,643評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵活鹰,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我只估,道長(zhǎng)志群,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,495評(píng)論 1 296
  • 正文 為了忘掉前任蛔钙,我火速辦了婚禮锌云,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘吁脱。我一直安慰自己桑涎,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,502評(píng)論 6 397
  • 文/花漫 我一把揭開白布豫喧。 她就那樣靜靜地躺著石洗,像睡著了一般。 火紅的嫁衣襯著肌膚如雪紧显。 梳的紋絲不亂的頭發(fā)上讲衫,一...
    開封第一講書人閱讀 52,156評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音孵班,去河邊找鬼涉兽。 笑死,一個(gè)胖子當(dāng)著我的面吹牛篙程,可吹牛的內(nèi)容都是我干的枷畏。 我是一名探鬼主播,決...
    沈念sama閱讀 40,743評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼虱饿,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼拥诡!你這毒婦竟也來(lái)了触趴?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,659評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤渴肉,失蹤者是張志新(化名)和其女友劉穎冗懦,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體仇祭,經(jīng)...
    沈念sama閱讀 46,200評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡披蕉,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,282評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了乌奇。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片没讲。...
    茶點(diǎn)故事閱讀 40,424評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖礁苗,靈堂內(nèi)的尸體忽然破棺而出爬凑,到底是詐尸還是另有隱情,我是刑警寧澤试伙,帶...
    沈念sama閱讀 36,107評(píng)論 5 349
  • 正文 年R本政府宣布贰谣,位于F島的核電站,受9級(jí)特大地震影響迁霎,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜百宇,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,789評(píng)論 3 333
  • 文/蒙蒙 一考廉、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧携御,春花似錦昌粤、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至誓军,卻和暖如春袱讹,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背昵时。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工捷雕, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人壹甥。 一個(gè)月前我還...
    沈念sama閱讀 48,798評(píng)論 3 376
  • 正文 我出身青樓救巷,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親句柠。 傳聞我的和親對(duì)象是個(gè)殘疾皇子浦译,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,435評(píng)論 2 359

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