我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Android 实现仿支付宝的密码均分输入框

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Android 实现仿支付宝的密码均分输入框

Android 仿支付宝的密码均分输入框

此为安卓项目,通过重绘edittext进行文字的均分排布。

直接贴上代码:

package com.xxx.xxx;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.Rect;import android.text.Editable;import android.text.Selection;import android.text.TextWatcher;import android.util.AttributeSet;import android.view.ViewGroup;import android.widget.EditText;public class ExcelEditView extends EditText {  private int mMaxLength = 6;  //一行显示的最大字符数  private int mColorId = Color.BLACK;   //字体颜色  private boolean isPassword = false;  //是否需要显示密码符  private float mHeight = 0.0f;    //默认情况的高度  private int mMaxLine = 0;     //最大的行数:如果为0,---表示支持多行输入  不为0,--则为该行  public ExcelEditView(Context context){    super(context);    init();  }  public ExcelEditView(Context context, AttributeSet set){    super(context, set);    init();  }  private void init(){    this.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) {        // TODO Auto-generated method stub        Editable editable = ExcelEditView.this.getText();        int len = editable.length();        if(mMaxLine > 0 && len > mMaxLength*mMaxLine)        {          int selEndIndex = Selection.getSelectionEnd(editable);          String str = editable.toString();          String newStr = str.substring(0,mMaxLength*mMaxLine);          ExcelEditView.this.setText(newStr);          editable = ExcelEditView.this.getText();          //新字符串的长度          int newLen = editable.length();          //旧光标位置超过字符串长度          if(selEndIndex > newLen)          {            selEndIndex = editable.length();          }          //设置新光标所在的位置          Selection.setSelection(editable, selEndIndex);        }      }      @Override      public void afterTextChanged(Editable s) {      }    });  }  public void setIsPassword(boolean isPassword){    this.isPassword = isPassword;  }  public void setmMaxLine(int line){    this.mMaxLine = line;  }  public void setmMaxLength(int leng){    this.mMaxLength = leng;  }  @Override  public void setTextColor(int color) {    super.setTextColor(color);    mColorId = color;  }  @Override  protected void onDraw(Canvas canvas) {    char[] txt = this.getText().toString().toCharArray();   //取出字符数组    int txtLine = getLineFromCharArray(txt);   //计算有多少行    if (mMaxLine > 0 && txtLine > mMaxLine){ //进行行数的上限处理      txtLine = mMaxLine;    }    if (this.isPassword){  //密码符的转义      for (int i=0; i<txt.length; i++){        txt[i] = '*';      }    }    if (mHeight == 0){   //获取最初控件的高度      mHeight = this.getHeight();    }    float width = this.getWidth();    float height = mHeight * txtLine;    ViewGroup.LayoutParams params = this.getLayoutParams();    params.height = (int)height;    this.setLayoutParams(params);    //动态设置控件高度    float per = width / (mMaxLength+1);     //宽度等分    float perHeight = height / (txtLine + 1);  //高度等分    Paint countPaint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.DEV_KERN_TEXT_FLAG);    countPaint.setColor(mColorId);    countPaint.setTextSize(this.getTextSize());    countPaint.setTypeface(this.getTypeface());    countPaint.setTextAlign(Paint.Align.CENTER);    Rect textBounds = new Rect();    String numberStr = "1";    countPaint.getTextBounds(numberStr, 0, numberStr.length(), textBounds);//get text bounds, that can get the text width and height    float textHeight = (float)(textBounds.bottom - textBounds.top);    float textWidth = (float)(textBounds.right = textBounds.left);    //计算该控件中能够显示的单一文字的高度和宽度    for (int line = 0; line < txtLine; line++) {      for (int i = 0; i < mMaxLength && txt.length > (i+line*mMaxLength); i++) {        canvas.drawText(String.valueOf(txt[i+line*mMaxLength]), (i + 1) * per - textWidth, perHeight * (line + 1) + textHeight / 2, countPaint);    //进行绘制      }    }  }  private int getLineFromCharArray(char[] txt){    int line = ((txt.length - 1) / mMaxLength) + 1;    return line;  }}

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Android 实现仿支付宝的密码均分输入框

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Android 实现仿支付宝的密码均分输入框

Android 仿支付宝的密码均分输入框此为安卓项目,通过重绘edittext进行文字的均分排布。直接贴上代码:package com.xxx.xxx;import android.content.Context;import androi
2023-05-31

Android仿支付宝支付密码输入框

本文实例为大家分享了Android实现一个仿支付宝支付密码的输入框,主要实现如下: PasswordView.javapackage com.jackie.alipay.password; import android.annotatio
2022-06-06

Android 仿支付宝密码输入框效果

模仿支付宝输入效果,实现很简单,就是画个矩形框和圆形,其他的通过组合view来实现所有功能,虽然简单但是封装起来,方便以后使用,也分享一下,希望对别人也有点帮助。 1、如何使用,可以设置自己的进入退出动画,不设置则没有动画效果,自己觉得封
2022-06-06

Android仿微信/支付宝密码输入框

在用到支付类app时,都有一个简密的输入框。。开始实现的时候思路有点问题,后来到github上搜了下,找到了一个开源的库看起来相当的牛逼,,来个地址先: https://github.com/Jungerr/GridPasswordView
2022-06-06

android仿微信支付宝的支付密码输入框示例

大家好,我是狸小华,萌汉子一枚。今天给大家带来的是仿微信/支付宝的密码输入框。这个效果也出来有一段时间了,所以搜索一下还是有不少的网友实现,但是,但是!经过一番查看后,我发现他们的实现分为两大类。 一,直接继承EditText,然后在ond
2022-06-06

Android仿支付宝、京东的密码键盘和输入框

首先看下效果图一:布局代码 键盘由0~9的数字,删除键和完成键组成,也可以根据需求通过GridView适配器的getItemViewType方法来定义。点击键的时候背景有变色的效果。 密码输入框由六个EditText组成,每个输入框最对能输
2022-06-06

Android的支付密码输入框实现浅析

先看一下效果图实现思路:变成点的控件不是TextView和EditText而是Imageview。首先写一个RelativeLayout里边包含6个ImageView和一个EditText(EditText要覆盖ImageView)将Edi
2022-06-06

Android实现支付宝6位密码输入界面

我们先来照图分析一下: (1)限制输入6位,每一位都有自己的框格,每个格显示一位; (2)有回退/取消支付按钮; (3)有忘记密码链接; (4)自定义的只能输入数字的键盘输入区; (5)在6位输完后自动进行密码校验和支付交易。如上图左边是
2022-06-06

Android自定义View仿支付宝输入六位密码功能

跟选择银行卡界面类似,也是用一个PopupWindow,不过输入密码界面是一个自定义view,当输入六位密码完成后用回调在Activity中获取到输入的密码并以Toast显示密码。效果图如下:自定义view布局效果图及代码如下:
2022-06-06

vue3如何实现​6位支付密码输入框

微信、支付宝支付密码时的密码输入框大家都很熟悉,本文主要介绍了vue3如何实现​6位支付密码输入框,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-05-18

vue3怎么实现​6位支付密码输入框

具体的需求:在客户信息表格的操作栏中,点击修改支付密码按钮,会跳转到6位支付密码输入框组件页面。同时,要求输入框密文显示、不可编辑、不可回退、即时显示;到达6位数,自动进入确认支付密码;确认支付密码到达6位数,自动检验两次输入密码的一致性,显示确定按钮。此功能是为了用于在银行中,客户用设备输入密码,柜员不可见密码,但柜员可以进行提示操作。具体的问题:1、如何实现密文显示,且每个框只能输入1位数字;2、如何实现输入框不可编辑、不可回退;3、如何检验两次输入密码的一致性;4、如果自己的业务需要对键盘
2023-05-18

Android仿支付宝笑脸刷新加载动画的实现代码

看到支付宝的下拉刷新有一个笑脸的动画,因此自己也动手实现一下。效果图如下:一、总体思路 1、静态部分的笑脸。 这一部分的笑脸就是一个半圆弧,加上两颗眼睛,这部分比较简单,用于一开始的展示。 2、动态笑脸的实现。 2.1、先是从底部有一个圆形
2022-06-06

Android仿微信输入框效果的实现代码

仿微信输入框效果图:输入框:
2023-05-31

Android 自定义输入支付密码的软键盘实例代码

Android 自定义输入支付密码的软键盘 有项目需求需要做一个密码锁功能,还有自己的软键盘,类似与支付宝那种,这里是整理的资料,大家可以看下,如有错误,欢迎留言指正 需求:要实现类似支付宝的输入支付密码的功能,
2022-06-06

Android实现动态显示或隐藏密码输入框的内容

本文实例展示了Android实现动态显示或隐藏密码输入框内容的方法,分享给大家供大家参考之用。具体方法如下: 该功能可通过设置EditText的setTransformationMethod()方法来实现隐藏密码或者显示密码。 示例代码如下
2022-06-06

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录