开封市建设局网站,建设部网站查询注册岩土工程师,旅游电子商务网站的建设方式,百度加速乐wordpress原标题#xff1a;Android 自定义控件 - 仿支付宝数字键盘简介在一些带有支付功能的 App 中#xff0c;输入的密码一般只能是纯数字#xff0c;虽然我们可以指定 EditText 输入框只能输入数字#xff0c;但是为了提供用户的使用体验#xff0c;我们往往更倾向于使用自定义…原标题Android 自定义控件 - 仿支付宝数字键盘简介在一些带有支付功能的 App 中输入的密码一般只能是纯数字虽然我们可以指定 EditText 输入框只能输入数字但是为了提供用户的使用体验我们往往更倾向于使用自定义的纯数字键盘。本文效果实现步骤集成系统的 KeyBoardView 类在初始化时初始化键盘布局设置 KeyBoard 对象。实现 OnKeyboardActionListener 接口处理按键交互事件。根据需求绘制按键背景和按键图标。设置监听器将输入的内容回调给调用方。键盘布局在 res/xml/ 目录下创建 xml 文件key_password_number.xmlandroid:horizontalGap1dpandroid:keyHeight9%pandroid:keyWidth33.3333%pandroid:verticalGap1dpandroid:codes49android:keyLabel1/android:codes50android:keyLabel2/android:codes51android:keyLabel3/android:codes52android:keyLabel4/android:codes53android:keyLabel5/android:codes54android:keyLabel6/android:codes55android:keyLabel7/android:codes56android:keyLabel8/android:codes57android:keyLabel9/android:codes-10android:keyLabel/android:codes48android:keyLabel0/android:codes-5android:keyLabel/继承 KeyBoardViewpublicclassPwdKeyboardViewextendsKeyboardViewimplementsKeyboardView.OnKeyboardActionListener{privatestaticfinalString TAG PwdKeyboardView;privatestaticfinalintKEY_EMPTY - 10;privateintdelKeyBackgroundColor 0xffcccccc;privateRect keyIconRect;publicPwdKeyboardView(Context context, AttributeSet attrs){super(context, attrs);Log.d(TAG, PwdKeyboardView: two params);init(context);}publicPwdKeyboardView(Context context, AttributeSet attrs, intdefStyleAttr){super(context, attrs, defStyleAttr);Log.d(TAG, PwdKeyboardView: three params);init(context);}privatevoidinit(Context context){Keyboard keyboard newKeyboard(context, R.xml.key_password_number); // 初始化 keyboardsetKeyboard(keyboard);setEnabled( true);setFocusable( true);setPreviewEnabled( false); // 设置点击按键不显示预览气泡setOnKeyboardActionListener( this);}/*** 重新绘制删除按键和空白键** paramcanvas*/OverridepublicvoidonDraw(Canvas canvas){super.onDraw(canvas);List keys getKeyboard().getKeys();for(Keyboard.Key key : keys) {if(key.codes[ 0] KEY_EMPTY) {// 绘制空白键背景drawKeyBackground(key, canvas, delKeyBackgroundColor);}if(key.codes[ 0] Keyboard.KEYCODE_DELETE) {// 删除删除按键背景drawKeyBackground(key, canvas, delKeyBackgroundColor);// 绘制删除按键图标drawKeyIcon(key, canvas, getResources().getDrawable(R.drawable.ic_delete));}}}/*** 绘制按键的背景** paramkey* paramcanvas* paramcolor*/privatevoiddrawKeyBackground(Keyboard.Key key, Canvas canvas, intcolor){ColorDrawable drawable newColorDrawable(color);drawable.setBounds(key.x, key.y, key.x key.width, key.y key.height);drawable.draw(canvas);}/*** 绘制按键的 icon** paramkey* paramcanvas* paramiconDrawable*/privatevoiddrawKeyIcon(Keyboard.Key key, Canvas canvas, Drawable iconDrawable){if(iconDrawable null) {return;}// 计算按键icon 的rect 范围if(keyIconRect null|| keyIconRect.isEmpty()) {// 得到 keyicon 的显示大小因为图片放在不同的drawable-dpi目录下显示大小也不一样intintrinsicWidth iconDrawable.getIntrinsicWidth();intintrinsicHeight iconDrawable.getIntrinsicHeight();intdrawWidth intrinsicWidth;intdrawHeight intrinsicHeight;// 限制图片的大小防止图片按键范围if(drawWidth key.width) {drawWidth key.width;// 此时高就按照比例缩放drawHeight ( int) (drawWidth * 1.0f/ intrinsicWidth * intrinsicHeight);} elseif(drawHeight key.height) {drawHeight key.height;drawWidth ( int) (drawHeight * 1.0f/ intrinsicHeight * intrinsicWidth);}// 获取图片的 x,y 坐标,图片在按键的正中间intleft key.x key.width / 2- drawWidth / 2;inttop key.y key.height / 2- drawHeight / 2;keyIconRect newRect(left, top, left drawWidth, top drawHeight);}if(keyIconRect ! null !keyIconRect.isEmpty()) {iconDrawable.setBounds(keyIconRect);iconDrawable.draw(canvas);}}OverridepublicvoidonPress(intprimaryCode){}OverridepublicvoidonRelease(intprimaryCode){}/*** 处理按键的点击事件*/OverridepublicvoidonKey(intprimaryCode, int[] keyCodes){Log.d(TAG, onKey: primaryCode primaryCode , keyCodes Arrays.toString(keyCodes));if(primaryCode KEY_EMPTY) {return;}if(listener ! null) {if(primaryCode Keyboard.KEYCODE_DELETE) {listener.onDelete();} else{listener.onInput(String.valueOf(( char) primaryCode));}}}OverridepublicvoidonText(CharSequence charSequence){}OverridepublicvoidswipeLeft(){}OverridepublicvoidswipeRight(){}OverridepublicvoidswipeDown(){}OverridepublicvoidswipeUp(){}publicinterfaceOnKeyListener{// 输入回调voidonInput(String text);// 删除回调voidonDelete();}privateOnKeyListener listener;publicvoidsetOnKeyListener(OnKeyListener listener){this.listener listener;}}使用 PwdKeyboardViewandroid:id id/key_boardandroid:layout_width match_parentandroid:layout_height wrap_contentandroid:background #919191android:keepScreenOn trueandroid:keyBackground drawable/selector_key_boardandroid:keyTextColor android:color/blackandroid:keyTextSize 26spandroid:shadowRadius 0/ 显示结果为完整代码https://github.com/xing16/PwdKeyboardView返回搜狐查看更多责任编辑