1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > Android 仿支付宝密码输入页面

Android 仿支付宝密码输入页面

时间:2023-09-10 01:44:20

相关推荐

Android 仿支付宝密码输入页面

简单页面,不一一介绍,直接上源码

`

package cn.npe1348.zfbpay.view;

import android.content.Context;

import android.text.Editable;

import android.text.TextWatcher;

import android.util.AttributeSet;

import android.view.View;

import android.view.ViewGroup;

import android.widget.AdapterView;

import android.widget.BaseAdapter;

import android.widget.GridView;

import android.widget.ImageView;

import android.widget.RelativeLayout;

import android.widget.TextView;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.Map;

import cn.npe1348.zfbpay.R;

public class PasswordView extends RelativeLayout {

private Context context;

// 输入的密码

private String strPassword;

// 就6个输入框不会变了,用数组内存申请固定空间,比List省空间

private TextView[]textViewList;

// 用GrideView布局键盘,其实并不是真正的键盘,只是模拟键盘的功能

private GridView gridView;

// 要用Adapter中适配,用数组不能往adapter中填充

private ArrayList<Map<String, String>> valueList;

//取消按钮

private ImageView tvCancel;

//忘记密码按钮

private TextView tvForget;

// 用于记录当前输入密码格位置

private int currentIndex = -1;

//自定义接口public interface OnPasswordInputFinish {//添加密码输入完成的接口void inputFinish();//取消支付接口void outfo();//忘记密码接口void forgetPwd();}public PasswordView(Context context, AttributeSet attrs) {this(context, attrs,0);}public PasswordView(Context context, AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);this.context = context;//view布局View view = View.inflate(context, R.layout.layout_popup_bottom, null);valueList = new ArrayList<Map<String, String>>();textViewList = new TextView[6];//初始化控件tvCancel=(ImageView) view.findViewById(R.id.tvCancel);tvForget = (TextView) view.findViewById(R.id.tv_forgetPwd);textViewList[0] = (TextView) view.findViewById(R.id.tv_pass1);textViewList[1] = (TextView) view.findViewById(R.id.tv_pass2);textViewList[2] = (TextView) view.findViewById(R.id.tv_pass3);textViewList[3] = (TextView) view.findViewById(R.id.tv_pass4);textViewList[4] = (TextView) view.findViewById(R.id.tv_pass5);textViewList[5] = (TextView) view.findViewById(R.id.tv_pass6);//初始化键盘gridView = (GridView) view.findViewById(R.id.gv_keybord);//设置键盘显示按钮到集合setView();// 必须要,不然不显示控件addView(view);}//设置按钮显示内容private void setView() {// 初始化按钮上应该显示的数字for (int i = 1; i < 13; i++) {Map<String, String> map = new HashMap<String, String>();if (i < 10) {map.put("name", String.valueOf(i));} else if (i == 10) {map.put("name", "X");} else if (i == 12) {map.put("name", "<");} else if (i == 11) {map.put("name", String.valueOf(0));}valueList.add(map);}//为键盘gridview设置适配器gridView.setAdapter(adapter);//为键盘按键添加点击事件gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> parent, View view,int position, long id) {// 点击0~9按钮if (position < 11 && position != 9) {// 判断输入位置————要小心数组越界if (currentIndex >= -1 && currentIndex < 5) {textViewList[++currentIndex].setText(valueList.get(position).get("name"));}} else {// 点击退格键if (position == 11) {// 判断是否删除完毕————要小心数组越界if (currentIndex - 1 >= -1) {textViewList[currentIndex--].setText("");}}else if(position == 9){currentIndex = -1;for(int i = 0,length=textViewList.length;i<length;i++){textViewList[i].setText("");}}}}});}// 设置监听方法,在第6位输入完成后触发public void setOnFinishInput(final OnPasswordInputFinish pass) {textViewList[5].addTextChangedListener(new TextWatcher() {@Overridepublic void beforeTextChanged(CharSequence s, int start, int count,int after) {}@Overridepublic void onTextChanged(CharSequence s, int start, int before,int count) {}@Overridepublic void afterTextChanged(Editable s) {if (s.toString().length() == 1) {// 每次触发都要先将strPassword置空,再重新获取,避免由于输入删除再输入造成混乱strPassword = "";for (int i = 0; i < 6; i++) {strPassword += textViewList[i].getText().toString().trim();}// 接口中要实现的方法,完成密码输入完成后的响应逻辑pass.inputFinish();}}});tvCancel.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {//点击取消调用接口pass.outfo();}});tvForget.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {//单击忘记密码调用接口pass.forgetPwd();}});}//获取输入的密码public String getStrPassword() {return strPassword;}// GrideView的适配器BaseAdapter adapter = new BaseAdapter() {@Overridepublic int getCount() {return valueList.size();}@Overridepublic Object getItem(int position) {return valueList.get(position);}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {ViewHolder viewHolder;if (convertView == null) {//装载数字键盘布局convertView = View.inflate(context, R.layout.item_gride, null);viewHolder = new ViewHolder();//初始化键盘按钮viewHolder.btnKey = (TextView) convertView.findViewById(R.id.btn_keys);convertView.setTag(viewHolder);} else {viewHolder = (ViewHolder) convertView.getTag();}//设置按钮显示数字viewHolder.btnKey.setText(valueList.get(position).get("name"));if (position == 9) {//设置按钮背景viewHolder.btnKey.setBackgroundResource(R.drawable.selector_key_del);}if (position == 11) {//设置按钮背景viewHolder.btnKey.setBackgroundResource(R.drawable.selector_key_del);}return convertView;}};// 存放控件public final class ViewHolder {public TextView btnKey;}

}

`

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。