AppBar布局的使用方式

歡迎Follow我的GitHub, 關(guān)注我的簡(jiǎn)書. 其余參考Android目錄.

效果

本文的合集已經(jīng)編著成書,高級(jí)Android開發(fā)強(qiáng)化實(shí)戰(zhàn)呻待,歡迎各位讀友的建議和指導(dǎo)。在京東即可購(gòu)買:https://item.jd.com/12385680.html

Android

AppBar作為Android5.0的重要?jiǎng)赢嬓Ч? 非常絢麗的UI, 通過內(nèi)容驅(qū)動(dòng), 可以減少頁(yè)面的訪問, 更加便捷的傳遞主題思想. 那么我們看看如何使用.

本文源碼的GitHub下載地址

1. 準(zhǔn)備

創(chuàng)建一個(gè)Navigation Drawer的工程, 修改主題顏色.

<resources>
    <color name="colorPrimary">#FF1493</color>
    <color name="colorPrimaryDark">#FF1493</color>
    <color name="colorAccent">#FF4081</color>
</resources>

修改抽屜的漸變顏色side_nav_bar.xml

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle" >
    <gradient
        android:startColor="#FF34"
        android:centerColor="#FF3E96"
        android:endColor="#FF1493"
        android:type="linear"
        android:angle="135"/>
</shape>

2. ViewPager

修改app_bar_main.xml, 在CoordinatorLayout中添加ViewPager.

    <android.support.v4.view.ViewPager
        android:id="@+id/main_vp_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior"/>

設(shè)置ViewPager的Fragment內(nèi)容

/**
 * 簡(jiǎn)單的Fragment
 * <p/>
 * Created by wangchenlong on 15/11/9.
 */
public class SimpleFragment extends Fragment {
    private static final String ARG_SELECTION_NUM = "arg_selection_num";

    @Bind(R.id.main_tv_text) TextView mTvText;

    public SimpleFragment() {
    }

    public static SimpleFragment newInstance(int selectionNum) {
        SimpleFragment simpleFragment = new SimpleFragment();
        Bundle args = new Bundle();
        args.putInt(ARG_SELECTION_NUM, selectionNum);
        simpleFragment.setArguments(args);
        return simpleFragment;
    }


    @Nullable @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_main, container, false);

        ButterKnife.bind(this, view);
        return view;
    }

    @Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        mTvText.setText("Page " + String.valueOf(getArguments().getInt(ARG_SELECTION_NUM)));
    }

    @Override public void onDestroyView() {
        super.onDestroyView();
        ButterKnife.unbind(this);
    }
}

設(shè)置ViewPager的適配器

/**
 * ViewPager的適配器
 * <p/>
 * Created by wangchenlong on 15/11/9.
 */
public class SimpleAdapter extends FragmentPagerAdapter {

    private static final String[] TITLE = {"SELECTION 1", "SELECTION 2", "SELECTION 3"};

    public SimpleAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override public Fragment getItem(int position) {
        return SimpleFragment.newInstance(position + 1);
    }

    @Override public int getCount() {
        return TITLE.length;
    }

    @Override public CharSequence getPageTitle(int position) {
        if (position >= 0 && position < TITLE.length) {
            return TITLE[position];
        }
        return null;
    }
}

在MainActivity中添加ViewPager邏輯

mVpContainer.setAdapter(new SimpleAdapter(getSupportFragmentManager()));

3. AppBarLayout

修改AppBarLayout, 添加CollapsingToolbarLayout.

    <android.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:fitsSystemWindows="true"
        android:theme="@style/AppTheme.AppBarOverlay">

        <android.support.design.widget.CollapsingToolbarLayout
            android:layout_width="match_parent"
            android:layout_height="400dp"
            android:fitsSystemWindows="true"
            app:contentScrim="?attr/colorPrimary"
            app:expandedTitleMarginStart="16dp"
            app:expandedTitleMarginEnd="16dp"
            app:layout_scrollFlags="scroll|exitUntilCollapsed">

            <ImageView
                android:id="@+id/toolbar_iv_image"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:adjustViewBounds="true"
                android:contentDescription="@null"
                android:fitsSystemWindows="true"
                android:scaleType="centerCrop"
                android:src="@drawable/taeyeon"
                app:layout_collapseMode="parallax"/>

            <android.support.v7.widget.Toolbar
                android:id="@+id/toolbar"
                android:layout_width="match_parent"
                android:layout_height="?attr/actionBarSize"
                app:layout_collapseMode="pin"
                app:popupTheme="@style/AppTheme.PopupOverlay"/>

        </android.support.design.widget.CollapsingToolbarLayout>

