史上最全最好用的自定义交易支付密码及弹框
来源:互联网 发布:淘宝数据分析哪些内容 编辑:程序博客网 时间:2024/06/05 17:51
近些天项目中需要用的交易支付,实现第三方资产转账支付的功能,网上找了好多代码,但是都不是很完善,于是就自己写了一个
记下来就看看实现思路吧
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; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder viewHolder = null; if (convertView == null) { if (getItemViewType(position) == 1) { //数字键 convertView = LayoutInflater.from(context).inflate(R.layout.item_grid_keyboard, parent, false); viewHolder = new ViewHolder(convertView); } else { //删除键 convertView = LayoutInflater.from(context).inflate(R.layout.item_grid_keyboard_delete, parent, false); } } if (getItemViewType(position) == 1) { viewHolder = (ViewHolder) convertView.getTag(); viewHolder.tvKey.setText(key[position]); if(position == 9) viewHolder.tvKey.setBackgroundColor(Color.parseColor("#999999")); } return convertView; } }; /** * ViewHolder,view缓存 */ static class ViewHolder { private TextView tvKey; public ViewHolder(View view) { tvKey = (TextView) view.findViewById(R.id.tv_keyboard_keys); view.setTag(this); } }}
自定义gridview(当然也可以不用自定义,具体根据需求定,我这里使用自定义是为了监听他的滑动方法,因为当gridview至于布局最底部,如果高度不够,系统默认的gridview就会进行上下滑动以全部显示出键盘,我这里控制了gridview也就是键盘滚动事件的禁止,静听使用dispatchTouchEvent,返回为true便不可以滑动
)
public class CustomeGridView extends GridView { public CustomeGridView(Context context) { super(context); } public CustomeGridView(Context context, AttributeSet attrs) { super(context, attrs); } /** * 设置上下不滚动 */ @Override public boolean dispatchTouchEvent(MotionEvent ev) { if(ev.getAction() == MotionEvent.ACTION_MOVE){ return true;//true:禁止滚动 } return super.dispatchTouchEvent(ev); }}
密码框的xml文件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <LinearLayout android:layout_width="match_parent" android:orientation="horizontal" android:gravity="center" android:layout_height="wrap_content"> <FrameLayout android:layout_width="@dimen/dp_40" android:layout_height="@dimen/dp_40" android:background="@drawable/circle_pay" android:layout_marginRight="@dimen/dp_5" > <TextView android:id="@+id/tv_pay1" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:gravity="center" android:maxLength="1" android:inputType="numberPassword" android:textSize="36sp" /> <ImageView android:id="@+id/img_pass1" android:layout_width="14dp" android:layout_height="14dp" android:layout_gravity="center" android:src="@drawable/img_psw_bg" android:visibility="invisible" /> </FrameLayout> <FrameLayout android:layout_width="@dimen/dp_40" android:layout_height="@dimen/dp_40" android:background="@drawable/circle_pay" android:layout_marginRight="@dimen/dp_5" > <TextView android:id="@+id/tv_pay2" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:gravity="center" android:maxLength="1" android:inputType="numberPassword" android:textSize="36sp" /> <ImageView android:id="@+id/img_pass2" android:layout_width="14dp" android:layout_height="14dp" android:layout_gravity="center" android:src="@drawable/img_psw_bg" android:visibility="invisible" /> </FrameLayout> <FrameLayout android:layout_width="@dimen/dp_40" android:layout_height="@dimen/dp_40" android:background="@drawable/circle_pay" android:layout_marginRight="@dimen/dp_5" > <TextView android:id="@+id/tv_pay3" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:gravity="center" android:maxLength="1" android:inputType="numberPassword" android:textSize="36sp" /> <ImageView android:id="@+id/img_pass3" android:layout_width="14dp" android:layout_height="14dp" android:layout_gravity="center" android:src="@drawable/img_psw_bg" android:visibility="invisible" /> </FrameLayout> <FrameLayout android:layout_width="@dimen/dp_40" android:layout_height="@dimen/dp_40" android:background="@drawable/circle_pay" android:layout_marginRight="@dimen/dp_5" > <TextView android:id="@+id/tv_pay4" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:gravity="center" android:inputType="numberPassword" android:maxLength="1" android:textSize="36sp" /> <ImageView android:id="@+id/img_pass4" android:layout_width="14dp" android:layout_height="14dp" android:layout_gravity="center" android:src="@drawable/img_psw_bg" android:visibility="invisible" /> </FrameLayout> <FrameLayout android:layout_width="@dimen/dp_40" android:layout_height="@dimen/dp_40" android:background="@drawable/circle_pay" android:layout_marginRight="@dimen/dp_5" > <TextView android:id="@+id/tv_pay5" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:gravity="center" android:inputType="numberPassword" android:maxLength="1" android:textSize="36sp" /> <ImageView android:id="@+id/img_pass5" android:layout_width="14dp" android:layout_height="14dp" android:layout_gravity="center" android:src="@drawable/img_psw_bg" android:visibility="invisible" /> </FrameLayout> <FrameLayout android:layout_width="@dimen/dp_40" android:layout_height="@dimen/dp_40" android:layout_marginRight="@dimen/dp_5" android:background="@drawable/circle_pay" > <TextView android:id="@+id/tv_pay6" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:gravity="center" android:inputType="numberPassword" android:maxLength="1" android:textSize="36sp" /> <ImageView android:id="@+id/img_pass6" android:layout_width="14dp" android:layout_height="14dp" android:layout_gravity="center" android:src="@drawable/img_psw_bg" android:visibility="invisible" /> </FrameLayout> </LinearLayout></LinearLayout>其他的xml我就不贴出来了,实现就这么多,希望能帮助到大家 弹框实现效果如下
阅读全文
0 0
- 史上最全最好用的自定义交易支付密码及弹框
- 自定义输入支付密码框
- 自定义view密码框等同于支付宝支付密码框
- 安卓/Android 模仿支付宝/微信 支付密码输入框的自定义View
- Android自定义view,PasswordView,交易密码输入框
- Android自定义支付密码输入框
- 自定义view之支付密码输入框
- 自定义密码支付页面
- 自定义密码输入框(仿微信支付宝支付)
- 高仿微信支付的密码框
- 支付的密码输入框
- kotlin实现的简单个人账户管理APP(三) 自定义View仿支付宝的密码输入框/密码相关逻辑
- 仿微信/支付宝的密码输入框效果 带自定义键盘
- 一种新的支付技术---自定义双向动态密码介绍
- Android自定义类似支付宝密码输入的控件
- 一种新的支付技术---自定义双向动态密码介绍
- Android自定义类似支付宝密码输入的控件
- [Android]仿支付宝自定义View密码框
- 队列和栈的基本性质和应用
- lintcode整数排序|选择排序算法(Java)
- SQL Server Profiler工具使用说明
- tomcat集群--整合Apache服务器,采用mod_JK连接模式
- 自我整理:iOS端APP真机调试和打ipa包完整流程
- 史上最全最好用的自定义交易支付密码及弹框
- Linux for Ubuntu Clion配置OenGL(C/C++)开发环境
- PS中的小技巧——不定期更新
- bzoj4569: [Scoi2016]萌萌哒
- tensorflow_scope作用
- 各种全局主键生成策略对比
- 路由器认识与设置方法
- [python] 函数小结
- Android EditText 默认不弹出输入法