三方分享長圖瞳浦、大圖

描述一下這個(gè)問題的背景,一個(gè)日志废士,有文字和很多張圖片叫潦,以RecyclerView為載體顯示,可以上下滑動(dòng)官硝。分享的時(shí)候需要將整個(gè)界面都分享出去矗蕊,包括文字和圖片。整個(gè)屏幕還可以截圖氢架,那超出屏幕的又該怎么去做呢傻咖,在網(wǎng)上找了一些代碼,整理了一下岖研。先上一張效果圖(還不會(huì)像其他博友那樣做動(dòng)圖卿操,先上靜態(tài)圖)。
分享之前的圖:


分享出去的圖片:


在這里就不詳細(xì)介紹如何集成分享的三方了孙援。我用的是友盟集成的qq,微信和微博分享害淤。這里給個(gè)友盟分享的配置文檔的地址(Androidhttp://dev.umeng.com/social/android/android-update
這里簡單講一下代碼,點(diǎn)擊右上角拓售,會(huì)彈出一個(gè)對(duì)話框窥摄。

private void showPopup() {
        final String[] stringItems = {"分享", "刪除"};
        final CustomActionSheetDialog dialog = new CustomActionSheetDialog(this, stringItems, null);
        dialog.isTitleShow(false).isCancelShow(false)
                .itemTextColor(getResources().getColor(R.color.ese_white))
                .itemPressColor(getResources().getColor(R.color.ese_orange))
                .lvBgColor(getResources().getColor(R.color.baby_orange))
                .show();

        dialog.setOnOperItemClickL(new OnOperItemClickL() {
            @Override
            public void onOperItemClick(AdapterView<?> parent, View view, int position, long id) {
                dialog.dismiss();
                switch (position) {
                    case 0:
                        if (mNewsDetail == null) {
                            showToast("沒有內(nèi)容可供分享");
                            return;
                        }
                        showSharePopup();
                        break;
                    case 1:
                        photoDetailPresenter.deletePic(mNewsDetail.getPk_image_news_id());
                        break;
                    default:
                        break;
                }
            }
        });

    }

我這里采用的是mvp開發(fā)模式,網(wǎng)絡(luò)請(qǐng)求都在presenter中础淤,更新UI在MvpView中溪王,至于mvp大家就看看網(wǎng)上大牛的介紹。這里彈出Dialog使用的是自定義下方彈出對(duì)話框值骇。

package com.abings.baby.ui.home2;

import android.content.Context;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.util.TypedValue;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.Animation;
import android.view.animation.DecelerateInterpolator;
import android.view.animation.LayoutAnimationController;
import android.view.animation.TranslateAnimation;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.LinearLayout.LayoutParams;
import android.widget.ListView;
import android.widget.TextView;

import com.flyco.dialog.entity.DialogMenuItem;
import com.flyco.dialog.listener.OnOperItemClickL;
import com.flyco.dialog.utils.CornerUtils;
import com.flyco.dialog.widget.base.BottomBaseDialog;

import java.util.ArrayList;

/**
 * Dialog like iOS ActionSheet(iOS風(fēng)格對(duì)話框)
 */
public class CustomActionSheetDialog extends BottomBaseDialog<CustomActionSheetDialog> {
    /**
     * ListView
     */
    private ListView mLv;
    /**
     * title
     */
    private TextView mTvTitle;
    /**
     * title underline(標(biāo)題下劃線)
     */
    private View mVLineTitle;
    /**
     * mCancel button(取消按鈕)
     */
    private TextView mTvCancel;
    /**
     * corner radius,dp(圓角程度,單位dp)
     */
    private float mCornerRadius = 0;
    /**
     * title background color(標(biāo)題背景顏色)
     */
    private int mTitleBgColor = Color.parseColor("#ddffffff");
    /**
     * title text(標(biāo)題)
     */
    private String mTitle = "提示";
    /**
     * title height(標(biāo)題欄高度)
     */
    private float mTitleHeight = 48;
    /**
     * title textcolor(標(biāo)題顏色)
     */
    private int mTitleTextColor = Color.parseColor("#8F8F8F");
    /**
     * title textsize(標(biāo)題字體大小,單位sp)
     */
    private float mTitleTextSize = 17.5f;
    /**
     * ListView background color(ListView背景色)
     */
    private int mLvBgColor = Color.parseColor("#ddffffff");
    /**
     * divider color(ListView divider顏色)
     */
    private int mDividerColor = Color.parseColor("#D7D7D9");
    /**
     * divider height(ListView divider高度)
     */
    private float mDividerHeight = 0.8f;
    /**
     * item press color(ListView item按住顏色)
     */
    private int mItemPressColor = Color.parseColor("#ffcccccc");
    /**
     * item textcolor(ListView item文字顏色)
     */
    private int mItemTextColor = Color.parseColor("#44A2FF");
    /**
     * item textsize(ListView item文字大小)
     */
    private float mItemTextSize = 17.5f;
    /**
     * item height(ListView item高度)
     */
    private float mItemHeight = 48;
    /**
     * enable title show(是否顯示標(biāo)題)
     */
    private boolean mIsTitleShow = true;

    /**
     * enable title show(是否顯示取消)
     */
    private boolean mIsCancelShow = true;

    /***
     * cancel btn text(取消按鈕內(nèi)容)
     */
    private String mCancelText = "取消";
    /**
     * cancel btn text color(取消按鈕文字顏色)
     */
    private int mCancelTextColor = Color.parseColor("#44A2FF");
    /**
     * cancel btn text size(取消按鈕文字大小)
     */
    private float mCancelTextSize = 17.5f;
    /**
     * adapter(自定義適配器)
     */
    private BaseAdapter mAdapter;
    /**
     * operation items(操作items)
     */
    private ArrayList<DialogMenuItem> mContents = new ArrayList<>();
    private OnOperItemClickL mOnOperItemClickL;
    private LayoutAnimationController mLac;

    public void setOnOperItemClickL(OnOperItemClickL onOperItemClickL) {
        mOnOperItemClickL = onOperItemClickL;
    }

    public CustomActionSheetDialog(Context context, ArrayList<DialogMenuItem> baseItems, View animateView) {
        super(context, animateView);
        mContents.addAll(baseItems);
        init();
    }

    public CustomActionSheetDialog(Context context, String[] items, View animateView) {
        super(context, animateView);
        mContents = new ArrayList<>();
        for (String item : items) {
            DialogMenuItem customBaseItem = new DialogMenuItem(item, 0);
            mContents.add(customBaseItem);
        }
        init();
    }

    public CustomActionSheetDialog(Context context, BaseAdapter adapter, View animateView) {
        super(context, animateView);
        mAdapter = adapter;
        init();
    }

    private void init() {
        widthScale(1.0f);
        /** LayoutAnimation */
        TranslateAnimation animation = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0f, Animation.RELATIVE_TO_SELF,
                0f, Animation.RELATIVE_TO_SELF, 6f, Animation.RELATIVE_TO_SELF, 0);
        animation.setInterpolator(new DecelerateInterpolator());
        animation.setDuration(350);
        animation.setStartOffset(150);

        mLac = new LayoutAnimationController(animation, 0.12f);
        mLac.setInterpolator(new DecelerateInterpolator());
    }

    @Override
    public View onCreateView() {
        LinearLayout ll_container = new LinearLayout(mContext);
        ll_container.setOrientation(LinearLayout.VERTICAL);
        ll_container.setBackgroundColor(Color.TRANSPARENT);

        /** title */
        mTvTitle = new TextView(mContext);
        mTvTitle.setGravity(Gravity.CENTER);
        mTvTitle.setPadding(dp2px(10), dp2px(5), dp2px(10), dp2px(5));

        LayoutParams params = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
        params.topMargin = dp2px(20);

        ll_container.addView(mTvTitle, params);

        /** title underline */
        mVLineTitle = new View(mContext);
        ll_container.addView(mVLineTitle);

        /** listview */
        mLv = new ListView(mContext);
        mLv.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT, 1));
        mLv.setCacheColorHint(Color.TRANSPARENT);
        mLv.setFadingEdgeLength(0);
        mLv.setVerticalScrollBarEnabled(false);
        mLv.setSelector(new ColorDrawable(Color.TRANSPARENT));

        ll_container.addView(mLv);

        /** mCancel btn */
        mTvCancel = new TextView(mContext);
        mTvCancel.setGravity(Gravity.CENTER);
        LayoutParams lp = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
        lp.topMargin = dp2px(7);
        lp.bottomMargin = dp2px(7);
        mTvCancel.setLayoutParams(lp);

        ll_container.addView(mTvCancel);

        return ll_container;
    }

    @Override
    protected void onStart() {
        padding(0, 0, 0, 0);
        super.onStart();

    }

    @Override
    public void setUiBeforShow() {
        /** title */
        float radius = dp2px(mCornerRadius);
        mTvTitle.setHeight(dp2px(mTitleHeight));
        mTvTitle.setBackgroundDrawable(CornerUtils.cornerDrawable(mTitleBgColor, new float[]{radius, radius, radius,
                radius, 0, 0, 0, 0}));
        mTvTitle.setText(mTitle);
        mTvTitle.setTextSize(TypedValue.COMPLEX_UNIT_SP, mTitleTextSize);
        mTvTitle.setTextColor(mTitleTextColor);
        mTvTitle.setVisibility(mIsTitleShow ? View.VISIBLE : View.GONE);

        /** title underline */
        mVLineTitle.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, dp2px(mDividerHeight)));
        mVLineTitle.setBackgroundColor(mDividerColor);
        mVLineTitle.setVisibility(mIsTitleShow ? View.VISIBLE : View.GONE);

        /** mCancel btn */
        mTvCancel.setHeight(dp2px(mItemHeight));
        mTvCancel.setText(mCancelText);
        mTvCancel.setTextSize(TypedValue.COMPLEX_UNIT_SP, mCancelTextSize);
        mTvCancel.setTextColor(mCancelTextColor);
        mTvCancel.setBackgroundDrawable(CornerUtils.listItemSelector(radius, mLvBgColor, mItemPressColor, 1, 0));

        mTvCancel.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                dismiss();
            }
        });
        mTvCancel.setVisibility(mIsCancelShow ? View.VISIBLE : View.GONE);

        /** listview */
        mLv.setDivider(new ColorDrawable(mDividerColor));
        mLv.setDividerHeight(dp2px(mDividerHeight));

        if (mIsTitleShow) {
            mLv.setBackgroundDrawable(CornerUtils.cornerDrawable(mLvBgColor, new float[]{0, 0, 0, 0, radius, radius, radius,
                    radius}));
        } else {
            mLv.setBackgroundDrawable(CornerUtils.cornerDrawable(mLvBgColor, radius));
        }

        if (mAdapter == null) {
            mAdapter = new ListDialogAdapter();
        }

        mLv.setAdapter(mAdapter);
        mLv.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                if (mOnOperItemClickL != null) {
                    mOnOperItemClickL.onOperItemClick(parent, view, position, id);
                }
            }
        });

        mLv.setLayoutAnimation(mLac);
    }

    /**
     * set title background color(設(shè)置標(biāo)題欄背景色)
     */
    public CustomActionSheetDialog titleBgColor(int titleBgColor) {
        mTitleBgColor = titleBgColor;
        return this;
    }

    /**
     * set title text(設(shè)置標(biāo)題內(nèi)容)
     */
    public CustomActionSheetDialog title(String title) {
        mTitle = title;
        return this;
    }

    /**
     * set titleHeight(設(shè)置標(biāo)題高度)
     */
    public CustomActionSheetDialog titleHeight(float titleHeight) {
        mTitleHeight = titleHeight;
        return this;
    }

    /**
     * set title textsize(設(shè)置標(biāo)題字體大小)
     */
    public CustomActionSheetDialog titleTextSize_SP(float titleTextSize_SP) {
        mTitleTextSize = titleTextSize_SP;
        return this;
    }

    /**
     * set title textcolor(設(shè)置標(biāo)題字體顏色)
     */
    public CustomActionSheetDialog titleTextColor(int titleTextColor) {
        mTitleTextColor = titleTextColor;
        return this;
    }

    /**
     * enable title show(設(shè)置標(biāo)題是否顯示)
     */
    public CustomActionSheetDialog isTitleShow(boolean isTitleShow) {
        mIsTitleShow = isTitleShow;
        return this;
    }

    /**
     * enable title show(設(shè)置標(biāo)題是否顯示)
     */
    public CustomActionSheetDialog isCancelShow(boolean isCancelShow) {
        mIsCancelShow = isCancelShow;
        return this;
    }

    /**
     * set ListView background color(設(shè)置ListView背景)
     */
    public CustomActionSheetDialog lvBgColor(int lvBgColor) {
        mLvBgColor = lvBgColor;
        return this;
    }

    /**
     * set corner radius(設(shè)置圓角程度,單位dp)
     */
    public CustomActionSheetDialog cornerRadius(float cornerRadius_DP) {
        mCornerRadius = cornerRadius_DP;
        return this;
    }

    /**
     * set divider color(ListView divider顏色)
     */
    public CustomActionSheetDialog dividerColor(int dividerColor) {
        mDividerColor = dividerColor;
        return this;
    }

    /**
     * set divider height(ListView divider高度)
     */
    public CustomActionSheetDialog dividerHeight(float dividerHeight_DP) {
        mDividerHeight = dividerHeight_DP;
        return this;
    }

    /**
     * set item press color(item按住顏色)
     */
    public CustomActionSheetDialog itemPressColor(int itemPressColor) {
        mItemPressColor = itemPressColor;
        return this;
    }

    /**
     * set item textcolor(item字體顏色)* @return ActionSheetDialog
     */
    public CustomActionSheetDialog itemTextColor(int itemTextColor) {
        mItemTextColor = itemTextColor;
        return this;
    }

    /**
     * set item textsize(item字體大小)
     */
    public CustomActionSheetDialog itemTextSize(float itemTextSize_SP) {
        mItemTextSize = itemTextSize_SP;
        return this;
    }

    /**
     * set item height(item高度)
     */
    public CustomActionSheetDialog itemHeight(float itemHeight_DP) {
        mItemHeight = itemHeight_DP;
        return this;
    }

    /**
     * set layoutAnimation(設(shè)置layout動(dòng)畫 ,傳入null將不顯示layout動(dòng)畫)
     */
    public CustomActionSheetDialog layoutAnimation(LayoutAnimationController lac) {
        mLac = lac;
        return this;
    }

    /**
     * set cancel btn text(設(shè)置取消按鈕內(nèi)容)
     */
    public CustomActionSheetDialog cancelText(String cancelText) {
        mCancelText = cancelText;
        return this;
    }

    /**
     * cancel btn text color(取消按鈕文字顏色)
     */
    public CustomActionSheetDialog cancelText(int cancelTextColor) {
        mCancelTextColor = cancelTextColor;
        return this;
    }

    /**
     * cancel btn text size(取消按鈕文字大小)
     */
    public CustomActionSheetDialog cancelTextSize(float cancelTextSize) {
        mCancelTextSize = cancelTextSize;
        return this;
    }

    class ListDialogAdapter extends BaseAdapter {
        @Override
        public int getCount() {
            return mContents.size();
        }

        @Override
        public Object getItem(int position) {
            return null;
        }

        @Override
        public long getItemId(int position) {
            return position;
        }

        @SuppressWarnings("deprecation")
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            final DialogMenuItem item = mContents.get(position);

            LinearLayout llItem = new LinearLayout(mContext);
            llItem.setOrientation(LinearLayout.HORIZONTAL);
            llItem.setGravity(Gravity.CENTER_VERTICAL);

            ImageView ivItem = new ImageView(mContext);
            ivItem.setPadding(0, 0, dp2px(15), 0);
            llItem.addView(ivItem);

            TextView tvItem = new TextView(mContext);
            tvItem.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
            tvItem.setSingleLine(true);
            tvItem.setGravity(Gravity.CENTER);
            tvItem.setTextColor(mItemTextColor);
            tvItem.setTextSize(TypedValue.COMPLEX_UNIT_SP, mItemTextSize);
            tvItem.setHeight(dp2px(mItemHeight));

            llItem.addView(tvItem);
            float radius = dp2px(mCornerRadius);
            if (mIsTitleShow) {
                llItem.setBackgroundDrawable((CornerUtils.listItemSelector(radius, Color.TRANSPARENT, mItemPressColor,
                        position == mContents.size() - 1)));
            } else {
                llItem.setBackgroundDrawable(CornerUtils.listItemSelector(radius, Color.TRANSPARENT, mItemPressColor,
                        mContents.size(), position));
            }

            ivItem.setImageResource(item.mResId);
            tvItem.setText(item.mOperName);
            ivItem.setVisibility(item.mResId == 0 ? View.GONE : View.VISIBLE);

            return llItem;
        }
    }
}

