Android开发--仿QQ支付界面

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

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


设计效果图

所先声明:支付宝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------

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 195,980评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,422评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,130评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,553评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,408评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,326评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,720评论 3 386
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,373评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,678评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,722评论 2 312
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,486评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,335评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,738评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,009评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,283评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,692评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,893评论 2 335

推荐阅读更多精彩内容