Android 一共有多少種動(dòng)畫?準(zhǔn)確告訴你!

Android 動(dòng)畫

Android 動(dòng)畫在開發(fā)中是不可或缺的功能,或者說是界面靈動(dòng)的添加劑。那你是否總結(jié)過 Android 中總共為開發(fā)者提供了多少種方式的動(dòng)畫呢?今天就為大家總結(jié)歸納一下。

報(bào)告老師,我知道

我話音未落,前排那位騷氣不減當(dāng)年、故事布滿雙眼的大胸弟就激動(dòng)得高高舉起了那只滿是老繭的右手:“我知道,我知道!都有平移動(dòng)畫、縮放動(dòng)畫、旋轉(zhuǎn)動(dòng)畫、漸變動(dòng)畫、還有......”

看著這位兄弟回答時(shí)專注又冥思苦想的表情,我真不忍心傷害他那顆純真的幼小心靈。于是我決定說一個(gè)謊:“這位同學(xué),你說的太對了!你都知道的這么全面了還出來聽課真是太辛苦了。這么熱的天,不如回家吹吹空調(diào)、吃吃西瓜,把這次學(xué)習(xí)的機(jī)會(huì)讓給更需要的人不挺好嗎!”

看著那位兄弟一臉滿足后遠(yuǎn)去的歡快背影,我終于可以放心的開始今天重點(diǎn)了。好了,上面內(nèi)容純屬扯淡,轉(zhuǎn)入正題。

本文章一部分教程圖片來自網(wǎng)絡(luò),在這里先對這些圖片的作者表示感謝。

動(dòng)畫種類

Android 動(dòng)畫可以歸納為以下幾種:

上面動(dòng)畫分類是個(gè)人通過每種動(dòng)畫種類概念的獨(dú)立性來劃分的,目前能想到的只有這么多,如果有所遺漏大家可以指點(diǎn)出來以供我后續(xù)完善。

可能有很多人迅速的反應(yīng)出,缺少了目前使用也相對較多的 airbnb/lottie-android 動(dòng)畫。不可置疑,Lottie 庫目前在 Android 開發(fā)中尤其復(fù)雜動(dòng)畫效果上地位顯著。但我們今天要是的 Android 原生上為我們提供的能使用的動(dòng)畫方式,Lottie 動(dòng)畫今天暫且擱置。同時(shí)對于 RecyclerView item 加載動(dòng)畫今天也暫且不提。我們且把這些動(dòng)畫歸為其他,并不是把它們遺忘了。

詳盡教程

對于上面列舉的動(dòng)畫種類,可能大家對部分較常用的動(dòng)畫早已熟練應(yīng)用,比如 View 動(dòng)畫、屬性動(dòng)畫等。而對部分較少使用(比如 揭露動(dòng)畫)、或者常常使用卻從未意識(shí)到它也屬于動(dòng)畫的一種(比如 觸摸反饋動(dòng)畫)知道的并不是那么全面。“那么今天就一一為大家詳細(xì)講解每種動(dòng)畫的概念”,那是不可能滴~~,就這么點(diǎn)篇幅,這么可能把每種動(dòng)畫都細(xì)說下來。

要這些動(dòng)畫一一梳理清晰,那將是一項(xiàng)浩大的工作,而我已經(jīng)為大家總結(jié)成了一個(gè)《詳盡 Android 動(dòng)畫系列教程》,大家可以到
https://github.com/OCNYang/Android-Animation-Set
進(jìn)行查看,由于動(dòng)畫知識(shí)點(diǎn)涉及的太多而教程詳細(xì)程度令人發(fā)指,大家可以收藏起來慢慢查看。另外總結(jié)的教程中每種動(dòng)畫都提供了動(dòng)畫示例,大家可以結(jié)合源碼細(xì)細(xì)品味。(上面總結(jié)的系列教程,大多數(shù)都是借用前人總結(jié)的教程,選用的都是針對每種動(dòng)畫網(wǎng)上流傳的最詳細(xì)全面的教程,在梳理中對部分錯(cuò)誤也進(jìn)行了更正。)

那今天的任務(wù)是什么呢?接下來主要通過粗略的介紹來講解每種動(dòng)畫在開發(fā)中都適用在哪種場景。

視圖動(dòng)畫(View 動(dòng)畫)