這個(gè)dialog可以直接使用的,效果相當(dāng)不錯(cuò)移国。彈出diaLog之后吱瘩,需要設(shè)置每項(xiàng)點(diǎn)擊事件,讓整個(gè)控件生成一個(gè)bitmap迹缀,然后分享出去使碾。
void share(int i) {
        UMImage image = null;
        if (mNewsDetail.getImages() != null && mNewsDetail.getImages().size() > 0) {
            Bitmap bmp=ContentToPictureUtils.getBitmapByView(mscrollview);
            int options = 100;
            ByteArrayOutputStream output = new ByteArrayOutputStream();
            bmp.compress(Bitmap.CompressFormat.JPEG, 100, output);
            int options2 = 100;
            while (output.toByteArray().length > IMAGE_SIZE && options2 != 10) {
                output.reset(); //清空baos
                bmp.compress(Bitmap.CompressFormat.JPEG, options2, output);//這里壓縮options%,把壓縮后的數(shù)據(jù)存放到baos中
                options2 -= 10;
            }
            bmp= BitmapFactory.decodeByteArray(output.toByteArray(), 0, output.toByteArray().length);
            image=new UMImage(this,bmp);
        }

        switch (i) {
            case 0:
                dialog.shareWeixin(NewsActivity.this, "HelloBaby", mNewsDetail.getContent(), image, umShareListener,false);
                break;
            case 1:
                dialog.shareWeixinCircle(NewsActivity.this, "HelloBaby", mNewsDetail.getContent(), image, umShareListener,true);
                break;
            case 2:
                dialog.shareQQ(NewsActivity.this, "HelloBaby", mNewsDetail.getContent(), image, umShareListener);
                break;
            case 3:
                dialog.shareWeibo(NewsActivity.this, "HelloBaby", mNewsDetail.getContent(), image, umShareListener);
                break;
            default:
                break;
        }
    }

