史上最全最好用的自定义交易支付密码及弹框

近些天项目中需要用的交易支付,实现第三方资产转账支付的功能,网上找了好多代码,但是都不是很完善,于是就自己写了一个

记下来就看看实现思路吧

1.总定义数字安全键盘,这里采用gridview的方式实现(为了提高安全性能,防止别人对系统键盘可以实行监听)

2.使用6个textview(用来获取输入的密码同时与自定义的键盘进行绑定) 和六个imageview(用来显示六个小圆点,因为本身的textview使用inputtype="textnumber"属性的话

生成的黑色圆点比较小,所以这里就采用的imageview这样可以加大小圆点的显示尺寸)

3.外部写一个输入完成回调的接口,同时提供一个抽象方法,供所有调用该接口的类或者界面使用

好了,实现思路基本就是这些了,接下来看看,代码实现吧

A.首先看一下自定义数字安全键盘的实现

/**
 * 防京东密码键盘
 *
 * @author 张全乐
 * @date 2017-6-24 11:06
 */
public class Keyboard extends RelativeLayout {
    private Context context;
    private CustomeGridView gvKeyboard;

    private String[] key;
    private OnClickKeyboardListener onClickKeyboardListener;

    public Keyboard(Context context) {
        this(context, null);
    }

    public Keyboard(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public Keyboard(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        this.context = context;
    }

//    @Override
//    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
//
//        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
//    }

    /**
     * 初始化键盘的点击事件
     */
    private void initEvent() {
        gvKeyboard.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                if (onClickKeyboardListener != null && position >= 0) {
                    onClickKeyboardListener.onKeyClick(position, key[position]);
                }
            }
        });
    }

    /**
     * 初始化KeyboardView
     */
    private void initKeyboardView() {
        View view = View.inflate(context, R.layout.view_keyboard, this);
        gvKeyboard = (CustomeGridView) view.findViewById(R.id.gv_keyboard);
        gvKeyboard.setAdapter(keyboardAdapter);
        initEvent();
    }

    public interface OnClickKeyboardListener {
        void onKeyClick(int position, String value);
    }

    /**
     * 对外开放的方法
     *
     * @param onClickKeyboardListener
     */
    public void setOnClickKeyboardListener(OnClickKeyboardListener onClickKeyboardListener) {
        this.onClickKeyboardListener = onClickKeyboardListener;
    }

    /**
     * 设置键盘所显示的内容
     *
     * @param key
     */
    public void setKeyboardKeys(String[] key) {
        this.key = key;
        initKeyboardView();
    }

    private BaseAdapter keyboardAdapter = new BaseAdapter() {
        private static final int KEY_ELEVEN = 11;

        @Override
        public int getCount() {
            return key.length;
        }

        @Override
        public Object getItem(int position) {
            return key[position];
        }

        @Override
        public long getItemId(int position) {
            return position;
        }

        @Override
        public int getViewTypeCount() {
            return 2;
        }

        @Override
        public int getItemViewType(int position) {
            return (getItemId(position) == KEY_ELEVEN) ? 2 : 1
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值