| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265 |
- package com.hjq.dialog;
- import android.app.Dialog;
- import android.content.Context;
- import android.support.annotation.NonNull;
- import android.support.v4.app.FragmentActivity;
- import android.support.v7.widget.GridLayoutManager;
- import android.support.v7.widget.RecyclerView;
- import android.view.Gravity;
- import android.view.View;
- import android.view.ViewGroup;
- import android.widget.ImageView;
- import android.widget.TextView;
- import com.hjq.base.BaseDialog;
- import com.hjq.base.BaseDialogFragment;
- import com.hjq.base.BaseRecyclerViewAdapter;
- import com.hjq.dialog.widget.PasswordView;
- import java.util.Arrays;
- import java.util.LinkedList;
- /**
- * desc : 支付密码对话框
- */
- public final class PayPasswordDialog {
- public static final class Builder
- extends BaseDialogFragment.Builder<Builder>
- implements BaseRecyclerViewAdapter.OnItemClickListener,
- View.OnClickListener {
- // 输入键盘文本
- private static final String[] KEYBOARD_TEXT = new String[]{"1", "2", "3", "4", "5", "6", "7", "8", "9", "", "0", ""};
- private OnListener mListener;
- private boolean mAutoDismiss = true;
- private PasswordView mPasswordView;
- private RecyclerView mRecyclerView;
- private LinkedList<String> mRecordList = new LinkedList<>();
- private TextView mTitleView;
- private TextView mSubTitleView;
- private TextView mMoneyView;
- private ImageView mCloseView;
- public Builder(FragmentActivity activity) {
- super(activity);
- setContentView(R.layout.dialog_pay_password);
- setAnimStyle(BaseDialog.AnimStyle.BOTTOM);
- setGravity(Gravity.BOTTOM);
- setWidth(MATCH_PARENT);
- mRecyclerView = findViewById(R.id.rv_dialog_pay_list);
- mPasswordView = findViewById(R.id.pw_dialog_pay_view);
- mTitleView = findViewById(R.id.tv_dialog_pay_title);
- mSubTitleView = findViewById(R.id.tv_dialog_pay_sub_title);
- mMoneyView = findViewById(R.id.tv_dialog_pay_money);
- mCloseView = findViewById(R.id.iv_dialog_pay_close);
- mCloseView.setOnClickListener(this);
- mRecyclerView.setLayoutManager(new GridLayoutManager(getContext(), 3));
- keyboardAdapter adapter = new keyboardAdapter(getContext());
- adapter.setData(Arrays.asList(KEYBOARD_TEXT));
- adapter.setOnItemClickListener(this);
- mRecyclerView.setAdapter(adapter);
- }
- public Builder setTitle(int resId) {
- return setTitle(getText(resId));
- }
- public Builder setTitle(CharSequence title) {
- if (title != null && !"".equals(title.toString())) {
- mTitleView.setText(title);
- mTitleView.setVisibility(View.VISIBLE);
- } else {
- mTitleView.setVisibility(View.GONE);
- }
- return this;
- }
- public Builder setSubTitle(int resId) {
- return setSubTitle(getText(resId));
- }
- public Builder setSubTitle(CharSequence subTitle) {
- if (subTitle != null && !"".equals(subTitle.toString())) {
- mSubTitleView.setText(subTitle);
- mSubTitleView.setVisibility(View.VISIBLE);
- } else {
- mSubTitleView.setVisibility(View.GONE);
- }
- return this;
- }
- public Builder setMoney(int resId) {
- return setSubTitle(getText(resId));
- }
- public Builder setMoney(CharSequence money) {
- if (money != null && !"".equals(money.toString())) {
- mMoneyView.setText(money);
- mMoneyView.setVisibility(View.VISIBLE);
- } else {
- mMoneyView.setVisibility(View.GONE);
- }
- return this;
- }
- public Builder setAutoDismiss(boolean dismiss) {
- mAutoDismiss = dismiss;
- return this;
- }
- public Builder setListener(OnListener l) {
- mListener = l;
- return this;
- }
- /**
- * {@link BaseRecyclerViewAdapter.OnItemClickListener}
- */
- @Override
- public void onItemClick(RecyclerView recyclerView, View itemView, int position) {
- switch (position) {
- case 0:
- case 1:
- case 2:
- case 3:
- case 4:
- case 5:
- case 6:
- case 7:
- case 8:
- case 10:
- // 判断密码是否已经输入完毕
- if (mRecordList.size() < PasswordView.PASSWORD_COUNT) {
- // 点击数字,显示在密码行
- mRecordList.add(KEYBOARD_TEXT[position]);
- }
- // 判断密码是否已经输入完毕
- if (mRecordList.size() == PasswordView.PASSWORD_COUNT) {
- if (mListener != null) {
- postDelayed(new Runnable() {
- @Override
- public void run() {
- if (mAutoDismiss) {
- dismiss();
- }
- // 获取输入的支付密码
- StringBuilder password = new StringBuilder();
- for (String s : mRecordList) {
- password.append(s);
- }
- mListener.onCompleted(getDialog(), password.toString());
- }
- }, 300);
- }
- }
- break;
- case 9:
- // 点击空白的地方不做任何操作
- break;
- case 11:
- // 点击回退按钮删除
- if (mRecordList.size() != 0) {
- mRecordList.removeLast();
- }
- break;
- default:
- break;
- }
- mPasswordView.setPassWordLength(mRecordList.size());
- }
- @Override
- public void onClick(View v) {
- if (v == mCloseView) {
- if (mAutoDismiss) {
- dismiss();
- }
- if (mListener != null) {
- mListener.onCancel(getDialog());
- }
- }
- }
- // @Override
- // protected BaseDialog createDialog(Context context, int themeResId) {
- // if (getGravity() == Gravity.BOTTOM) {
- // return new BaseBottomDialog(context, themeResId);
- // }
- // return super.createDialog(context, themeResId);
- // }
- }
- private static final class keyboardAdapter extends BaseRecyclerViewAdapter<String, keyboardAdapter.ViewHolder> {
- private keyboardAdapter(Context context) {
- super(context);
- }
- @NonNull
- @Override
- public keyboardAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
- return new keyboardAdapter.ViewHolder(parent, R.layout.item_dialog_pay_password);
- }
- @Override
- public void onBindViewHolder(@NonNull keyboardAdapter.ViewHolder holder, int position) {
- holder.mTextView.setText(getItem(position));
- switch (position) {
- case 9:
- holder.mTextView.setBackgroundColor(0xFFD5D8DB);
- holder.mTextView.setVisibility(View.VISIBLE);
- holder.mImageView.setVisibility(View.GONE);
- holder.itemView.setBackgroundColor(0xFFECECEC);
- break;
- case 11:
- holder.mTextView.setBackgroundColor(0xFFD5D8DB);
- holder.mTextView.setVisibility(View.GONE);
- holder.mImageView.setVisibility(View.VISIBLE);
- holder.itemView.setBackgroundResource(R.drawable.dialog_pay_password_item_del_selector);
- break;
- default:
- break;
- }
- }
- final class ViewHolder extends BaseRecyclerViewAdapter.ViewHolder {
- private TextView mTextView;
- private ImageView mImageView;
- private ViewHolder(ViewGroup parent, int layoutId) {
- super(parent, layoutId);
- mTextView = (TextView) findViewById(R.id.tv_dialog_pay_key);
- mImageView = (ImageView) findViewById(R.id.iv_dialog_pay_delete);
- }
- }
- }
- public interface OnListener {
- /**
- * 输入完成时回调
- *
- * @param password 六位支付密码
- */
- void onCompleted(Dialog dialog, String password);
- /**
- * 点击取消时回调
- */
- void onCancel(Dialog dialog);
- }
- }
|