Android列表三級(jí)滑動(dòng)實(shí)現(xiàn)

先上圖

三級(jí)滑動(dòng).gif

上代碼

package com.example.jzg.mvpdemo.view;


import android.content.Context;
import android.content.res.Resources;
import android.support.v4.view.ViewCompat;
import android.support.v4.widget.ViewDragHelper;
import android.support.v7.widget.RecyclerView;
import android.util.AttributeSet;
import android.util.DisplayMetrics;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.TextView;

import com.example.jzg.mvpdemo.Utils.DensityUtil;

/**
 * author: guochen
 * date: 2017/11/11 17:57
 * email:
 */
public class SeekProductMenu extends ViewGroup {
    private static final String TAG = "SeekProductMenu";
    private ViewDragHelper viewDragHelper;
    private FrameLayout twoMenuView;
    private FrameLayout threeMenuView;
    private int creenWidth;
    private int creenHeight;
    private FrameLayout oneMenuView;
    private RecyclerView oneMenuList;
    private RecyclerView twoMenuList;
    private int twoMenuViewWidth;
    private boolean twoMenuIsOpen = false;//給二級(jí)菜單的開(kāi)關(guān)標(biāo)志
    private boolean threeMenuIsOpen = false;//給二級(jí)菜單的開(kāi)關(guān)標(biāo)志
    private int threeMenuViewWidth;
    private RecyclerView threeMenuList;
    private int twoMenuViewLeft;//二級(jí)菜單距離屏幕左邊的距離
    private int threeMenuViewLeft;//三級(jí)菜單距離屏幕左邊的距離
    private int dx;//down事件時(shí)的坐標(biāo)
    //二級(jí)和三級(jí)菜單的開(kāi)關(guān)狀態(tài)
    private static final int ALL_CLOSE = 0;//二級(jí)菜單和三級(jí)菜單都處于關(guān)閉狀態(tài)
    private static final int TWO_OPEN = 1;//只有二級(jí)菜單打開(kāi)
    private static final int TWO_THREE_OPEN = 2;//二級(jí)菜單和三級(jí)菜單都打開(kāi)是的狀態(tài)
    private int nowState = ALL_CLOSE;//當(dāng)前處于的狀態(tài) //3
    private int threeMenuLeftAxis;
    private int twoMenuLeftAxis;
    private Context context;

    private ViewDragHelper viewDragHelper2;
    private int downY;

    public SeekProductMenu(Context context) {
        this(context, null);
    }

    public SeekProductMenu(Context context, AttributeSet attrs) {
        super(context, attrs);
        this.context = context;
        // 獲取 viewDragHelper實(shí)例
        viewDragHelper = ViewDragHelper.create(this, new MyCallBack());
        viewDragHelper2 = ViewDragHelper.create(this, new MyCallBack());
        //獲取屏幕寬高
        int[] creenSize = getScreenSize();
        //寬
        creenWidth = creenSize[0];
        //高
        creenHeight = creenSize[1];


    }

    /**
     * 該方法在布局文件加載完畢后被回調(diào)
     */
    @Override
    protected void onFinishInflate() {
        //獲取一級(jí)菜單實(shí)例
        oneMenuView = (FrameLayout) getChildAt(0);
        oneMenuList = (RecyclerView) oneMenuView.getChildAt(0);
        //獲取二級(jí)菜單實(shí)例
        twoMenuView = (FrameLayout) getChildAt(1);
        twoMenuList = (RecyclerView) twoMenuView.getChildAt(0);
        //獲取三級(jí)菜單實(shí)例
        threeMenuView = (FrameLayout) getChildAt(2);
        threeMenuList = (RecyclerView) threeMenuView.getChildAt(0);


    }

    /**
     * 測(cè)量子視圖
     *
     * @param widthMeasureSpec
     * @param heightMeasureSpec
     */
    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

        //測(cè)量一級(jí)菜單
        oneMenuView.measure(widthMeasureSpec, heightMeasureSpec);

