官方Canvas and Drawables翻譯以及批注

Android框架提供了一套二維繪圖API棉圈,可讓你將自己的自定義圖形渲染到畫布上或修改現(xiàn)有視圖以自定義其外觀和感覺。 你通常以以下方式之一繪制二維圖形:

  • a:在布局中的View對(duì)象上繪制你的圖形或動(dòng)畫老厌。 使用此選項(xiàng)省咨,會(huì)調(diào)用系統(tǒng)的渲染管道處理的圖形 (需要在視圖中定義自行定義)
  • b:在Canvas對(duì)象中繪制圖形逼肯。使用此選項(xiàng)耸黑,需要你將畫布傳遞到適當(dāng)?shù)念?onDraw(Canvas)'方法。你也可以使用Canvas中的繪圖方法汉矿。此選項(xiàng)還可以控制任何動(dòng)畫崎坊。
    繪制一個(gè)視圖是一個(gè)不錯(cuò)的選擇备禀,當(dāng)你想繪制簡(jiǎn)單的圖形洲拇,不需要?jiǎng)討B(tài)變化,并且不是性能密集型應(yīng)用程序曲尸,如游戲的一部分赋续。例如,當(dāng)你要在其他靜態(tài)應(yīng)用程序中顯示靜態(tài)圖形或預(yù)定義的動(dòng)畫時(shí)另患,你應(yīng)該將圖形繪制到視圖中纽乱。
    當(dāng)你的應(yīng)用程序需要定期重繪時(shí),繪制到畫布會(huì)更好昆箕。 應(yīng)用程序(如視頻游戲)應(yīng)該自己繪制到畫布上鸦列。 但是,有多種方式可以做到這一點(diǎn):
  • a:在應(yīng)用程序的主線程中鹏倘,你可以在布局中創(chuàng)建自定義視圖組件薯嗤,調(diào)用invalidate(),然后處理onDraw(Canvas)回調(diào)纤泵。
  • b:在管理SurfaceView的工作線程中骆姐,使用Canvas的繪圖方法。 你不需要調(diào)用invalidate()捏题。

Draw with a canvas

你可以通過繪制由Canvas類表示的畫布來滿足需要專門繪制和/或控制圖形動(dòng)畫的應(yīng)用程序的要求玻褪。通過畫布,你的應(yīng)用程序?qū)⒗L制到位于窗口中的底層Bitmap對(duì)象公荧。

  • 1:如果你使用onDraw(Canvas)回調(diào)進(jìn)行繪制操作带射,畫布已經(jīng)由系統(tǒng)提供,你只需要在其上繪制圖形循狰。
  • 2:如果你使用的是SurfaceView對(duì)象窟社,則可以從lockCanvas()獲取畫布。
    (編者按:lockCanvas的源碼如下:)
/**
     * Gets a {@link Canvas} for drawing into this surface.
     *
     * After drawing into the provided {@link Canvas}, the caller must
     * invoke {@link #unlockCanvasAndPost} to post the new contents to the surface.
     *
     * @param inOutDirty A rectangle that represents the dirty region that the caller wants
     * to redraw.  This function may choose to expand the dirty rectangle if for example
     * the surface has been resized or if the previous contents of the surface were
     * not available.  The caller must redraw the entire dirty region as represented
     * by the contents of the inOutDirty rectangle upon return from this function.
     * The caller may also pass <code>null</code> instead, in the case where the
     * entire surface should be redrawn.
     * @return A canvas for drawing into the surface.
     *
     * @throws IllegalArgumentException If the inOutDirty rectangle is not valid.
     * @throws OutOfResourcesException If the canvas cannot be locked.
     */
    public Canvas lockCanvas(Rect inOutDirty)
            throws Surface.OutOfResourcesException, IllegalArgumentException {
        synchronized (mLock) {
            checkNotReleasedLocked();
            if (mLockedObject != 0) {
                // Ideally, nativeLockCanvas() would throw in this situation and prevent the
                // double-lock, but that won't happen if mNativeObject was updated.  We can't
                // abandon the old mLockedObject because it might still be in use, so instead
                // we just refuse to re-lock the Surface.
                throw new IllegalArgumentException("Surface was already locked");
            }
            mLockedObject = nativeLockCanvas(mNativeObject, mCanvas, inOutDirty);
            return mCanvas;
        }
    }