自從有了屬性動(dòng)畫,View 動(dòng)畫的處境就非常凄涼,但有時(shí)我們需要的僅僅就是簡易的動(dòng)畫效果,那我們使用 View 動(dòng)畫起來就十分便捷。

View 動(dòng)畫的一個(gè)特點(diǎn)就是,他的動(dòng)畫僅僅是動(dòng)的 View 的繪制地方,View 真正的位置并沒有一起動(dòng)畫。

View 一般會(huì)用作直接作用頁面中的 View 上,實(shí)現(xiàn)基本的動(dòng)畫效果:平移、旋轉(zhuǎn)、縮放、透明度、或前幾者的交集:

view_animation_base

除了這幾種用法還有幾種特殊的使用場景:

    1. 給 PopupWindow 設(shè)置顯示隱藏的動(dòng)畫效果

大家可以對比一下默認(rèn)動(dòng)畫和設(shè)置后的動(dòng)畫效果對比:

默認(rèn)效果

自定義效果
    1. 給 Activity 設(shè)置頁面跳轉(zhuǎn)、退出動(dòng)畫效果

Activity 過場動(dòng)畫效果可以通過很多方式設(shè)置,而使用 View 動(dòng)畫實(shí)現(xiàn)的方式就是借助設(shè)置
overridePendingTransition(int enterAnim, int exitAnim) 方法。跟在 startActivity() 或 finish() 后面,在頁面轉(zhuǎn)換時(shí)就顯示上面方法設(shè)置的切換動(dòng)畫效果。

效果對比:

默認(rèn)效果

自定義效果
    1. 給 ViewGroup 設(shè)置子控件的進(jìn)場動(dòng)畫效果

就是通過給 ViewGroup 控件設(shè)置一條 android:layoutAnimation="@anim/anim_layout" 的屬性。而 anim_layout 就是 ViewGroup 中子控件在第一次顯示時(shí)的進(jìn)場動(dòng)畫效果。

效果如下:

默認(rèn)效果

自定義效果

LayoutAnimation 適用于所有的 ViewGroup ,自然也包含 ListView、RecyclerView 等控件。上面說過 LayoutAnimation 提供的是進(jìn)場動(dòng)畫效果,所以只在 ViewGroup 第一次加載子 View 時(shí)顯示一次,所以列表控件的 item 加載動(dòng)畫我們一般不使用它,我們會(huì)使用 列表 專門的 Item 加載動(dòng)畫, 比如 recyclerView.setItemAnimator() 等。

幀動(dòng)畫

動(dòng)畫書

幀動(dòng)畫這個(gè)很好理解,其實(shí)就和看的動(dòng)畫片一樣,每一幀代表一個(gè)畫面動(dòng)作,當(dāng)快速逐幀顯示時(shí),速度到達(dá)人眼無法分辨每一幀時(shí),就達(dá)到了動(dòng)畫的效果。

在使用中,先要準(zhǔn)備好每一幀的素材圖片:

幀動(dòng)畫素材圖

然后播放出來就成了動(dòng)畫的效果:

demo2.gif

要說起幀動(dòng)畫的使用場景,在開發(fā)中使用的真是少之又少,一般會(huì)有兩種:

  • 設(shè)備的開關(guān)機(jī)動(dòng)畫
  • “復(fù)雜” 的動(dòng)畫效果,看似不可能完成的動(dòng)畫

之所以說開機(jī)動(dòng)畫是幀動(dòng)畫。是因?yàn)橐话汩_機(jī)動(dòng)畫是通過 system/media/bootanimation.zip 這個(gè)壓縮包,bootanimation 里面主要包含一個(gè) desc.txt 以及 N 個(gè)文件夾。而文件夾里面放著的就是開機(jī)動(dòng)畫的圖片資源。decs.txt 的作用就是指導(dǎo)系統(tǒng)如何去執(zhí)行開機(jī)動(dòng)畫。
desc.txt 編寫規(guī)范,例如開機(jī)動(dòng)畫需要用到 2 個(gè)文件夾,分別是 folder1 和 folder2,開機(jī)的時(shí)候,先把 folder1 里面的圖片都播放一遍,然后再循環(huán)播放 folder2 里面的文件,直到進(jìn)入系統(tǒng)。

