popupWindow自定義(2)

popupWindow自定義(1)
popupWindow自定義(2)
首先看看效果圖:


接著上篇文章的荚醒,上次講述了自定義的密碼框發(fā)現(xiàn)在時(shí)間使用過(guò)程中讹堤,當(dāng)點(diǎn)擊物理按鍵返回鳞尔,密碼框不消失拇囊,而是當(dāng)前的Activity退出了校摩,這次優(yōu)化了這個(gè)bug一些默認(rèn)的配置封裝起來(lái)了冗荸,且在使用的時(shí)候更加方便父阻。不多說(shuō),直接貼代碼:

自定義密碼框:


import android.content.Context;
import android.graphics.drawable.ColorDrawable;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.PopupWindow;
import android.widget.TextView;

import com.skypine.skypine.R;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

public class PasswordPopupWindow extends PopupWindow {
    private Context mContext;

    private View                           mMenuView;
    private String                         mStringPassword; //輸入的密碼
    private TextView[]                     mTextViewPsw; // 用數(shù)組保存6個(gè)TextView
    private GridView                       mGridView; //支付鍵盤(pán)布局
    private ArrayList<Map<String, String>> valueList;
    private ImageView                      mImageViewCancel;
    private TextView                       mTextViewForgetPsw;
    private int currentIndex = -1;// 用于記錄當(dāng)前輸入密碼格位置
    private TextView mTextViewTitle;
    private TextView mTextViewDel;
    private TextView cancelButton;
    private TextView okButton;
    private OnCancelListener cancelListener; //取消