以下內(nèi)容將討論這兩種情況:
如果需要?jiǎng)?chuàng)建一個(gè)新的Canvas對(duì)象晤揣,則必須定義底層Bitmap對(duì)象桥爽。
以下代碼示例顯示了如何從bitmap設(shè)置新的canvas :

Bitmap b = Bitmap.createBitmap(100, 100, Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(b);

可以通過使用drawBitmap()方法之一在不同的canvas 中使用bitmap 。但是昧识,我們建議您使用由onDraw(Canvas)回調(diào)或lockCanvas()方法提供的canvas 钠四。 有關(guān)更多信息,請(qǐng)參閱Drawing on a ViewDrawing on a SurfaceView
Canvas類有自己的繪圖方法缀去,包括drawBitmap()侣灶,drawRect(),drawText()等等缕碎。你可能使用的其他類也有draw()方法褥影。例如,您可能有一些Drawable對(duì)象要放在畫布上咏雌。Drawable類有自己的 draw(Canvas)方法凡怎,它將你的canvas 作為參數(shù)。

Drawing on a view

如果你的應(yīng)用程序不需要大量處理或較高的幀速率(例如象棋游戲赊抖,貪吃蛇游戲或其他慢動(dòng)畫應(yīng)用程序)统倒,那么你應(yīng)該考慮在View.onDraw(Canvas)回調(diào)中使用畫布創(chuàng)建自定義視圖和繪圖。 最方便的方面是氛雪,Android框架提供了一個(gè)可以執(zhí)行繪圖操作的預(yù)定義畫布房匆。
要開始的話,創(chuàng)建一個(gè)View的子類并實(shí)現(xiàn)onDraw(Canvas)回調(diào)报亩,Android框架調(diào)用它來繪制視圖浴鸿。 然后通過框架提供的Canvas對(duì)象執(zhí)行繪圖操作。
Android框架僅在必要時(shí)調(diào)用onDraw(Canvas)弦追。 當(dāng)你重新繪制應(yīng)用程序時(shí)岳链,必須通過調(diào)用invalidate()來使視圖無(wú)效。 調(diào)用invalidate()表示你希望繪制視圖骗卜。 然后宠页,Android會(huì)調(diào)用您的視圖的onDraw(Canvas)方法,盡管不能保證是即時(shí)的寇仓。(編者按:會(huì)在未來的某個(gè)時(shí)間調(diào)用举户,但是不一定馬上就可以調(diào)用到)
在視圖的onDraw(Canvas)方法中,調(diào)用畫布上的繪圖方法或者可以將畫布作為參數(shù)的其他類的方法遍烦。 一旦你的onDraw()完成俭嘁,Android框架將使用你的canvas繪制由系統(tǒng)處理的bitmap。
注意:要從除應(yīng)用程序主線程以外的線程中使視圖無(wú)效服猪,您必須調(diào)用postInvalidate()而不是invalidate()供填。

Drawing on a SurfaceView

SurfaceView是View的一個(gè)特殊子類,它在視圖層次結(jié)構(gòu)中提供了一個(gè)專用的繪圖面罢猪。目標(biāo)是向應(yīng)用程序的工作線程提供此繪圖面近她。這樣,應(yīng)用程序不需要等到系統(tǒng)的視圖層次結(jié)構(gòu)準(zhǔn)備繪制(なるほど) 膳帕。具有對(duì)SurfaceView 對(duì)象的引用的工作線程可以以其自己的節(jié)奏繪制到其它的畫布上粘捎。
首先,你需要?jiǎng)?chuàng)建一個(gè)擴(kuò)展SurfaceView的新類。 該類還應(yīng)該實(shí)現(xiàn)SurfaceHolder.Callback接口攒磨,該接口提供在底層Surface對(duì)象中發(fā)生的事件泳桦,例如創(chuàng)建,更改或銷毀娩缰。這些事件讓你知道何時(shí)可以開始繪制灸撰,無(wú)論你是否需要根據(jù)新的Surface屬性進(jìn)行調(diào)整,以及何時(shí)停止繪圖并可能終止某些任務(wù)拼坎。擴(kuò)展SurfaceView的類也是定義工作線程的好地方浮毯,它調(diào)用畫布中的所有繪圖過程。
你應(yīng)該通過SurfaceHolder處理the Surface對(duì)象而不是直接處理它演痒。在你的SurfaceView對(duì)象初始化之后亲轨,你可以通過調(diào)用getHolder()獲取一個(gè)SurfaceHolder對(duì)象趋惨。 你應(yīng)該注冊(cè)您的SurfaceView對(duì)象鸟顺,通過調(diào)用addCallback()來接收來自SurfaceHolder的通知。 然后在你的SurfaceView類中實(shí)現(xiàn)每個(gè)SurfaceHolder.Callback抽象方法器虾。
你可以從具有訪問SurfaceHolder對(duì)象的工作線程繪制到the surface canvas 讯嫂。 每次應(yīng)用程序需要重新繪制表面時(shí),請(qǐng)從工作線程中執(zhí)行以下步驟:

  • 1:使用lockCanvas()來取回canvas 兆沙。
  • 2:在畫布上執(zhí)行繪圖操作欧芽。
  • 3:通過調(diào)用 unlockCanvasAndPost(Canvas) 來解鎖畫布。
    The surface繪制畫布考慮到你在上面執(zhí)行的所有操作
    注意:每次從SurfaceHolder檢索畫布時(shí)葛圃,畫布的先前狀態(tài)都將被保留千扔。為了正確地動(dòng)畫你的圖形,你必須重繪整個(gè)表面库正。例如曲楚,你可以使用drawColor()方法填充顏色或使用drawBitmap()方法設(shè)置背景圖像來清除畫布的上一個(gè)狀態(tài)。 否則褥符,你的畫布可以顯示以前的圖紙的痕跡龙誊。