而在開發(fā)中,開機(jī)動(dòng)畫我們一般涉及不到的。而常常使用到的是,當(dāng)我們需要一些比較復(fù)雜的圖片動(dòng)畫顯示效果時(shí),其他動(dòng)畫又實(shí)現(xiàn)不了,這時(shí)我們可以考慮幀動(dòng)畫,但要注意防止 OOM。
其實(shí)真正用到幀動(dòng)畫時(shí),更多的時(shí)候我們還不如使用 GIF 圖片代替,現(xiàn)在幾個(gè)主流圖片加載框架都支持 GIF 圖片,同時(shí)也能控制 GIF 的播放時(shí)機(jī)。

屬性動(dòng)畫

屬性動(dòng)畫所提供的功能和 View 動(dòng)畫十分相似。但兩者在實(shí)現(xiàn)原理上完全不同,而相對 View 動(dòng)畫來說,屬性動(dòng)畫要強(qiáng)大的許多。這里我們先對兩者做個(gè)對比:

View 動(dòng)畫/視圖動(dòng)畫:

  1. View 動(dòng)畫只能為 View 添加動(dòng)畫效果,且不能監(jiān)聽 View 相關(guān)屬性的變化過程。
  2. View 動(dòng)畫提供的動(dòng)畫能力較為單一,目前只支持幀動(dòng)畫、縮放動(dòng)畫、位移動(dòng)畫、旋轉(zhuǎn)動(dòng)畫、透明度動(dòng)畫以及這些動(dòng)畫的集合動(dòng)畫。
  3. View動(dòng)畫改變的是 View 的繪制效果,View 的真正位置和相關(guān)屬性并不會(huì)改變,這也就造成了點(diǎn)擊事件的觸發(fā)區(qū)域是動(dòng)畫前的位置而不是動(dòng)畫后的位置的原因。

屬性動(dòng)畫

  1. 屬性動(dòng)畫作用對象不局限在 View 上,而是任何提供了 Getter 和 Setter 方法的對象的屬性上。
  2. 屬性動(dòng)畫沒有直接改變 View 狀態(tài)的能力,而是通過動(dòng)態(tài)改變 View 相關(guān)屬性的方式來改變 View 的顯示效果。
  3. 屬性動(dòng)畫使用更方便,可以用更簡潔的代碼實(shí)現(xiàn)相關(guān)的動(dòng)畫效果。
  4. 屬性動(dòng)畫上手難度較高,對于 propertyName 需要自己去挖掘,或者自己通過 Wrapper 的方式去自定義 propertyName。
  5. 屬性動(dòng)畫是 Android3.0 以上系統(tǒng)提供的能力,在 3.0 以下需導(dǎo)入 nineoldandroids 三方庫解決兼容性問題。

那屬性動(dòng)畫的使用場景有哪些呢?

  • 基本上視圖動(dòng)畫作用在 View 上的動(dòng)畫效果,屬性動(dòng)畫都可以實(shí)現(xiàn);
  • 在自定義 View 時(shí),需要實(shí)現(xiàn)一些復(fù)雜的動(dòng)畫效果,或?qū)?View 的一些特殊屬性值進(jìn)行動(dòng)畫變更時(shí),視圖動(dòng)畫無法實(shí)現(xiàn)時(shí);
  • 另外,屬性動(dòng)畫你也可以用在非動(dòng)畫場景,比如,你在自定義 View 需要一個(gè)有一定規(guī)律(根據(jù)特定差值器變化)且可監(jiān)聽的數(shù)值變化器,這個(gè)時(shí)候借助屬性動(dòng)畫是再合適不過了。

屬性動(dòng)畫是功能更強(qiáng)大、實(shí)現(xiàn)方式更優(yōu)雅的動(dòng)畫解決方案,在為自定義 View 設(shè)置動(dòng)效上有著非常強(qiáng)大的表現(xiàn)能力,可以實(shí)現(xiàn) View 動(dòng)畫實(shí)現(xiàn)不了的更加炫酷的動(dòng)畫效果。詳細(xì)的屬性動(dòng)畫介紹可以去查看 《Android 動(dòng)畫詳盡教程》系列。

這里盜一張前段時(shí)間有位網(wǎng)友實(shí)現(xiàn)的靈動(dòng)的紅鯉魚效果,具體的實(shí)現(xiàn)也用到了不少屬性動(dòng)畫的原理。