刪除Toolbar的background顏色, 避免Toolbar擋住圖片;
AppBarLayout設(shè)置fitsSystemWindows覆蓋StatusBar背景;
CollapsingToolbarLayout包含圖片和Toolbar.

4. TabLayout

在AppBarLayout中, 添加TabLayout

        <android.support.design.widget.TabLayout
            android:id="@+id/toolbar_tl_tab"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:layout_gravity="bottom"
            app:layout_scrollFlags="scroll"/>

TabLayout添加layout_scrollFlags確保滑動(dòng).

把ViewPager加入TabLayout

mTlTab.setupWithViewPager(mVpContainer);

基本功能已經(jīng)完成, 再添加隨著頁(yè)面切換AppBarLayout的圖片視圖.

5. 漸變效果

在圖片視圖中, 再添加一層圖片, 模擬漸變動(dòng)畫.

            <FrameLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:fitsSystemWindows="true"
                app:layout_collapseMode="parallax">

                <ImageView
                    android:id="@+id/toolbar_iv_outgoing"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:adjustViewBounds="true"
                    android:contentDescription="@null"
                    android:scaleType="centerCrop"
                    android:visibility="gone"/>

                <ImageView
                    android:id="@+id/toolbar_iv_image"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:adjustViewBounds="true"
                    android:contentDescription="@null"
                    android:fitsSystemWindows="true"
                    android:scaleType="centerCrop"
                    android:src="@drawable/tiffany"
                    app:layout_collapseMode="parallax"/>
            </FrameLayout>

修改Adapter, 為每個(gè)頁(yè)面添加一個(gè)圖片

/**
 * ViewPager的適配器
 * <p/>
 * Created by wangchenlong on 15/11/9.
 */
public class SimpleAdapter extends FragmentPagerAdapter {

    private static final Section[] SECTIONS = {
            new Section("Tiffany", R.drawable.tiffany),
            new Section("Taeyeon", R.drawable.taeyeon),
            new Section("Yoona", R.drawable.yoona)
    };

    public SimpleAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override public Fragment getItem(int position) {
        return SimpleFragment.newInstance(position + 1);
    }

    @Override public int getCount() {
        return SECTIONS.length;
    }

    @Override public CharSequence getPageTitle(int position) {
        if (position >= 0 && position < SECTIONS.length) {
            return SECTIONS[position].getTitle();
        }
        return null;
    }

    @DrawableRes
    public int getDrawable(int position) {
        if (position >= 0 && position < SECTIONS.length) {
            return SECTIONS[position].getDrawable();
        }
        return -1;
    }

    private static final class Section {
        private final String mTitle; // 標(biāo)題
        @DrawableRes private final int mDrawable; // 圖片

        public Section(String title, int drawable) {
            mTitle = title;
            mDrawable = drawable;
        }

        public String getTitle() {
            return mTitle;
        }

        public int getDrawable() {
            return mDrawable;
        }
    }
}

兩個(gè)圖像頁(yè)面的漸變動(dòng)畫

/**
 * 漸變的動(dòng)畫效果
 * <p/>
 * Created by wangchenlong on 15/11/9.
 */
public class ImageAnimator {

    private final SimpleAdapter mAdapter; // 適配器
    private final ImageView mTargetImage; // 原始圖片
    private final ImageView mOutgoingImage; // 漸變圖片

    private int mActualStart; // 實(shí)際起始位置

    public ImageAnimator(SimpleAdapter adapter, ImageView targetImage, ImageView outgoingImage) {
        mAdapter = adapter;
        mTargetImage = targetImage;
        mOutgoingImage = outgoingImage;
    }

