欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android仿支付宝密码输入效果封装

程序员文章站 2022-07-01 16:26:26
模仿支付宝输入效果,实现很简单,就是画个矩形框和圆形,其他的通过组合view来实现所有功能,虽然简单但是封装起来,方便以后使用,也分享一下,希望对别人也有点帮助。 1...

模仿支付宝输入效果,实现很简单,就是画个矩形框和圆形,其他的通过组合view来实现所有功能,虽然简单但是封装起来,方便以后使用,也分享一下,希望对别人也有点帮助。

Android仿支付宝密码输入效果封装

1、如何使用,可以设置自己的进入退出动画,不设置则没有动画效果,自己觉得封装之后还是非常用好的。

private myinputpwdutil myinputpwdutil;
@override
protected void oncreate(bundle savedinstancestate) {
 super.oncreate(savedinstancestate);
 setcontentview(r.layout.activity_main);
 myinputpwdutil = new myinputpwdutil(this);
 myinputpwdutil.getmyinputdialogbuilder().setanimstyle(r.style.dialog_anim);

 //可以定制自己进入退出动画,不设置没有动画
 myinputpwdutil.setlistener(new inputpwdview.inputpwdlistener() {
 @override
 public void hide() {
  myinputpwdutil.hide();
 }

 @override
 public void forgetpwd() {
  toast.maketext(mainactivity.this, "忘记密码", toast.length_short).show();
 }

 @override
 public void finishpwd(string pwd) {
  toast.maketext(mainactivity.this, pwd, toast.length_short).show();
 }
 });
}
public void show(view view){
 myinputpwdutil.show();
}

2、输入框实现主要代码,就是绘制矩形和中间的圆形而已。

 int height = getheight();
 int width = getwidth();
 //画边框
 rectf rect = new rectf(0, 0, width, height);
 borderpaint.setcolor(bordercolor);
 canvas.drawroundrect(rect, borderradius, borderradius, borderpaint);
 //画内容区域
 rectf rectcontent = new rectf(rect.left + defaultcontentmargin, rect.top + defaultcontentmargin, rect.right - defaultcontentmargin, rect.bottom - defaultcontentmargin);
 borderpaint.setcolor(getresources().getcolor(r.color.myinputpwdbase_gray));
 canvas.drawroundrect(rectcontent, borderradius, borderradius, borderpaint);

 //画分割线:分割线数量比密码数少1
 borderpaint.setcolor(bordercolor);
 borderpaint.setstrokewidth(defaultsplitlinewidth);
 for (int i = 1; i < passwordlength; i++) {
 float x = width * i / passwordlength;
 canvas.drawline(x, 0, x, height, borderpaint);
 }

 //画密码内容
 float px, py = height / 2;
 float halfwidth = width / passwordlength / 2;
 for (int i = 0; i < textlength; i++) {
 px = width * i / passwordlength + halfwidth;
 canvas.drawcircle(px, py, passwordwidth, passwordpaint);
 }

3、作为library的module,在定义使用到的属性的时候最好特别能区分开,设置特定的开头,这样能避免引入自己的工程之后导致冲突。

如有bug,谢谢指出。

源码下载

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。