靈動(dòng)的紅鯉魚

觸摸反饋動(dòng)畫(Ripple Effect)

所謂觸摸反饋動(dòng)畫就是一種點(diǎn)擊效果,作用在可點(diǎn)擊的 View 上時(shí),當(dāng)有點(diǎn)擊事件時(shí)會(huì)有漣漪般的反饋效果,使用在 按鈕 上是再好不過了。

Ripple 波紋效果有兩種:

//有邊界
?android:attr/selectableItemBackground
//無邊界 (要求API21以上)
?android:attr/selectableItemBackgroundBorderless 

效果分別為:

有邊界效果

無邊界效果

使用也非常簡單,只要將上面兩種效果設(shè)置為控件的背景或者前景就好了,同時(shí)需要給控件設(shè)置點(diǎn)擊事件、或把控件設(shè)置為可點(diǎn)擊 android:clickable="true"

揭露動(dòng)畫(Reveal Effect)

揭露動(dòng)畫在系統(tǒng)中很常見,就是類似波紋的效果, 從某一個(gè)點(diǎn)向四周展開或者從四周向某一點(diǎn)聚合起來。

  • 可以用在 Activity 里面的 View 動(dòng)畫效果,用來揭露某個(gè)隱藏 View 的顯示;*
  • 也可以使用在 Activity 跳轉(zhuǎn)過渡動(dòng)畫中。

如下圖使用時(shí)的一些效果:

顯示隱藏View揭露動(dòng)畫

如果加上些 View 動(dòng)畫效果,結(jié)合后成這樣:

與基礎(chǔ)動(dòng)畫效果結(jié)合

同時(shí)它還可以和下面要說的轉(zhuǎn)場動(dòng)畫結(jié)合成下面更酷炫的效果:

與轉(zhuǎn)場動(dòng)畫結(jié)合

上面動(dòng)畫效果是:先使用轉(zhuǎn)場動(dòng)畫的共享元素轉(zhuǎn)場,然后再使用揭露動(dòng)畫顯示 View。

轉(zhuǎn)場動(dòng)畫 & 共享元素(Activity 切換動(dòng)畫)

轉(zhuǎn)場動(dòng)畫聽名字就知道它的使用場景了,轉(zhuǎn)場、轉(zhuǎn)場自然是用在場景轉(zhuǎn)換的時(shí)候:

  • 轉(zhuǎn)場效果我們一般用在 Activity 切換時(shí)的動(dòng)畫效果上;
  • 共享元素一般我們使用在轉(zhuǎn)換的前后兩個(gè)頁面有共同元素[注1]時(shí);
  • 同時(shí)也可以在 Activity 布局發(fā)生場景變化時(shí),讓其中的 View 產(chǎn)生相應(yīng)的過渡動(dòng)畫。

共同元素[注1]:并非限制指作用的兩個(gè)共享元素的狀態(tài)、大小、顯示位置完全相同。而是指兩者在頁面中要傳遞的內(nèi)容相同,比如是從文章列表轉(zhuǎn)到文章詳情頁面時(shí)的相同標(biāo)題、主圖等。如果共享元素的兩者是不同的元素,一方面在顯示時(shí)共享元素在將結(jié)束轉(zhuǎn)場完成轉(zhuǎn)換時(shí)會(huì)有顯示的閃動(dòng),另一方面,如果兩者表達(dá)的是不同的元素,用戶也會(huì)感到很莫名。

話不多說,放上效果圖:

轉(zhuǎn)場效果

transition_animation.gif

視圖狀態(tài)動(dòng)畫(Animate View State Changes)

所謂視圖狀態(tài)動(dòng)畫,就是 View 在狀態(tài)改變時(shí)執(zhí)行的動(dòng)畫效果。和之前我們通過 selector 選擇器給 Button 設(shè)置不同狀態(tài)下的背景效果是一樣一樣的。

當(dāng)然,它的使用場景也是特定的:

  • 當(dāng) View 的狀態(tài)改變時(shí),希望此時(shí)顯示的效果和靜態(tài)效果有所區(qū)分,即顯示效果也做出相應(yīng)的改變,比如 Z 軸抬高,大小改變、或其他動(dòng)畫效果等。