Drawables

Android框架提供了一個(gè)用于繪制形狀和圖像的自定義2D圖形庫(kù)。 android.graphics.drawable包中包含用于繪制二維的常用類喷楣。
本節(jié)討論使用可繪制對(duì)象繪制圖形的基本知識(shí)趟大,以及如何使用Drawable類的幾個(gè)子類。 有關(guān)如何使用drawable進(jìn)行逐幀動(dòng)畫的信息铣焊,請(qǐng)參閱可 Drawable Animation逊朽。
Drawable是可以繪制的東西的一般抽象。 Android框架提供了一組Drawable的直接和間接子類曲伊,你可以在各種場(chǎng)景中使用叽讳。 你還可以擴(kuò)展這些類以定義你自己的以可以獨(dú)特的方式運(yùn)行的自定義可繪制對(duì)象。
除了使用標(biāo)準(zhǔn)類構(gòu)造函數(shù)之外,還有兩種方法來定義和實(shí)例化一個(gè)Drawable:

  • 1:使用項(xiàng)目中保存的資源圖像绽榛。
  • 2:使用可繪制屬性的XML資源湿酸。

Creating drawables from resource images

你可以通過引用項(xiàng)目資源中的圖像文件來將圖形添加到應(yīng)用程序。 支持的文件類型是PNG(首選)灭美,JPG(可接受)和GIF(不鼓勵(lì))推溃。 應(yīng)用程序圖標(biāo),icon和其他圖形届腐,如游戲中使用的圖形铁坎,非常適合這種技術(shù)。
以下代碼片段演示了如何構(gòu)建使用從可繪制資源創(chuàng)建的圖像的ImageView犁苏,并將其添加到布局中:

LinearLayout mLinearLayout;

protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);

  // Create a LinearLayout in which to add the ImageView
  mLinearLayout = new LinearLayout(this);

  // Instantiate an ImageView and define its properties
  ImageView i = new ImageView(this);
  i.setImageResource(R.drawable.my_image);

  // set the ImageView bounds to match the Drawable's dimensions
  i.setAdjustViewBounds(true);
  i.setLayoutParams(new Gallery.LayoutParams(LayoutParams.WRAP_CONTENT,
      LayoutParams.WRAP_CONTENT));

  // Add the ImageView to the layout and set the layout as the content view
  mLinearLayout.addView(i);
  setContentView(mLinearLayout);
}

