近些天项目中需要用的交易支付,实现第三方资产转账支付的功能,网上找了好多代码,但是都不是很完善,于是就自己写了一个
记下来就看看实现思路吧
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