放上一個(gè)按鈕被點(diǎn)擊后設(shè)置的視圖狀態(tài)動(dòng)畫:

demo7.gif

矢量圖動(dòng)畫(Vector 動(dòng)畫)

不知道大家現(xiàn)在在開發(fā)中,在圖標(biāo)顯示上是不是還在切各種尺寸的 .png 圖片適配。現(xiàn)在我可是一直在使用 svg 圖標(biāo)(在開發(fā)中是通過轉(zhuǎn)換成 Vector 再使用,現(xiàn)在 AS 中導(dǎo)入,可以自動(dòng)完成轉(zhuǎn)換,轉(zhuǎn)換不成功的再用上面網(wǎng)址轉(zhuǎn)換),svg 圖標(biāo)的好處自不用說了。那矢量圖動(dòng)畫有是怎么回事呢?

VectorDrawable 一般是以 <vector> 為根標(biāo)簽定義的 XML 文件,<vector>、<group>、<clip-path>、<path> 元素都有各自可以播放動(dòng)畫的屬性。具體怎么生成具有動(dòng)畫效果的圖標(biāo),可以在系列教程中查看。

我們可以在以下場景使用:

  • 具有動(dòng)態(tài)變換效果的圖標(biāo);
  • 也可以用在需要特定動(dòng)畫效果的 VectorDrawable 圖片上。
image

奔跑的圖釘

約束布局實(shí)現(xiàn)的關(guān)鍵幀動(dòng)畫(ConstraintSet 動(dòng)畫)

這個(gè)動(dòng)畫就比較新了,甚至連官方都沒有提供完整的文檔。這是通過 ConstraintLayout 實(shí)現(xiàn)的一種關(guān)鍵幀動(dòng)畫。

關(guān)鍵幀動(dòng)畫:(百度百科)任何動(dòng)畫要表現(xiàn)運(yùn)動(dòng)或變化,至少前后要給出兩個(gè)不同的關(guān)鍵狀態(tài),而中間狀態(tài)的變化和銜接電腦可以自動(dòng)完成,在 Flash 中,表示關(guān)鍵狀態(tài)的幀動(dòng)畫叫做關(guān)鍵幀動(dòng)畫
所謂關(guān)鍵幀動(dòng)畫,就是給需要?jiǎng)赢嬓Ч膶傩裕瑴?zhǔn)備一組與時(shí)間相關(guān)的值,這些值都是在動(dòng)畫序列中比較關(guān)鍵的幀中提取出來的,而其他時(shí)間幀中的值,可以用這些關(guān)鍵值,采用特定的插值方法計(jì)算得到,從而達(dá)到比較流暢的動(dòng)畫效果。

而 ConstraintSet 動(dòng)畫既然實(shí)現(xiàn)的是關(guān)鍵幀動(dòng)畫,那至少需要兩個(gè)關(guān)鍵幀,而對于 ConstraintSet 來說每次需要的兩個(gè)關(guān)鍵幀就是兩種布局狀態(tài),而兩種布局狀態(tài)的轉(zhuǎn)變過程 ConstraintSet 會(huì)生成一定的動(dòng)畫過渡。

那使用場景根據(jù)約束動(dòng)畫的說明也比較明顯了,就是同一個(gè)布局需要重新調(diào)整布局內(nèi)部 View 位置時(shí)使用。

約束布局動(dòng)畫

更詳細(xì)的動(dòng)畫介紹

這里介紹的只是對 Android 各個(gè)種類的動(dòng)畫進(jìn)行了一個(gè)簡單的介紹,如果你要更加詳細(xì)更加全面的查看 Android 各個(gè)動(dòng)畫的系列教程,可以到本文章同系列文章教程進(jìn)行查看:

Android 動(dòng)畫詳盡教程:https://github.com/OCNYang/Android-Animation-Set

本篇教程終于完了,這時(shí)我又想起了文章開頭那個(gè)大胸弟,我想他此刻肯定在家正洋洋得意的啃著大西瓜。不多說了,如此炎熱的天氣,我也要去啃個(gè)西瓜撫慰一下狂躁的心。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,461評論 6 532
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,538評論 3 417
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,423評論 0 375
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,991評論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,761評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,207評論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,268評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,419評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,959評論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,782評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,983評論 1 369
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,528評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,222評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,653評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,901評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,678評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,978評論 2 374

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