在其他情況下硬萍,你可能希望將圖像資源作為Drawable對(duì)象處理,如以下示例所示:

Resources res = mContext.getResources();
Drawable myImage = res.getDrawable(R.drawable.my_image);

注意:你的項(xiàng)目中的每個(gè)唯一資源只能維護(hù)一個(gè)狀態(tài)围详,無(wú)論你為其實(shí)例化了多少個(gè)不同的對(duì)象朴乖。 例如,如果你從同一個(gè)圖像資源中實(shí)例化兩個(gè)Drawable對(duì)象助赞,并更改一個(gè)對(duì)象的屬性(例如alpha)买羞,那么它也會(huì)影響另一個(gè)對(duì)象。 處理圖像資源的多個(gè)實(shí)例時(shí)雹食,而不是直接轉(zhuǎn)換Drawable對(duì)象畜普,你應(yīng)該執(zhí)行補(bǔ)間動(dòng)畫。
下面的XML代碼片段顯示了如何在XML布局中將可繪制的資源添加到ImageView中:

<ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/my_image" />

Creating drawables from XML resources

如果你想要?jiǎng)?chuàng)建一個(gè)Drawable對(duì)象群叶,最初不依賴于你的代碼或用戶交互定義的變量吃挑,那么在XML中定義Drawable是一個(gè)很好的選擇。 即使你希望Drawable在用戶與應(yīng)用程序交互期間更改其屬性街立,你應(yīng)該考慮以XML定義對(duì)象舶衬,因?yàn)槟憧梢栽趯?shí)例化之后修改屬性。(編者按:你也可以實(shí)現(xiàn)如此實(shí)現(xiàn)動(dòng)畫)

<!-- res/drawable/expand_collapse.xml -->
<transition xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/image_expand">
    <item android:drawable="@drawable/image_collapse">
</transition>

然后几晤,通過調(diào)用Resources.getDrawable()來檢索和實(shí)例化對(duì)象约炎,并傳遞XML文件的資源ID。 任何支持inflate()方法的Drawable子類可以在XML中定義蟹瘾,并由你的應(yīng)用程序?qū)嵗?支持XML擴(kuò)展的每個(gè)可繪制類都使用特定的XML屬性來幫助定義對(duì)象屬性圾浅。 以下代碼實(shí)例化TransitionDrawable并將其設(shè)置為ImageView對(duì)象的內(nèi)容:

Resources res = mContext.getResources();
TransitionDrawable transition =
    (TransitionDrawable) res.getDrawable(R.drawable.expand_collapse);

ImageView image = (ImageView) findViewById(R.id.toggle_image);
image.setImageDrawable(transition);

// Then you can call the TransitionDrawable object's methods
transition.startTransition(1000);

Shape drawables

當(dāng)你想要?jiǎng)討B(tài)繪制二維圖形時(shí),ShapeDrawable對(duì)象可以是一個(gè)很好的選擇憾朴。 你可以以編程方式在ShapeDrawable對(duì)象上繪制原始形狀狸捕,并應(yīng)用您的應(yīng)用程序需要的樣式。ShapeDrawable是Drawable的一個(gè)子類众雷。 因此灸拍,你可以使用一個(gè)ShapeDrawable做祝,無(wú)論何時(shí)可以使用Drawable。 例如鸡岗,你可以使用ShapeDrawable對(duì)象通過將視圖傳遞給視圖的setBackgroundDrawable()方法來設(shè)置視圖的背景混槐。 您還可以將自己的形狀繪制為自己的自定義視圖,并將其添加到應(yīng)用程序中的布局轩性。
因?yàn)镾hapeDrawable具有自己的draw()方法声登,所以可以創(chuàng)建一個(gè)在onDraw()事件期間繪制ShapeDrawable對(duì)象的View子類,如下面的代碼示例所示:

public class CustomDrawableView extends View {
  private ShapeDrawable mDrawable;

  public CustomDrawableView(Context context) {
    super(context);

    int x = 10;
    int y = 10;
    int width = 300;
    int height = 50;

    mDrawable = new ShapeDrawable(new OvalShape());
    // If the color isn't set, the shape uses black as the default.
    mDrawable.getPaint().setColor(0xff74AC23);
    // If the bounds aren't set, the shape can't be drawn.
    mDrawable.setBounds(x, y, x + width, y + height);
  }

  protected void onDraw(Canvas canvas) {
    mDrawable.draw(canvas);
  }
}

你可以在上述代碼示例中使用CustomDrawableView 類揣苏,就像使用任何其他自定義視圖一樣悯嗓。 例如,你可以以編程方式將其添加到應(yīng)用程序中的活動(dòng)中卸察,如以下示例所示:

CustomDrawableView mCustomDrawableView;
protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  mCustomDrawableView = new CustomDrawableView(this);
  setContentView(mCustomDrawableView);
}

ShapeDrawable類與android.graphics.drawable包中的許多其他可繪制類型一樣脯厨,允許你使用公共方法定義對(duì)象的各種屬性。 您可能要調(diào)整的一些示例屬性包括Alpha透明度坑质,顏色過濾器合武,抖動(dòng),不透明度和顏色洪乍。

NinePatch drawables

NinePatchDrawable圖形是一個(gè)可伸縮的位圖圖像眯杏,可以用作視圖的背景。 Android會(huì)自動(dòng)調(diào)整圖形大小以適應(yīng)視圖的內(nèi)容壳澳。 NinePatch圖像的示例使用是標(biāo)準(zhǔn)Android按鈕使用的背景 - 按鈕必須伸展以適應(yīng)各種長(zhǎng)度的字符串。 NinePatch圖形是包含一個(gè)額外的1像素邊框的標(biāo)準(zhǔn)PNG圖像茫经。 必須使用9.png擴(kuò)展名保存在項(xiàng)目的res / drawable /目錄中巷波。
使用邊框定義圖像的可拉伸和靜態(tài)區(qū)域。 你可以通過在邊框的左側(cè)和頂部繪制一個(gè)(或多個(gè))1像素寬的黑線(其他邊框像素應(yīng)完全透明或白色)來指示可伸縮部分卸伞。 你可以擁有盡可能多的伸縮部分抹镊。 可伸縮部分的相對(duì)尺寸保持不變,所以最大部分總是保持最大荤傲。
你還可以通過在右側(cè)繪制一條線和底部的一條線來定義圖像的可選繪制部分垮耳。 如果View對(duì)象將NinePatch圖形設(shè)置為其背景,然后指定視圖的文本遂黍,則它將自動(dòng)展開终佛,以使所有文本僅占據(jù)由右側(cè)和底部指定的區(qū)域(如果包含)。 如果不包括填充行雾家,Android將使用左側(cè)和上側(cè)的行來定義該可繪制區(qū)域铃彰。
為了澄清線之間的差異,左和右線定義允許復(fù)制圖像的哪些像素以拉伸圖像芯咧。 底部和右側(cè)的行定義圖像內(nèi)允許占據(jù)的內(nèi)容的相對(duì)區(qū)域牙捉。
圖1顯示了用于定義按鈕的NinePatch圖形的示例:

ninepatch_raw.png

虛線灰色線標(biāo)識(shí)復(fù)制圖像的區(qū)域以拉伸圖像竹揍。 底部圖像中的粉色矩形標(biāo)識(shí)允許視圖內(nèi)容的區(qū)域。 如果內(nèi)容不適合該區(qū)域邪铲,則圖像被拉伸以使其適合芬位。
Draw 9補(bǔ)丁工具使用WYSIWYG圖形編輯器提供了一種非常方便的創(chuàng)建NinePatch圖像的方法。 如果您為可伸縮區(qū)域定義的區(qū)域有可能由于像素復(fù)制而產(chǎn)生繪圖工件带到,那么它甚至?xí)l(fā)警告晶衷。
以下示例布局XML演示了如何將NinePatch圖形添加到幾個(gè)按鈕。 NinePatch圖像保存到res / drawable / my_button_background.9.png阴孟。