    /**
     * 啟動(dòng)動(dòng)畫, 之后選擇向前或向后滑動(dòng)
     *
     * @param startPosition 起始位置
     * @param endPosition   終止位置
     */
    public void start(int startPosition, int endPosition) {
        mActualStart = startPosition;

        // 終止位置的圖片
        @DrawableRes int incomeId = mAdapter.getDrawable(endPosition);

        // 原始圖片
        mOutgoingImage.setImageDrawable(mTargetImage.getDrawable()); // 原始的圖片
        mOutgoingImage.setVisibility(View.VISIBLE);
        mOutgoingImage.setAlpha(1.0f);

        // 目標(biāo)圖片
        mTargetImage.setImageResource(incomeId);
    }

    /**
     * 滑動(dòng)結(jié)束的動(dòng)畫效果
     *
     * @param endPosition 滑動(dòng)位置
     */
    public void end(int endPosition) {
        @DrawableRes int incomeId = mAdapter.getDrawable(endPosition);
        mTargetImage.setTranslationX(0f);

        // 設(shè)置原始圖片
        if (endPosition == mActualStart) {
            mTargetImage.setImageDrawable(mOutgoingImage.getDrawable());
        } else {
            mTargetImage.setImageResource(incomeId);
            mTargetImage.setAlpha(1f);
            mOutgoingImage.setVisibility(View.GONE);
        }
    }

    // 向后滾動(dòng), 比如0->1, offset滾動(dòng)的距離(0->1), 目標(biāo)漸漸淡出
    public void forward(float positionOffset) {
        mTargetImage.setAlpha(positionOffset);
    }

    // 向前滾動(dòng), 比如1->0, offset滾動(dòng)的距離(1->0), 目標(biāo)漸漸淡出
    public void backwards(float positionOffset) {
        mTargetImage.setAlpha(1 - positionOffset);
    }
}

注釋已經(jīng)寫的很詳細(xì)了, 注意的是向前向后滑動(dòng), position的值不同. 向前滑動(dòng), position的值是當(dāng)前值減一; 向后滑動(dòng), position的值不變. 也就是說, position總是較小值. 偏移量, 向后滑動(dòng)時(shí), 從0至1; 向前滑動(dòng)時(shí), 從1至0.

ViewPager的監(jiān)聽, 使用動(dòng)畫效果

/**
 * ViewPager滑動(dòng)頁(yè)面監(jiān)聽
 * <p/>
 * Created by wangchenlong on 15/11/9.
 */
public class PagerChangeListener implements ViewPager.OnPageChangeListener {
    private ImageAnimator mImageAnimator;

    private int mCurrentPosition;

    private int mFinalPosition;

    private boolean mIsScrolling = false;

    public PagerChangeListener(ImageAnimator imageAnimator) {
        mImageAnimator = imageAnimator;
    }

    public static PagerChangeListener newInstance(SimpleAdapter adapter, ImageView originImage, ImageView outgoingImage) {
        ImageAnimator imageAnimator = new ImageAnimator(adapter, originImage, outgoingImage);
        return new PagerChangeListener(imageAnimator);
    }

    /**
     * 滑動(dòng)監(jiān)聽
     *
     * @param position             當(dāng)前位置
     * @param positionOffset       偏移[當(dāng)前值+-1]
     * @param positionOffsetPixels 偏移像素
     */
    @Override
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

        Log.e("DEBUG-WCL", "position: " + position + ", positionOffset: " + positionOffset);

        // 以前滑動(dòng), 現(xiàn)在終止
        if (isFinishedScrolling(position, positionOffset)) {
            finishScroll(position);
        }

        // 判斷前后滑動(dòng)
        if (isStartingScrollToPrevious(position, positionOffset)) {
            startScroll(position);
        } else if (isStartingScrollToNext(position, positionOffset)) {
            startScroll(position + 1); // 向后滾動(dòng)需要加1
        }