    public PasswordPopupWindow(Context context) {
        super(context);
        mContext = context;
        LayoutInflater inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        mMenuView = inflater.inflate(R.layout.password_dialog, null);

        valueList = new ArrayList<>();
        mTextViewPsw = new TextView[6];
        mImageViewCancel = (ImageView) mMenuView.findViewById(R.id.iv_pay_back);
        mTextViewPsw[0] = (TextView) mMenuView.findViewById(R.id.tv_pass1);
        mTextViewPsw[1] = (TextView) mMenuView.findViewById(R.id.tv_pass2);
        mTextViewPsw[2] = (TextView) mMenuView.findViewById(R.id.tv_pass3);
        mTextViewPsw[3] = (TextView) mMenuView.findViewById(R.id.tv_pass4);
        mTextViewPsw[4] = (TextView) mMenuView.findViewById(R.id.tv_pass5);
        mTextViewPsw[5] = (TextView) mMenuView.findViewById(R.id.tv_pass6);
        mGridView = (GridView) mMenuView.findViewById(R.id.gv_keybord);
        mTextViewTitle = (TextView) mMenuView.findViewById(R.id.tv_pay_title);
        mTextViewForgetPsw = (TextView) mMenuView.findViewById(R.id.tv_pay_forgetPwd);
        /**/
        cancelButton = (TextView) mMenuView.findViewById(R.id.cancelButton);
        okButton = (TextView) mMenuView.findViewById(R.id.okButton);

        setView();
        //取消按鈕
        cancelButton.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {
                //取消
                cancelListener.OnCancel();
                //銷毀彈出框
                dismiss();
            }
        });
    
        //設(shè)置SelectPicPopupWindow的View
        this.setContentView(mMenuView);
        //設(shè)置SelectPicPopupWindow彈出窗體的寬
        this.setWidth(LayoutParams.FILL_PARENT);
        //設(shè)置SelectPicPopupWindow彈出窗體的高
        this.setHeight(LayoutParams.WRAP_CONTENT);
        //設(shè)置SelectPicPopupWindow彈出窗體可點(diǎn)擊
        this.setFocusable(true);
        //設(shè)置SelectPicPopupWindow彈出窗體動(dòng)畫(huà)效果
        this.setAnimationStyle(R.style.mypopwindow_anim_style);
        //實(shí)例化一個(gè)ColorDrawable顏色為半透明
        ColorDrawable dw = new ColorDrawable(0xb0000000);
        //設(shè)置SelectPicPopupWindow彈出窗體的背景
        this.setBackgroundDrawable(dw);
        //mMenuView添加OnTouchListener監(jiān)聽(tīng)判斷獲取觸屏位置如果在選擇框外面則銷毀彈出框
        mMenuView.setOnTouchListener(new OnTouchListener() {

            public boolean onTouch(View v, MotionEvent event) {

                int height = mMenuView.findViewById(R.id.pop_layout).getTop();
                int y = (int) event.getY();
                if (event.getAction() == MotionEvent.ACTION_UP) {
                    if (y < height) {
                        dismiss();
                    }
                }
                return true;
            }
        });

    }

    /*********************
     * 取消
     ******************/
    public interface OnCancelListener {
        public void OnCancel();
    }

    public void setCancelListener(OnCancelListener cancelListener) {
        this.cancelListener = cancelListener;
    }


    // 初始化按鈕上應(yīng)該顯示的數(shù)字

    private void setView() {
        for (int i = 1; i < 13; i++) {
            Map<String, String> map = new HashMap<>();
            if (i < 10) {
                map.put("name", String.valueOf(i));
            } else if (i == 10) {//沒(méi)有
                map.put("name", "");
            } else if (i == 11) {//
                map.put("name", String.valueOf(0));
            } else if (i == 12) {
                map.put("name", "");
            } else if (i == 13) {
                map.put("name", " ");
            } else if (i == 14) {
                map.put("name", "");
            }
            valueList.add(map);
        }
        mGridView.setAdapter(adapter);
    }

    public interface OnPasswordInputFinish {
        public void inputFinish();
    }

    /**
     * 設(shè)置監(jiān)聽(tīng)方法侄旬,在第6位輸入完后觸發(fā)
     */
    public void setOnFinishInput(final OnPasswordInputFinish pass) {
        mTextViewPsw[5].addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
            }

            @Override
            public void afterTextChanged(Editable s) {
                if (s.toString().length() == 1) {
                    mStringPassword = ""; //每次觸發(fā)都要將mStringPassword置空再重新獲取肺蔚,避免由于輸入刪除再輸入造成混亂
                    for (int i = 0; i < 6; i++) {
                        mStringPassword += mTextViewPsw[i].getText().toString().trim();
                    }
                    pass.inputFinish();//接口中要實(shí)現(xiàn)的方法,完成密碼輸入完成后的響應(yīng)邏輯
                }
            }
        });


    }


    /**
     * 清除所有密碼
     */

    public void clearAll() {
        //        currentIndex= -1;
        //        mTextViewPsw[0].setBackgroundResource(R.drawable.bg_circle_num_pwd);
        //        mTextViewPsw[1].setBackgroundResource(R.drawable.bg_circle_num_pwd);
        //        mTextViewPsw[2] .setBackgroundResource(R.drawable.bg_circle_num_pwd);
        //        mTextViewPsw[3]. setBackgroundResource(R.drawable.bg_circle_num_pwd);
        //        mTextViewPsw[4]. setBackgroundResource(R.drawable.bg_circle_num_pwd);
        //        mTextViewPsw[5].setBackgroundResource(R.drawable.bg_circle_num_pwd);
        //        mTextViewPsw[0].setText("");
        //        mTextViewPsw[1].setText("");
        //        mTextViewPsw[2] .setText("");
        //        mTextViewPsw[3]. setText("");
        //        mTextViewPsw[4]. setText("");
        //        mTextViewPsw[5].setText("");
        currentIndex = 5;

        while (true)
            if (currentIndex - 1 >= -1) { // 判斷是否刪除完畢
                TextView temp = mTextViewPsw[currentIndex--];
                temp.setText("");
                temp.setBackgroundResource(R.drawable.bg_circle_num_pwd);
            } else {
                break;
            }


    }

    /**
     * 獲取輸入的密碼
     */
    public String getPassword() {
        return mStringPassword;
    }

    /**
     * 返回取消支付的ImageView
     */
    public ImageView getCancel() {
        return mImageViewCancel;
    }
    //    /**
    //     * 返回取消
    //     */
    //    public TextView getmTextViewCancel() {
    //        return mTextViewCancel;
    //    }


    /**
     * 返回忘記密碼的TextView
     */
    public TextView getForgetPsw() {
        return mTextViewForgetPsw;
    }

    /**
     * 返回標(biāo)題的TextView
     */
    public TextView getTitle() {
        return mTextViewTitle;
    }

    /**
     * GridView的適配器
     */
    BaseAdapter adapter = new BaseAdapter() {
        @Override
        public int getCount() {
            return valueList.size();
        }

        @Override
        public Object getItem(int position) {
            return valueList.get(position);
        }

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

        @Override
        public View getView(final int position, View convertView, ViewGroup parent) {
            ViewHolder holder;
            if (convertView == null) {
                convertView = View.inflate(mContext, R.layout.item_pay_gride, null);
                holder = new ViewHolder();
                holder.btnKey = (Button) convertView.findViewById(R.id.btn_keys);
                convertView.setTag(holder);
            } else {
                holder = (ViewHolder) convertView.getTag();
            }
            holder.btnKey.setText(valueList.get(position).get("name"));
            if (position == 12) {
                holder.btnKey.setText("取消");
            }
            if (position == 14) {
                mTextViewDel = holder.btnKey;
                holder.btnKey.setText("刪除");
            }
            if (position == 9 || position == 11 || position == 13) {
                holder.btnKey.setBackground(null);
                holder.btnKey.setText("");
            }
            okButton.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                    if (currentIndex - 1 >= -1) { // 判斷是否刪除完畢
                        TextView temp = mTextViewPsw[currentIndex--];
                        temp.setText("");
                        temp.setBackgroundResource(R.drawable.bg_circle_num_pwd);
                    }
                }
            });

            holder.btnKey.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if (position < 11 && currentIndex != 9 && position != 9) { //點(diǎn)擊0-9按鈕
                        if (currentIndex >= -1 && currentIndex < 5) { //判斷輸入位置
                            TextView temp = mTextViewPsw[++currentIndex];
                            temp.setText(valueList.get(position).get("name"));
                            temp.setBackgroundResource(R.drawable.bg_circle_num_pwd_visiable);
                        }
                    } else {
                        if (position == 14) { //點(diǎn)擊退格鍵
                            if (currentIndex - 1 >= -1) { // 判斷是否刪除完畢
                                TextView temp = mTextViewPsw[currentIndex--];
                                temp.setText("");
                                temp.setBackgroundResource(R.drawable.bg_circle_num_pwd);
                            }
                        }
                        if (position == 12) {
                            //退出
                            cancelListener.OnCancel();
                        }
                    }
                }
            });
            return convertView;
        }
    };

    static class ViewHolder {
        public Button btnKey;
    }

}

