Android开发--仿QQ支付界面

作者: 小彬小 | 来源:发表于2016-12-20 16:29 被阅读291次

      这是我第一次在简书上写的第一篇文章,其实我关注简书有一两个月吧!平时我就在这里看看别人的文章,很有冲动自己也能像别人一样滔滔不绝的写作,可是我有自知自明根本不能达到那个高度。哈哈!而这一篇也是我今天在简书写的第一篇,因此我也喜欢我能写更多的不管是技术方面还是其他方面。下面这些内容如果有任何问题欢迎提出,由于工作时间不是很长如有问题还望大神指正,进而改之。

    废话不多说先看要实现的效果图:

    设计效果图

    所先声明:支付宝QQ微信等平台是直接输入完自动进行下一步操作,而我这个是在键盘右下角确定按钮进行下一步操作,而现在实现的只有输入密码功能,并没有实现刷卡操作。

    看设计图思路:                                                                                                                                                                 1.看到这个界面一般会想dialog实现,而且是全屏的。而一般dialog不是全部的需要设置(后面会提到)

    2.自定义键盘,点击键盘中的数字对应上部分输入框中显示密码,删除进行输入框删除,确定进行数据提交,而上部分输入框右上角( X )可以取消dialog。点击其他透明地方不进行任何操作。

    代码实现:

    我就把核心代码贴出来了,主要是我想把代码全部贴出来可是我贴来排版好丑,完全变形了我自己都看不下去了我只能贴最要部分,其中输入框密码是一个自定义PasswordView.java,键盘Keyboard.java这两个文件我就没贴出来了,这部分我都难以接受~~~就将就看一下吧!等我哪天抽时间整理写一个demo.

    public classNewTableDialogManager {

    public interface Listener {

    public void confirm(String insertText);

    }

    //最大位数

    private static final intMAX_INSERT_COUNT=6;

    private static final intINVALID_VALUE= -1;

    private ContextmContext;

    private DialogmDialog;

    Listener mListener;

    Keyboard mNumberPad;

    privatePasswordView[] mPasswordViews = new PasswordView[MAX_INSERT_COUNT];

    private int mInsertCount=0;

    private int[] mInsertKey = new int[MAX_INSERT_COUNT];

    String mResultText="";

    public NewTableDialogManager(Context context, Listener listener) {

    this.mContext= context;

    this.mListener= listener;

    initView();

    }

    private void initView() {

    //dialog初始化

    mDialog = new Dialog(mContext, R.style.FullDialog);

    mDialog.setCancelable(false);

    mDialog.setCanceledOnTouchOutside(false);

    //这里设置dialog为全屏

    Window win = mDialog.getWindow();

    win.getDecorView().setPadding(0,0,0,0);

    WindowManager.LayoutParams lp = win.getAttributes();

    lp.width= WindowManager.LayoutParams.MATCH_PARENT;

    lp.height= WindowManager.LayoutParams.MATCH_PARENT;

    win.setAttributes(lp);

    mDialog.setContentView(R.layout.new_dialog_manager);

    //绑定键盘

    View numberView =mDialog.findViewById(R.id.keyboardView);

    mNumberPad=newKeyboard(numberView, Keyboard.NumberPadType_hideKey);

    mNumberPad.setKeyListener(mNumberPadListener);

    //屏蔽左下角和右下角按钮

    RelativeLayout leftLayout = (RelativeLayout)mDialog.findViewById(R.id.leftLayout);

    leftLayout.setClickable(false);

    ImageView leftImageView = (ImageView)mDialog.findViewById(R.id.leftImageView);

    leftImageView.setVisibility(View.INVISIBLE);

    RelativeLayout pointViewPad = (RelativeLayout)mDialog.findViewById(R.id.pointViewPad);

    pointViewPad.setClickable(false);

    PointView pointView = (PointView)mDialog.findViewById(R.id.pointView);

    pointView.setVisibility(View.INVISIBLE);

    //密码框

    PasswordView passwordView1 = (PasswordView)mDialog.findViewById(R.id.passwordView1);

    PasswordView passwordView2 = (PasswordView)mDialog.findViewById(R.id.passwordView2);

    PasswordView passwordView3 = (PasswordView)mDialog.findViewById(R.id.passwordView3);

    PasswordView passwordView4 = (PasswordView)mDialog.findViewById(R.id.passwordView4);

    PasswordView passwordView5 = (PasswordView)mDialog.findViewById(R.id.passwordView5);

    PasswordView passwordView6 = (PasswordView)mDialog.findViewById(R.id.passwordView6);

    mPasswordViews[0] = passwordView1;

    mPasswordViews[1] = passwordView2;

    mPasswordViews[2] = passwordView3;

    mPasswordViews[3] = passwordView4;

    mPasswordViews[4] = passwordView5;

    mPasswordViews[5] = passwordView6;

    //关闭

    ImageView mCloseImageView = (ImageView)mDialog.findViewById(R.id.closeImageView);

    mCloseImageView.setOnClickListener(mCloseListener);

    }

    privateView.OnClickListener mCloseListener = new View.OnClickListener() {

    @Override

    public void onClick(View v) {

    //            clearInsert();

    mDialog.dismiss();

    }

    };

    privateKeyboard.KeyboardListener mNumberPadListener = newKeyboard.KeyboardListener() {

    @Override

    public void numberClicked(intnumber) {

    if(mInsertCount> = MAX_INSERT_COUNT) {

    return;

    }

    PasswordView passwordView = mPasswordViews[mInsertCount];

    passwordView.setChecked(true);

    mInsertKey[mInsertCount] = number;

    mInsertCount++;

    //提交验证

    if(mInsertCount == MAX_INSERT_COUNT) {

    String inserTextView ="";

    for(inti =0; i

    inserTextView += mInsertKey[i];

    }

    mResultText = inserTextView;

    }

    }

    @Override

    public void leftClicked() {

    }

    @Override

    public void pointClicked() {

    }

    @Override

    public void topClicked() {

    //删除

    if( mInsertCount == 0 ) {

    return;

    }

    mInsertCount--;

    mPasswordViews[mInsertCount].setChecked(false);

    mInsertKey[mInsertCount] = INVALID_VALUE;

    //

    String insertText = mResultText;

    if(TextUtils.isEmpty(insertText)) {

    return;

    }

    intcount = insertText.length();

    insertText = insertText.substring(0, count -1);

    mResultText= insertText;

    }

    @Override

    public void buttonClicked() {

    //确定

    checkDatas(mResultText);

    }

    @Override

    public void emptyClicked() {

    }

    };

    /**

    * 提交服务器验证

    *

    * @paraminsertText

    */

    private voidcheckDatas(String insertText) {

    if(TextUtils.isEmpty(insertText)) {

    Toast.makeText(mContext,"请输入6位数字", Toast.LENGTH_SHORT).show();

    }

    Log.e("insertText", insertText);

    //TODO 请求接口

    mListener.confirm(insertText);

    //请求完成之后清空数据

    clearInsert();

    }

    //关闭时调用

    private voidclearInsert() {

    mInsertCount = 0;

    for(inti =0; i

    mInsertKey[i] = INVALID_VALUE;

    mPasswordViews[i].setChecked(false);

    }

    mResultText="";

    }

    public voidshow() {

    if(mDialog.isShowing()) {

    return;

    }

    mDialog.show();

    }

    public voidhide() {

    mDialog.hide();

    }

    public voiddismiss() {

    mDialog.dismiss();

    }

    }

    布局文件效果图:

    代码不就不贴出来了,真心想死,还不是属性这个写作的布局方式。

    写出的效果图

    真心不敢贴代码了。。我怕被打si。。。排版丑的无法直视。算了。。不敢再说多了,就这样吧!就这样吧!

    ---END------

    相关文章

      网友评论

        本文标题:Android开发--仿QQ支付界面

        本文链接:https://www.haomeiwen.com/subject/yetfvttx.html