        // 向后滾動(dòng)
        if (isScrollingToNext(position, positionOffset)) {
            mImageAnimator.forward(positionOffset);
        } else if (isScrollingToPrevious(position, positionOffset)) { // 向前滾動(dòng)
            mImageAnimator.backwards(positionOffset);
        }
    }

    /**
     * 終止滑動(dòng)
     * 滑動(dòng) && [偏移是0&&滑動(dòng)終點(diǎn)] || 動(dòng)畫之中
     *
     * @param position       位置
     * @param positionOffset 偏移量
     * @return 終止滑動(dòng)
     */
    public boolean isFinishedScrolling(int position, float positionOffset) {
        return mIsScrolling && (positionOffset == 0f && position == mFinalPosition);
    }

    /**
     * 從靜止到開始滑動(dòng), 下一個(gè)
     * 未滑動(dòng) && 位置是當(dāng)前位置 && 偏移量不是0
     *
     * @param position       位置
     * @param positionOffset 偏移量
     * @return 是否
     */
    private boolean isStartingScrollToNext(int position, float positionOffset) {
        return !mIsScrolling && position == mCurrentPosition && positionOffset != 0f;
    }

    /**
     * 從靜止到開始滑動(dòng), 前一個(gè)[position會(huì)-1]
     *
     * @param position       位置
     * @param positionOffset 偏移量
     * @return 是否
     */
    private boolean isStartingScrollToPrevious(int position, float positionOffset) {
        return !mIsScrolling && position != mCurrentPosition && positionOffset != 0f;
    }

    /**
     * 開始滾動(dòng), 向后
     *
     * @param position       位置
     * @param positionOffset 偏移
     * @return 是否
     */
    private boolean isScrollingToNext(int position, float positionOffset) {
        return mIsScrolling && position == mCurrentPosition && positionOffset != 0f;
    }

    /**
     * 開始滾動(dòng), 向前
     *
     * @param position       位置
     * @param positionOffset 偏移
     * @return 是否
     */
    private boolean isScrollingToPrevious(int position, float positionOffset) {
        return mIsScrolling && position != mCurrentPosition && positionOffset != 0f;
    }

    /**
     * 開始滑動(dòng)
     * 滾動(dòng)開始, 結(jié)束位置是position[前滾時(shí)position會(huì)自動(dòng)減一], 動(dòng)畫從當(dāng)前位置到結(jié)束位置.
     *
     * @param position 滾動(dòng)結(jié)束之后的位置
     */
    private void startScroll(int position) {
        mIsScrolling = true;
        mFinalPosition = position;

        // 開始滾動(dòng)動(dòng)畫
        mImageAnimator.start(mCurrentPosition, position);
    }

    /**
     * 如果正在滾動(dòng), 結(jié)束時(shí), 固定position位置, 停止?jié)L動(dòng), 調(diào)動(dòng)截止動(dòng)畫
     *
     * @param position 位置
     */
    private void finishScroll(int position) {
        if (mIsScrolling) {
            mCurrentPosition = position;
            mIsScrolling = false;
            mImageAnimator.end(position);
        }
    }

    @Override
    public void onPageScrollStateChanged(int state) {
        //NO-OP
    }

    @Override
    public void onPageSelected(int position) {
        if (!mIsScrolling) {
            mIsScrolling = true;
            mFinalPosition = position;
            mImageAnimator.start(mCurrentPosition, position);
        }
    }
}

詳細(xì)內(nèi)容參見注釋

ViewPager添加滾動(dòng)監(jiān)聽.

        SimpleAdapter adapter = new SimpleAdapter(getSupportFragmentManager());
        mVpContainer.setAdapter(adapter);
        mVpContainer.addOnPageChangeListener(PagerChangeListener.newInstance(adapter, mIvTarget, mIvOutgoing));

6. 頁(yè)面滾動(dòng)

在ViewPager上, 嵌套NestedScrollView.

    <android.support.v4.widget.NestedScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fillViewport="true"
        android:scrollbars="none"
        app:layout_behavior="@string/appbar_scrolling_view_behavior">

        <android.support.v4.view.ViewPager
            android:id="@+id/main_vp_container"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:layout_behavior="@string/appbar_scrolling_view_behavior"/>

    </android.support.v4.widget.NestedScrollView>

android:fillViewport允許ScrollView內(nèi)的組件填充, 否則ViewPager顯示.

設(shè)置標(biāo)題, MainActivity.