xml文件:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:gravity="center_horizontal"
                android:orientation="vertical">

    <LinearLayout
        android:id="@+id/pop_layout"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:gravity="center_horizontal"
        android:orientation="vertical">

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@color/colorPrimary"
            android:orientation="vertical">

            <LinearLayout
                android:id="@+id/ll_main_password"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="vertical">

                <RelativeLayout
                    android:layout_width="match_parent"
                    android:layout_height="50dp">

                    <ImageView
                        android:id="@+id/iv_pay_back"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_centerVertical="true"
                        android:layout_marginLeft="10dp"/>

                    <TextView
                        android:id="@+id/tv_pay_title"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_centerHorizontal="true"
                        android:layout_marginLeft="15dp"
                        android:layout_marginTop="15dp"
                        android:text="@string/pin_id"
                        android:textColor="@color/white"
                        android:textSize="18dp"/>
                </RelativeLayout>

                <!-- 6位密碼框布局儡羔,需要一個(gè)圓角邊框的shape作為layout的背景 -->
                <LinearLayout
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center_horizontal"
                    android:layout_marginTop="@dimen/dp_15"
                    android:gravity="center"
                    android:orientation="horizontal">
                    <!-- inputType設(shè)置隱藏密碼明文
                    textSize設(shè)置大一點(diǎn)婆排,否則“點(diǎn)”太小了,不美觀 -->
                    <TextView
                        android:id="@+id/tv_pass1"
                        android:layout_width="@dimen/dp_15"
                        android:layout_height="@dimen/dp_15"
                        android:layout_marginLeft="@dimen/dp_10"
                        android:layout_marginRight="@dimen/dp_10"
                        android:background="@drawable/bg_circle_num_pwd"
                        android:gravity="center"
                        android:inputType="numberPassword"
                        android:paddingBottom="@dimen/dp_5"
                        android:textColor="@color/pwd_gray"
                        android:textSize="12sp"/>


                    <TextView
                        android:id="@+id/tv_pass2"
                        android:layout_width="@dimen/dp_15"
                        android:layout_height="@dimen/dp_15"
                        android:layout_marginLeft="@dimen/dp_10"
                        android:layout_marginRight="@dimen/dp_10"
                        android:background="@drawable/bg_circle_num_pwd"
                        android:gravity="center"
                        android:inputType="numberPassword"
                        android:textColor="@color/pwd_gray"
                        android:textSize="15sp"/>


                    <TextView
                        android:id="@+id/tv_pass3"
                        android:layout_width="@dimen/dp_15"
                        android:layout_height="@dimen/dp_15"
                        android:layout_marginLeft="@dimen/dp_10"
                        android:layout_marginRight="@dimen/dp_10"
                        android:background="@drawable/bg_circle_num_pwd"
                        android:gravity="center"
                        android:inputType="numberPassword"
                        android:textColor="@color/pwd_gray"
                        android:textSize="15sp"/>


                    <TextView
                        android:id="@+id/tv_pass4"
                        android:layout_width="@dimen/dp_15"
                        android:layout_height="@dimen/dp_15"
                        android:layout_marginLeft="@dimen/dp_10"
                        android:layout_marginRight="@dimen/dp_10"
                        android:background="@drawable/bg_circle_num_pwd"
                        android:gravity="center"
                        android:inputType="numberPassword"
                        android:textColor="@color/pwd_gray"
                        android:textSize="15sp"/>


                    <TextView
                        android:id="@+id/tv_pass5"
                        android:layout_width="@dimen/dp_15"
                        android:layout_height="@dimen/dp_15"
                        android:layout_marginLeft="@dimen/dp_10"
                        android:layout_marginRight="@dimen/dp_10"
                        android:background="@drawable/bg_circle_num_pwd"
                        android:gravity="center"
                        android:inputType="numberPassword"
                        android:textColor="@color/pwd_gray"
                        android:textSize="15sp"/>


                    <TextView
                        android:id="@+id/tv_pass6"
                        android:layout_width="@dimen/dp_15"
                        android:layout_height="@dimen/dp_15"
                        android:layout_marginLeft="@dimen/dp_10"
                        android:layout_marginRight="@dimen/dp_10"
                        android:background="@drawable/bg_circle_num_pwd"
                        android:gravity="center"
                        android:inputType="numberPassword"
                        android:textColor="@color/pwd_gray"
                        android:textSize="15sp"/>
                </LinearLayout>

                <TextView
                    android:id="@+id/tv_pay_forgetPwd"
                    android:layout_width="@dimen/dp_20"
                    android:layout_height="@dimen/dp_20"
                    android:textColor="@color/white"
                    android:visibility="gone"/>

            </LinearLayout>
            <!-- 輸入鍵盤(pán) -->
            <GridView
                android:id="@+id/gv_keybord"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_centerInParent="true"
                android:layout_marginTop="@dimen/dp_50"
                android:horizontalSpacing="0.5dp"
                android:numColumns="3"
                android:textColor="@color/colorPrimary"
                android:verticalSpacing="0.5dp"/>

            <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_alignParentBottom="true"
                android:orientation="horizontal"
                android:padding="@dimen/dp_10">

                <TextView
                    android:id="@+id/cancelButton"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:padding="@dimen/dp_10"
                    android:text="@string/pay_cancle"
                    android:textColor="@color/white"
                    android:textSize="@dimen/sp_15"/>

                <TextView
                    android:id="@+id/okButton"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_alignParentRight="true"
                    android:layout_gravity="right"
                    android:padding="@dimen/dp_10"
                    android:text="@string/pay_delete"
                    android:textColor="@color/white"
                    android:textSize="@dimen/sp_15"/>
            </RelativeLayout>

        </RelativeLayout>

    </LinearLayout>