這里是將ScollView所包含的界面生產(chǎn)一個(gè)bitmap祝懂,工具類這里也給出票摇。

package com.abings.baby.utils;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.text.SimpleDateFormat;
import java.util.Date;

import android.annotation.SuppressLint;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Picture;
import android.net.Uri;
import android.os.Environment;
import android.view.View;
import android.webkit.WebSettings.LayoutAlgorithm;
import android.webkit.WebView;
import android.widget.ScrollView;

@SuppressWarnings("deprecation")
public class ContentToPictureUtils {

    public static String DCIMCamera_PATH = Environment
            .getExternalStorageDirectory() + "/DCIM/Camera/";
    
    /**
     * webView
     * 
     * @param context
     * @param webView
     */
    public static void webviewContent2Png(Context context, WebView webView) {
        Bitmap bmp = null;
        bmp = captureWebView(webView);
        // new Thread(new WorkThread(bmp)).start();
        saveBitmapToCamera(context, bmp, null);
    }

    /**
     * mScrollView
     * 
     * @param context
     * @param scrollView
     */
    public static void scrollviewContent2Png(Context context,
            ScrollView scrollView) {
        Bitmap bmp = null;
        bmp = getBitmapByView(scrollView);
        // new Thread(new WorkThread(bmp)).start();
        saveBitmapToCamera(context, bmp, null);
    }