setTitle("Girls' Generation");

動(dòng)畫效果


AppBar

7. 偏移滾動(dòng)

額, 與其說是AppBar, 不如說是ViewPager, 再添加一些動(dòng)畫效果, 和修復(fù)Bug.
把圖片的左右10%, 隱藏起來, 滑動(dòng)時(shí), 一邊漸變一邊側(cè)移.
app_bar_main中, 替換FrameLayoutPercentFrameLayout, 寬度設(shè)置為120%.

            <android.support.percent.PercentFrameLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_gravity="center_horizontal"
                android:fitsSystemWindows="true"
                app:layout_collapseMode="parallax">

                <ImageView
                    android:id="@+id/toolbar_iv_outgoing"
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center_horizontal"
                    android:adjustViewBounds="true"
                    android:contentDescription="@null"
                    android:scaleType="centerCrop"
                    android:visibility="gone"
                    app:layout_widthPercent="120%"/>

                <ImageView
                    android:id="@+id/toolbar_iv_target"
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center_horizontal"
                    android:adjustViewBounds="true"
                    android:contentDescription="@null"
                    android:fitsSystemWindows="true"
                    android:scaleType="centerCrop"
                    android:src="@drawable/tiffany"
                    app:layout_collapseMode="parallax"
                    app:layout_widthPercent="120%"/>

            </android.support.percent.PercentFrameLayout>

修改滑動(dòng)動(dòng)畫(Image), 在向前向后滑動(dòng)時(shí), setTranslationXX軸平移.

/**
 * 漸變的動(dòng)畫效果
 * <p/>
 * Created by wangchenlong on 15/11/9.
 */
public class ImageAnimator {

    private static final float FACTOR = 0.1f;

    private final SimpleAdapter mAdapter; // 適配器
    private final ImageView mTargetImage; // 原始圖片
    private final ImageView mOutgoingImage; // 漸變圖片

    private int mActualStart; // 實(shí)際起始位置

    private int mStart;
    private int mEnd;

    public ImageAnimator(SimpleAdapter adapter, ImageView targetImage, ImageView outgoingImage) {
        mAdapter = adapter;
        mTargetImage = targetImage;
        mOutgoingImage = outgoingImage;
    }

    /**
     * 啟動(dòng)動(dòng)畫, 之后選擇向前或向后滑動(dòng)
     *
     * @param startPosition 起始位置
     * @param endPosition   終止位置
     */
    public void start(int startPosition, int endPosition) {
        mActualStart = startPosition;

        // 終止位置的圖片
        @DrawableRes int incomeId = mAdapter.getDrawable(endPosition);

        // 原始圖片
        mOutgoingImage.setImageDrawable(mTargetImage.getDrawable()); // 原始的圖片

        // 起始圖片
        mOutgoingImage.setTranslationX(0f);

        mOutgoingImage.setVisibility(View.VISIBLE);
        mOutgoingImage.setAlpha(1.0f);

        // 目標(biāo)圖片
        mTargetImage.setImageResource(incomeId);

        mStart = Math.min(startPosition, endPosition);
        mEnd = Math.max(startPosition, endPosition);
    }

    /**
     * 滑動(dòng)結(jié)束的動(dòng)畫效果
     *
     * @param endPosition 滑動(dòng)位置
     */
    public void end(int endPosition) {
        @DrawableRes int incomeId = mAdapter.getDrawable(endPosition);
        mTargetImage.setTranslationX(0f);

        // 設(shè)置原始圖片
        if (endPosition == mActualStart) {
            mTargetImage.setImageDrawable(mOutgoingImage.getDrawable());
        } else {
            mTargetImage.setImageResource(incomeId);
            mTargetImage.setAlpha(1f);
            mOutgoingImage.setVisibility(View.GONE);
        }
    }

    // 向前滾動(dòng), 比如0->1, offset滾動(dòng)的距離(0->1), 目標(biāo)漸漸淡出
    public void forward(float positionOffset) {
        Log.e("DEBUG-WCL", "forward-positionOffset: " + positionOffset);
        int width = mTargetImage.getWidth();
        mOutgoingImage.setTranslationX(-positionOffset * (FACTOR * width));
        mTargetImage.setTranslationX((1 - positionOffset) * (FACTOR * width));

        mTargetImage.setAlpha(positionOffset);
    }