        //測(cè)量二級(jí)菜單
        //設(shè)置二級(jí)菜單為屏幕的4/5寬
        twoMenuViewWidth = (int) (creenWidth * 0.8 + 0.5) + 20;
        int twoMenuViewWidthSpec = MeasureSpec.makeMeasureSpec(twoMenuViewWidth, MeasureSpec.EXACTLY);
        twoMenuView.measure(twoMenuViewWidthSpec, heightMeasureSpec);

        //測(cè)量三級(jí)菜單
        //設(shè)置三級(jí)菜單為屏幕的3/5
        threeMenuViewWidth = (int) (creenWidth * 0.55 + 0.5) + 30;
        int threeMenuViewWidthSpec = MeasureSpec.makeMeasureSpec(threeMenuViewWidth, MeasureSpec.EXACTLY);
        threeMenuView.measure(threeMenuViewWidthSpec, heightMeasureSpec);

        //設(shè)置視圖本身
        setMeasuredDimension(creenWidth, creenHeight);
    }

    /**
     * 給子視圖布局
     *
     * @param b
     * @param i
     * @param i1
     * @param i2
     * @param i3
     */
    @Override
    protected void onLayout(boolean b, int i, int i1, int i2, int i3) {
        //給一級(jí)菜單布局
        oneMenuView.layout(0, 0, creenWidth, creenHeight);

        //給二級(jí)菜單布局
        if (nowState != TWO_OPEN && nowState != TWO_THREE_OPEN) {
            twoMenuView.layout(creenWidth, 0, creenWidth + twoMenuViewWidth, creenHeight);
        } else {
            twoMenuView.layout((int) (creenWidth * 0.2 + 0.5) - 20, 0, creenWidth, creenHeight);
        }

        if (nowState != TWO_THREE_OPEN) {
            //給三級(jí)菜單布局
            threeMenuView.layout(creenWidth, 0, creenWidth + threeMenuViewWidth, creenHeight);
        } else {
            threeMenuView.layout((int) (creenWidth * 0.45 + 0.5), 0, creenWidth, creenHeight);
        }

    }

    /**
     * 重寫(xiě)onInterceptTouchEvent自定義事件攔截規(guī)則
     *
     * @param ev
     * @return
     */
    int downX = 0;

    /**
     * 自定義事件分發(fā)
     *
     * @param ev
     * @return
     */
    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
        switch (ev.getAction()) {
            case MotionEvent.ACTION_DOWN:
                downX = dx = (int) (ev.getX() + 0.5f);
                downY = (int) ev.getY();
                break;
            case MotionEvent.ACTION_MOVE:

                //判斷當(dāng)用戶左右滑動(dòng)的時(shí)候攔截子視圖事件(也就是當(dāng)用戶左右滑動(dòng)的時(shí)候攔截ListView的事件走自己的事件)
                //上下滑動(dòng)或者點(diǎn)擊的時(shí)候走ListView的事件
                int moveY = (int) ev.getY();
                int moveX = (int) (ev.getX() + 0.5f);
                int moveDistanceX = (downX - moveX) > 0 ? (downX - moveX) : (moveX - downX);
                int moveDistanceY = (downY - moveY) > 0 ? (downY - moveY) : (moveY - downY);

                //當(dāng)上下滑動(dòng)時(shí)电湘,不攔截事件,走ListView的事件
                if (moveDistanceY > 20) {
                    return false;
                }
//當(dāng)左右滑動(dòng)的時(shí)候鹅经,攔截子控件事件寂呛,也就是攔截ListView的事件,走自己的左右滑動(dòng)事件
                if (moveDistanceX > 10 && moveDistanceY < 20) {
                    downX = (int) (ev.getX() + 0.5f);
                    return true;
                }
                break;
        }
        return false;
    }

    /**
     * 重寫(xiě)onTouchEvent自定義滑動(dòng)事件
     *
     * @param event
     * @return
     */
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                break;
            case MotionEvent.ACTION_MOVE:
                View view = getTouchView(event, downX); //獲取被觸摸到的View
                slideEvent(event, view); //處理被觸摸到的View的滑動(dòng)事件
                break;
            case MotionEvent.ACTION_UP:

                switch (nowState) {
                    case TWO_THREE_OPEN:
                        /**
                         * 當(dāng)二級(jí)菜單和三級(jí)菜單都處于打開(kāi)狀態(tài)時(shí)的事件處理
                         */
                        if (getTouchView(event, downX) == threeMenuView) {//當(dāng)二級(jí)菜單和三級(jí)菜單都處于打開(kāi)狀態(tài)瞬雹,并且手指觸摸到的是三級(jí)菜單時(shí)的事件處理
                            if (threeMenuViewLeft < creenWidth / 2 + DensityUtil.px2dip(context, 50)) {
                                viewDragHelper.smoothSlideViewTo(threeMenuView, (int) (creenWidth * 0.45 + 0.5), 0);
                                ViewCompat.postInvalidateOnAnimation(SeekProductMenu.this);
                                threeMenuViewLeft = (int) (creenWidth * 0.45 + 0.5);
                                threeMenuIsOpen = true;
                                nowState = TWO_THREE_OPEN;
                            } else {
                                viewDragHelper.smoothSlideViewTo(threeMenuView, creenWidth, 0);
                                ViewCompat.postInvalidateOnAnimation(SeekProductMenu.this);
                                threeMenuIsOpen = false;
                                nowState = TWO_OPEN;
                                threeMenuViewLeft = creenWidth;

                                //接口回調(diào)昧谊,監(jiān)聽(tīng)菜單被關(guān)閉時(shí),恢復(fù)菜單item默認(rèn)背景顏色
                                //  //恢復(fù)二級(jí)菜單item默認(rèn)背景顏色
                                if (recoverListViewItemBackground != null) {
                                    recoverListViewItemBackground.onRecoverTwoListViewItemBackgroundListener();
                                }

                            }
                        } else if (getTouchView(event, downX) == twoMenuView) {

                            //當(dāng)二級(jí)菜單和三級(jí)菜單都處于打開(kāi)狀態(tài)酗捌,并且手指觸摸到的是二級(jí)菜單時(shí)的事件處理

                            if (twoMenuViewLeft < creenWidth / 2) {
                                viewDragHelper.smoothSlideViewTo(twoMenuView, (int) (creenWidth * 0.2 + 0.5) - 20, 0);
                                ViewCompat.postInvalidateOnAnimation(SeekProductMenu.this);
                                viewDragHelper2.smoothSlideViewTo(threeMenuView, (int) (creenWidth * 0.45 + 0.5), 0);
                                ViewCompat.postInvalidateOnAnimation(SeekProductMenu.this);
                                twoMenuViewLeft = (int) (creenWidth * 0.2 + 0.5);
                                threeMenuViewLeft = (int) (creenWidth * 0.45 + 0.5);
                                threeMenuIsOpen = true;
                                twoMenuIsOpen = true;
                                nowState = TWO_THREE_OPEN;
                            } else {
                                viewDragHelper.smoothSlideViewTo(twoMenuView, creenWidth, 0);
                                ViewCompat.postInvalidateOnAnimation(SeekProductMenu.this);
                                viewDragHelper2.smoothSlideViewTo(threeMenuView, creenWidth + DensityUtil.px2dip(context, 300), 0);
                                ViewCompat.postInvalidateOnAnimation(SeekProductMenu.this);
                                twoMenuViewLeft = creenWidth;
                                threeMenuViewLeft = creenWidth;
                                threeMenuIsOpen = false;
                                twoMenuIsOpen = false;
                                nowState = ALL_CLOSE;
                                //接口回調(diào)呢诬,監(jiān)聽(tīng)菜單被關(guān)閉時(shí),恢復(fù)菜單item默認(rèn)背景顏色
                                //恢復(fù)一級(jí)菜單item默認(rèn)背景顏色
                                if (recoverListViewItemBackground != null) {
                                    recoverListViewItemBackground.onRecoverOneListViewItemBackgroundListener();
                                }
                            }
                        }
                        break;
                    case TWO_OPEN:
                        /**
                         * 當(dāng)只有二級(jí)菜單處于打開(kāi)狀態(tài)并且三級(jí)菜單處于關(guān)閉狀態(tài)時(shí)的事件處理
                         */
                        if (getTouchView(event, downX) == twoMenuView) { //當(dāng)手指觸摸到的是二級(jí)菜單時(shí)的事件處理
                            if (twoMenuViewLeft < creenWidth / 2) {
                                viewDragHelper.smoothSlideViewTo(twoMenuView, (int) (creenWidth * 0.2 + 0.5) - 20, 0);
                                ViewCompat.postInvalidateOnAnimation(SeekProductMenu.this);
                                twoMenuViewLeft = (int) (creenWidth * 0.2 + 0.5);
                                twoMenuIsOpen = true;
                                nowState = TWO_OPEN;
                            } else {
                                viewDragHelper.smoothSlideViewTo(twoMenuView, (int) creenWidth, 0);
                                ViewCompat.postInvalidateOnAnimation(SeekProductMenu.this);
                                viewDragHelper2.smoothSlideViewTo(threeMenuView, (int) creenWidth + DensityUtil.dip2px(context, 300), 0);
                                ViewCompat.postInvalidateOnAnimation(SeekProductMenu.this);
                                twoMenuViewLeft = creenWidth;
                                twoMenuIsOpen = false;
                                nowState = ALL_CLOSE;
                                //接口回調(diào)胖缤,監(jiān)聽(tīng)菜單被關(guān)閉時(shí)尚镰,恢復(fù)菜單item默認(rèn)背景顏色
                                //恢復(fù)一級(jí)菜單item默認(rèn)背景顏色

                                if (recoverListViewItemBackground != null) {
                                    recoverListViewItemBackground.onRecoverOneListViewItemBackgroundListener();
                                }
                            }
                        }
                }
        }
        return super.onTouchEvent(event);
    }


    /**
     * 滑動(dòng)事件處理
     *
     * @param ev    MotionEvent
     * @param child 被觸摸到的View
     * @return 返回被觸摸到的View距離屏幕左邊的距離
     */
    public int slideEvent(MotionEvent ev, View child) {

        int moveX = (int) (ev.getX() + 0.5);//滑動(dòng)后的X坐標(biāo)
        int slideDistance = downX - moveX;//滑動(dòng)的距離
        //如果被觸摸到的View是二級(jí)菜單并且只有二級(jí)菜單處于打開(kāi)狀態(tài)時(shí)
        if (child == twoMenuView && nowState == TWO_OPEN) {

            //計(jì)算二級(jí)菜單移動(dòng)的位置
            twoMenuLeftAxis = twoMenuViewLeft - slideDistance;
            //邊界限定
            twoMenuLeftAxis = Math.max((int) (creenWidth * 0.2 + 0.5) - 20, twoMenuLeftAxis);

            //重新布局
            twoMenuView.layout(twoMenuLeftAxis, 0, creenWidth + twoMenuLeftAxis, creenHeight);
            downX = (int) (ev.getX() + 0.5f);
            twoMenuViewLeft = twoMenuLeftAxis;
            ViewCompat.postInvalidateOnAnimation(SeekProductMenu.this);
            return twoMenuViewLeft;
        } else if (child == twoMenuView && nowState == TWO_THREE_OPEN) {
            /**
             * 這種情況是當(dāng)手指觸摸到二級(jí)菜單并且三級(jí)菜單也是打開(kāi)狀態(tài)時(shí)
             */
            //計(jì)算二級(jí)菜單移動(dòng)的位置
            int twoMenuLeftAxis = twoMenuViewLeft - slideDistance;
            //計(jì)算三級(jí)菜單到屏幕左邊的距離
            threeMenuLeftAxis = threeMenuViewLeft - slideDistance;
            //二級(jí)菜單邊界限定
            twoMenuLeftAxis = Math.max((int) (creenWidth * 0.2 + 0.5) - 20, twoMenuLeftAxis);
            //三級(jí)菜單邊界限定
            threeMenuLeftAxis = Math.max((int) (creenWidth * 0.45 + 0.5), threeMenuLeftAxis);
            //重新布局
            twoMenuView.layout(twoMenuLeftAxis, 0, creenWidth + twoMenuLeftAxis, creenHeight);
            threeMenuView.layout(threeMenuLeftAxis, 0, creenWidth + threeMenuLeftAxis, creenHeight);
            downX = (int) (ev.getX() + 0.5f);
            twoMenuViewLeft = twoMenuLeftAxis;
            threeMenuViewLeft = threeMenuLeftAxis;

        } else if (child == threeMenuView) {
            threeMenuLeftAxis = threeMenuViewLeft - slideDistance;
            //三級(jí)菜單邊界限定
            threeMenuLeftAxis = Math.max((int) (creenWidth * 0.45 + 0.5), threeMenuLeftAxis);
            threeMenuView.layout(threeMenuViewLeft - slideDistance, 0, creenWidth + threeMenuLeftAxis, creenHeight);
            downX = (int) (ev.getX() + 0.5f);
            threeMenuViewLeft = threeMenuLeftAxis;
        }
        return 0;
    }


    /**
     * 獲取當(dāng)手指按下時(shí)觸摸到的子視圖,用于用戶手指按下觸摸到的是那個(gè)菜單
     * 當(dāng)在down事件時(shí)調(diào)用該方法
     *
     * @param ev
     * @param dx
     * @return
     */
    public View getTouchView(MotionEvent ev, int dx) {
        if (!twoMenuIsOpen && !threeMenuIsOpen) {
            //當(dāng)二級(jí)菜單和三級(jí)菜單都處于關(guān)閉狀態(tài)時(shí)
            nowState = ALL_CLOSE;
            return oneMenuView;
        } else if (twoMenuIsOpen && !threeMenuIsOpen) {
            //當(dāng)二級(jí)菜單處于打開(kāi)并且三級(jí)菜單處于關(guān)閉時(shí)
            nowState = TWO_OPEN;
            return dx < twoMenuViewLeft ? oneMenuView : twoMenuView;
        } else if (twoMenuIsOpen && threeMenuIsOpen) {
            nowState = TWO_THREE_OPEN;
            if (dx < twoMenuViewLeft) {
                return oneMenuView;
            } else if (dx > twoMenuViewLeft && threeMenuViewLeft > dx) {
                return twoMenuView;
            } else if (dx > threeMenuViewLeft) {
                return threeMenuView;
            }
        }
        return null;
    }


    /**
     * 獲取手機(jī)屏幕寬高
     *
     * @return
     */
    public int[] getScreenSize() {
        Resources resources = this.getResources();
        DisplayMetrics dm = resources.getDisplayMetrics();
        int width = dm.widthPixels;//獲得的是PX 需轉(zhuǎn)換為dp
        int height = dm.heightPixels;
        int[] ScreenSize = {width, height};
        return ScreenSize;
    }

    @Override
    public void computeScroll() {
        //是否固定
        if (viewDragHelper.continueSettling(true)) {
            //該方法作用和invalidate()一樣,但是用invalidate()方法有的機(jī)型沒(méi)有效果哪廓,所以建議使用以下方法
            ViewCompat.postInvalidateOnAnimation(SeekProductMenu.this);
        }
        if (viewDragHelper2.continueSettling(true)) {
            ViewCompat.postInvalidateOnAnimation(SeekProductMenu.this);
        }
    }

    /**
     * 當(dāng)二級(jí)菜單和三級(jí)菜單都關(guān)閉時(shí)狗唉,點(diǎn)擊listView item 相應(yīng)的事件
     */

    public void OnClickOneMenu() {
        if (nowState == TWO_THREE_OPEN) {
            viewDragHelper.smoothSlideViewTo(threeMenuView, creenWidth + 10, 0);
            ViewCompat.postInvalidateOnAnimation(SeekProductMenu.this);
            threeMenuViewLeft = creenWidth + DensityUtil.dip2px(context, 10);
            twoMenuIsOpen = true;
            threeMenuIsOpen = false;
            nowState = TWO_OPEN;
            return;
        }

        twoMenuViewLeft = (int) (creenWidth * 0.2 + 0.5) - 20;//獲取屏幕的1/5
        viewDragHelper.smoothSlideViewTo(twoMenuView, twoMenuViewLeft, 0);
        ViewCompat.postInvalidateOnAnimation(SeekProductMenu.this);
        twoMenuIsOpen = true;//當(dāng)前為二級(jí)菜單打開(kāi)狀態(tài),打上標(biāo)志
        nowState = TWO_OPEN;


    }

    /**
     * 點(diǎn)擊二級(jí)菜單是相應(yīng)的事件
     */
    public void OnClickTwoMenu() {
        threeMenuViewLeft = (int) (creenWidth * 0.45 + 0.5);
        viewDragHelper.smoothSlideViewTo(threeMenuView, threeMenuViewLeft, 0);
        ViewCompat.postInvalidateOnAnimation(SeekProductMenu.this);
        threeMenuIsOpen = true;//標(biāo)注三級(jí)菜單為打開(kāi)狀態(tài)
        nowState = TWO_THREE_OPEN;
    }

    class ViewHolder {
        TextView textView;
    }

    class MyCallBack extends ViewDragHelper.Callback {
        @Override
        public boolean tryCaptureView(View child, int pointerId) {
            return true;
        }
    }

    private RecoverListViewItemBackground recoverListViewItemBackground;

    public void setOnRecoverListViewItemBackgroundListener(RecoverListViewItemBackground recoverListViewItemBackground) {
        this.recoverListViewItemBackground = recoverListViewItemBackground;
    }

    /**
     * 接口回調(diào)恢復(fù)listView item的背景顏色
     */
    public interface RecoverListViewItemBackground {
        void onRecoverOneListViewItemBackgroundListener();//恢復(fù)一級(jí)菜單item默認(rèn)背景回調(diào)

        void onRecoverTwoListViewItemBackgroundListener();//恢復(fù)二級(jí)菜單item默認(rèn)背景回調(diào)
    }

    private ListViewChangeListener listViewChangeListener;

    public void setOnListViewChangeListener(ListViewChangeListener listViewChangeListener) {
        this.listViewChangeListener = listViewChangeListener;
    }

    public interface ListViewChangeListener {
        void threeListViewChangeListener(boolean isOpen);

        void twoListViewChangeListener(boolean isOpen);
    }
}