    private static Bitmap captureWebView(WebView webView) {
        Picture snapShot = webView.capturePicture();
        Bitmap bmp = Bitmap.createBitmap(snapShot.getWidth(),
                snapShot.getHeight(), Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(bmp);
        snapShot.draw(canvas);
        return bmp;
    }

    public static Boolean saveBitmapToCamera(Context context, Bitmap bm,
            String name) {

        File file = null;

        if (name == null || name.equals("")) {
            SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMddHHmmss");
            Date curDate = new Date(System.currentTimeMillis());
            name = formatter.format(curDate) + ".jpg";
        }
        file= new File(DCIMCamera_PATH);
        if (!file.exists()) {
            file.mkdirs();
        }
        file = new File(DCIMCamera_PATH, name);
        if (file.exists()) {
            file.delete();
        }
        try {
            FileOutputStream out = new FileOutputStream(file);
            bm.compress(Bitmap.CompressFormat.PNG, 100, out);
            out.flush();
            out.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
            return false;

        } catch (IOException e) {

            e.printStackTrace();
            return false;
        }

        Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
        Uri uri = Uri.fromFile(file);
        intent.setData(uri);
        context.sendBroadcast(intent);

        return true;
    }

    public static Bitmap getBitmapByView(ScrollView scrollView) {
        int h = 0;
        Bitmap bitmap = null;

        for (int i = 0; i < scrollView.getChildCount(); i++) {
            h += scrollView.getChildAt(i).getHeight();
            scrollView.getChildAt(i).setBackgroundColor(
                    Color.parseColor("#ffffff"));
        }

        bitmap = Bitmap.createBitmap(scrollView.getWidth(), h,
                Bitmap.Config.RGB_565);
        final Canvas canvas = new Canvas(bitmap);
        scrollView.draw(canvas);
        return bitmap;
    }

}

圖片生產(chǎn)后,創(chuàng)建UMImage砚蓬,分享出去矢门。具體分享代碼參考友盟配置文檔。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市祟剔,隨后出現(xiàn)的幾起案子隔躲,更是在濱河造成了極大的恐慌,老刑警劉巖物延,帶你破解...
    沈念sama閱讀 222,252評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件宣旱,死亡現(xiàn)場離奇詭異,居然都是意外死亡叛薯,警方通過查閱死者的電腦和手機(jī)浑吟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來耗溜,“玉大人组力,你說我怎么就攤上這事∏况” “怎么了忿项?”我有些...
    開封第一講書人閱讀 168,814評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵,是天一觀的道長城舞。 經(jīng)常有香客問我轩触,道長,這世上最難降的妖魔是什么家夺? 我笑而不...
    開封第一講書人閱讀 59,869評(píng)論 1 299
  • 正文 為了忘掉前任脱柱,我火速辦了婚禮,結(jié)果婚禮上拉馋,老公的妹妹穿的比我還像新娘榨为。我一直安慰自己,他們只是感情好煌茴,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,888評(píng)論 6 398
  • 文/花漫 我一把揭開白布随闺。 她就那樣靜靜地躺著,像睡著了一般蔓腐。 火紅的嫁衣襯著肌膚如雪矩乐。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,475評(píng)論 1 312
  • 那天回论,我揣著相機(jī)與錄音散罕,去河邊找鬼。 笑死傀蓉,一個(gè)胖子當(dāng)著我的面吹牛欧漱,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播葬燎,決...
    沈念sama閱讀 41,010評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼误甚,長吁一口氣:“原來是場噩夢啊……” “哼缚甩!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起靶草,我...
    開封第一講書人閱讀 39,924評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤蹄胰,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后奕翔,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體裕寨,經(jīng)...
    沈念sama閱讀 46,469評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,552評(píng)論 3 342
  • 正文 我和宋清朗相戀三年派继,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了宾袜。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,680評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡驾窟,死狀恐怖庆猫,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情绅络,我是刑警寧澤月培,帶...
    沈念sama閱讀 36,362評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站恩急,受9級(jí)特大地震影響杉畜,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜衷恭,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,037評(píng)論 3 335
  • 文/蒙蒙 一此叠、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧随珠,春花似錦灭袁、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至显沈,卻和暖如春举娩,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背构罗。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評(píng)論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留智玻,地道東北人遂唧。 一個(gè)月前我還...
    沈念sama閱讀 49,099評(píng)論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像吊奢,于是被迫代替她去往敵國和親盖彭。 傳聞我的和親對(duì)象是個(gè)殘疾皇子纹烹,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,691評(píng)論 2 361

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