<Button id="@+id/tiny"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerInParent="true"
        android:text="Tiny"
        android:textSize="8sp"
        android:background="@drawable/my_button_background"/>

<Button id="@+id/big"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerInParent="true"
        android:text="Biiiiiiig text!"
        android:textSize="30sp"
        android:background="@drawable/my_button_background"/>

請(qǐng)注意晌纫,layout_width和layout_height屬性設(shè)置為wrap_content以使按鈕整齊地貼合在文本上。
圖2顯示了從上面顯示的XML和NinePatch圖像呈現(xiàn)的兩個(gè)按鈕永丝。 請(qǐng)注意按鈕的寬度和高度如何隨著文字而變化锹漱,背景圖片會(huì)延伸以適應(yīng)它。


ninepatch_examples.png

Vector drawables

矢量drawable是一個(gè)在XML文件中定義的向量圖形慕嚷,它是一組點(diǎn)哥牍,線和曲線以及相關(guān)聯(lián)的顏色信息。 Android框架提供了VectorDrawable和AnimatedVectorDrawable類喝检,它們支持矢量圖形作為可繪制的資源嗅辣。
針對(duì)Android版本低于5.0(API級(jí)別21)的應(yīng)用程序可以使用支持庫(kù)版本23.2或更高版本來獲取矢量繪圖和動(dòng)畫矢量繪圖的支持。 有關(guān)使用向量可繪制類的更多信息挠说,請(qǐng)參閱Vector Drawable澡谭。

low_stiffness.gif

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市损俭,隨后出現(xiàn)的幾起案子蛙奖,更是在濱河造成了極大的恐慌,老刑警劉巖杆兵,帶你破解...
    沈念sama閱讀 218,941評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件雁仲,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡琐脏,警方通過查閱死者的電腦和手機(jī)攒砖,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來日裙,“玉大人吹艇,你說我怎么就攤上這事≡那” “怎么了掐暮?”我有些...
    開封第一講書人閱讀 165,345評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)政钟。 經(jīng)常有香客問我路克,道長(zhǎng)樟结,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,851評(píng)論 1 295
  • 正文 為了忘掉前任精算,我火速辦了婚禮瓢宦,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘灰羽。我一直安慰自己驮履,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評(píng)論 6 392
  • 文/花漫 我一把揭開白布廉嚼。 她就那樣靜靜地躺著玫镐,像睡著了一般。 火紅的嫁衣襯著肌膚如雪怠噪。 梳的紋絲不亂的頭發(fā)上恐似,一...
    開封第一講書人閱讀 51,688評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音傍念,去河邊找鬼矫夷。 笑死,一個(gè)胖子當(dāng)著我的面吹牛憋槐,可吹牛的內(nèi)容都是我干的双藕。 我是一名探鬼主播,決...
    沈念sama閱讀 40,414評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼阳仔,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼忧陪!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起驳概,我...
    開封第一講書人閱讀 39,319評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤赤嚼,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后顺又,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,775評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡等孵,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年稚照,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片俯萌。...
    茶點(diǎn)故事閱讀 40,096評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡果录,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出咐熙,到底是詐尸還是另有隱情弱恒,我是刑警寧澤,帶...
    沈念sama閱讀 35,789評(píng)論 5 346
  • 正文 年R本政府宣布棋恼,位于F島的核電站返弹,受9級(jí)特大地震影響锈玉,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜义起,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評(píng)論 3 331
  • 文/蒙蒙 一拉背、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧默终,春花似錦椅棺、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至含滴,卻和暖如春诱渤,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蛙吏。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評(píng)論 1 271
  • 我被黑心中介騙來泰國(guó)打工源哩, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人鸦做。 一個(gè)月前我還...
    沈念sama閱讀 48,308評(píng)論 3 372
  • 正文 我出身青樓励烦,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親泼诱。 傳聞我的和親對(duì)象是個(gè)殘疾皇子坛掠,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評(píng)論 2 355

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