上布局文件

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <com.example.jzg.mvpdemo.view.SeekProductMenu
        android:id="@+id/seek"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <FrameLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="@color/green_wathet_textcolor">

            <android.support.v7.widget.RecyclerView
                android:id="@+id/make_recycler"
                android:layout_width="match_parent"
                android:layout_height="match_parent"></android.support.v7.widget.RecyclerView>
        </FrameLayout>

        <FrameLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="@color/login_btn_clr">

            <android.support.v7.widget.RecyclerView
                android:id="@+id/model_recycler"
                android:layout_width="match_parent"
                android:layout_height="match_parent"></android.support.v7.widget.RecyclerView>
        </FrameLayout>

        <FrameLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="@color/zi_wathet_textcolor">

            <android.support.v7.widget.RecyclerView
                android:id="@+id/style_recycler"
                android:layout_width="match_parent"
                android:layout_height="match_parent"></android.support.v7.widget.RecyclerView>
        </FrameLayout>
    </com.example.jzg.mvpdemo.view.SeekProductMenu>

    <com.example.jzg.mvpdemo.view.LetterBarView
        android:id="@+id/index_list"
        android:layout_width="30dip"
        android:layout_height="fill_parent"
        android:layout_alignParentRight="true"
        android:layout_marginBottom="2dip"
        android:layout_marginTop="2dip"
        android:background="#40000000"></com.example.jzg.mvpdemo.view.LetterBarView>