    // 向后滾動(dòng), 比如1->0, offset滾動(dòng)的距離(1->0), 目標(biāo)漸漸淡入
    public void backwards(float positionOffset) {
        Log.e("DEBUG-WCL", "backwards-positionOffset: " + positionOffset);
        int width = mTargetImage.getWidth();
        mOutgoingImage.setTranslationX((1 - positionOffset) * (FACTOR * width));
        mTargetImage.setTranslationX(-(positionOffset) * (FACTOR * width));

        mTargetImage.setAlpha(1 - positionOffset);
    }

    // 判斷停止
    public boolean isWithin(int position) {
        return position >= mStart && position < mEnd;
    }
}

修復(fù)滾動(dòng)Bug, 連續(xù)滾動(dòng)時(shí), 及時(shí)更新當(dāng)前圖片, 否則圖片異常.

    /**
     * 終止滑動(dòng)
     * 滑動(dòng) && [偏移是0&&滑動(dòng)終點(diǎn)] || 動(dòng)畫之中 || 未在區(qū)間即連續(xù)滾動(dòng)
     *
     * @param position       位置
     * @param positionOffset 偏移量
     * @return 終止滑動(dòng)
     */
    public boolean isFinishedScrolling(int position, float positionOffset) {
        return mIsScrolling && (positionOffset == 0f && position == mFinalPosition) || !mImageAnimator.isWithin(position);
    }

全部功能都已經(jīng)完成了. AppBar的知識(shí)就這些了.

OK, that's all! Enjoy it!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末精绎,一起剝皮案震驚了整個(gè)濱河市祟霍,隨后出現(xiàn)的幾起案子杏头,更是在濱河造成了極大的恐慌盈包,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,544評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件醇王,死亡現(xiàn)場(chǎng)離奇詭異呢燥,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)寓娩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門叛氨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人棘伴,你說我怎么就攤上這事寞埠。” “怎么了焊夸?”我有些...
    開封第一講書人閱讀 162,764評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵仁连,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我阱穗,道長(zhǎng)饭冬,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,193評(píng)論 1 292
  • 正文 為了忘掉前任揪阶,我火速辦了婚禮昌抠,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘鲁僚。我一直安慰自己扰魂,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評(píng)論 6 388
  • 文/花漫 我一把揭開白布蕴茴。 她就那樣靜靜地躺著劝评,像睡著了一般。 火紅的嫁衣襯著肌膚如雪倦淀。 梳的紋絲不亂的頭發(fā)上蒋畜,一...
    開封第一講書人閱讀 51,182評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音撞叽,去河邊找鬼姻成。 笑死,一個(gè)胖子當(dāng)著我的面吹牛愿棋,可吹牛的內(nèi)容都是我干的科展。 我是一名探鬼主播,決...
    沈念sama閱讀 40,063評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼糠雨,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼才睹!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,917評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤琅攘,失蹤者是張志新(化名)和其女友劉穎垮庐,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體坞琴,經(jīng)...
    沈念sama閱讀 45,329評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡哨查,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了剧辐。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片寒亥。...
    茶點(diǎn)故事閱讀 39,722評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖荧关,靈堂內(nèi)的尸體忽然破棺而出溉奕,到底是詐尸還是另有隱情,我是刑警寧澤羞酗,帶...
    沈念sama閱讀 35,425評(píng)論 5 343
  • 正文 年R本政府宣布腐宋,位于F島的核電站紊服,受9級(jí)特大地震影響檀轨,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜欺嗤,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評(píng)論 3 326
  • 文/蒙蒙 一参萄、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧煎饼,春花似錦讹挎、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至沾乘,卻和暖如春怜奖,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背翅阵。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工歪玲, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人掷匠。 一個(gè)月前我還...
    沈念sama閱讀 47,729評(píng)論 2 368
  • 正文 我出身青樓滥崩,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親讹语。 傳聞我的和親對(duì)象是個(gè)殘疾皇子钙皮,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評(píng)論 2 353

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