</RelativeLayout>

style

  <!--  這個(gè)是popwindow -->
    <style name="mypopwindow_anim_style">
        <item name="android:windowEnterAnimation">@anim/popshow_anim</item>
        <!-- 指定顯示的動(dòng)畫(huà)xml -->

        <item name="android:windowExitAnimation">@anim/pophidden_anim</item>
        <!-- 指定消失的動(dòng)畫(huà)xml -->
    </style>

popshow_anim

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:duration="500"
        android:fromYDelta="100%p"
        android:toYDelta="0" />

    <alpha
        android:duration="500"
        android:fromAlpha="0.0"
        android:toAlpha="1.0" />
</set>

pophidden_anim

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

    <translate
        android:duration="500"
        android:fromYDelta="0"
        android:toYDelta="50%p" />

    <alpha
        android:duration="500"
        android:fromAlpha="1.0"
        android:toAlpha="0.0" />
</set>

如果大家看懂了這個(gè)笔链,再也不怕任何自定義的彈框段只,根據(jù)這個(gè)原理,可以封裝任意的彈框
比如看看下面類似滴滴打車的搜索頁(yè)面可以用PopWindow 實(shí)現(xiàn)鉴扫,可以自己試試赞枕。
感謝批評(píng)與指導(dǎo)


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子炕婶,更是在濱河造成了極大的恐慌姐赡,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,884評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件柠掂,死亡現(xiàn)場(chǎng)離奇詭異项滑,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)涯贞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)枪狂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人宋渔,你說(shuō)我怎么就攤上這事州疾。” “怎么了皇拣?”我有些...
    開(kāi)封第一講書(shū)人閱讀 158,369評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵严蓖,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我氧急,道長(zhǎng)颗胡,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,799評(píng)論 1 285
  • 正文 為了忘掉前任吩坝,我火速辦了婚禮毒姨,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘钾恢。我一直安慰自己手素,他們只是感情好鸳址,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,910評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布瘩蚪。 她就那樣靜靜地躺著,像睡著了一般稿黍。 火紅的嫁衣襯著肌膚如雪疹瘦。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 50,096評(píng)論 1 291
  • 那天巡球,我揣著相機(jī)與錄音言沐,去河邊找鬼。 笑死酣栈,一個(gè)胖子當(dāng)著我的面吹牛险胰,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播矿筝,決...
    沈念sama閱讀 39,159評(píng)論 3 411
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼起便,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起榆综,我...
    開(kāi)封第一講書(shū)人閱讀 37,917評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤妙痹,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后鼻疮,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體怯伊,經(jīng)...
    沈念sama閱讀 44,360評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,673評(píng)論 2 327
  • 正文 我和宋清朗相戀三年判沟,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了耿芹。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,814評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡水评,死狀恐怖猩系,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情中燥,我是刑警寧澤寇甸,帶...
    沈念sama閱讀 34,509評(píng)論 4 334
  • 正文 年R本政府宣布,位于F島的核電站疗涉,受9級(jí)特大地震影響拿霉,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜咱扣,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,156評(píng)論 3 317
  • 文/蒙蒙 一绽淘、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧闹伪,春花似錦沪铭、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,882評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至厅克,卻和暖如春赔退,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背证舟。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,123評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工硕旗, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人女责。 一個(gè)月前我還...
    沈念sama閱讀 46,641評(píng)論 2 362
  • 正文 我出身青樓漆枚,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親抵知。 傳聞我的和親對(duì)象是個(gè)殘疾皇子墙基,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,728評(píng)論 2 351

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

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,871評(píng)論 25 707
  • ¥開(kāi)啟¥ 【iAPP實(shí)現(xiàn)進(jìn)入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開(kāi)一個(gè)線程昔榴,因...
    小菜c閱讀 6,377評(píng)論 0 17
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)、插件碘橘、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,066評(píng)論 4 62
  • 01 一個(gè)陰雨綿綿的周末痘拆,我正窩在床上刷淘寶仰禽,突然聽(tīng)見(jiàn)有人敲門(mén),問(wèn)是誰(shuí)纺蛆,半天才聽(tīng)見(jiàn)一個(gè)帶著沙啞嗓音吐葵、明顯有著哭腔的...
    何初見(jiàn)閱讀 717評(píng)論 35 29
  • 鮮酒灑滿云端 像被驢血渲染的青麥 暗紫色涌動(dòng)的風(fēng) 分不清是黑夜還是黎明 天那邊是什么? 是充滿藻荇的黃河桥氏, 還是水...
    卡貝田閱讀 272評(píng)論 1 2