</RelativeLayout>
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末涡真,一起剝皮案震驚了整個(gè)濱河市分俯,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌哆料,老刑警劉巖缸剪,帶你破解...
    沈念sama閱讀 206,126評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異东亦,居然都是意外死亡杏节,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門典阵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)奋渔,“玉大人,你說(shuō)我怎么就攤上這事壮啊〖稻ǎ” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵歹啼,是天一觀的道長(zhǎng)玄渗。 經(jīng)常有香客問(wèn)我减江,道長(zhǎng),這世上最難降的妖魔是什么捻爷? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任辈灼,我火速辦了婚禮,結(jié)果婚禮上也榄,老公的妹妹穿的比我還像新娘巡莹。我一直安慰自己,他們只是感情好甜紫,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布降宅。 她就那樣靜靜地躺著,像睡著了一般囚霸。 火紅的嫁衣襯著肌膚如雪腰根。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 48,970評(píng)論 1 284
  • 那天拓型,我揣著相機(jī)與錄音额嘿,去河邊找鬼。 笑死劣挫,一個(gè)胖子當(dāng)著我的面吹牛册养,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播压固,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼球拦,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了帐我?” 一聲冷哼從身側(cè)響起坎炼,我...
    開(kāi)封第一講書(shū)人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎拦键,沒(méi)想到半個(gè)月后谣光,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,400評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡矿咕,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評(píng)論 2 323
  • 正文 我和宋清朗相戀三年抢肛,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了狼钮。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片碳柱。...
    茶點(diǎn)故事閱讀 37,997評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖熬芜,靈堂內(nèi)的尸體忽然破棺而出莲镣,到底是詐尸還是另有隱情,我是刑警寧澤涎拉,帶...
    沈念sama閱讀 33,646評(píng)論 4 322
  • 正文 年R本政府宣布瑞侮,位于F島的核電站的圆,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏半火。R本人自食惡果不足惜越妈,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望钮糖。 院中可真熱鬧梅掠,春花似錦、人聲如沸店归。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)消痛。三九已至且叁,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間秩伞,已是汗流浹背逞带。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留纱新,地道東北人掰担。 一個(gè)月前我還...
    沈念sama閱讀 45,423評(píng)論 2 352
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像怒炸,于是被迫代替她去往敵國(guó)和親带饱。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評(píng)論 2 345

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

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,498評(píng)論 25 707
  • 問(wèn)答題47 /72 常見(jiàn)瀏覽器兼容性問(wèn)題與解決方案阅羹? 參考答案 (1)瀏覽器兼容問(wèn)題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補(bǔ)...
    _Yfling閱讀 13,728評(píng)論 1 92
  • ¥開(kāi)啟¥ 【iAPP實(shí)現(xiàn)進(jìn)入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開(kāi)一個(gè)線程勺疼,因...
    小菜c閱讀 6,358評(píng)論 0 17
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)、插件捏鱼、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,022評(píng)論 4 62
  • 秋風(fēng)涼涼执庐,跟豆豆嫲嫲一起帶豆豆去老祖母的果園菜地摘菜!老祖母種了一大片的菜导梆,有花生轨淌,有番薯,有芥菜看尼,有蘿卜递鹉。遠(yuǎn)近有...
    浣熊貓閱讀 218評(píng)論 0 1