一个高仿闲鱼键自定义数字键盘特效

android开发 android开发     2022-09-16     665

关键词:

博客地址:

http://www.jianshu.com/p/be68facfc4b8

仿造android端闲鱼发布选择价格数字键盘,自定义数字键盘

技术分享

技术分享

技术分享

public class MyKeyBoardView extends KeyboardView {
    private Context  mContext;
    private Keyboard mKeyBoard;

    public MyKeyBoardView(Context context, AttributeSet attrs) {
        super(context, attrs);
        this.mContext = context;
    }

    public MyKeyBoardView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        this.mContext = context;
    }

    /**
     * 重新画一些按键
     */
    @Override
    public void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        mKeyBoard = this.getKeyboard();
        List<Key> keys = null;
        if (mKeyBoard != null) {
            keys = mKeyBoard.getKeys();
        }

        if (keys != null) {
            for (Key key : keys) {
                // 数字键盘的处理
                if (key.codes[0] == -4) {
                    drawKeyBackground(R.drawable.bg_keyboardview_yes, canvas, key);
                    drawText(canvas, key);
                }
            }
        }
    }

    private void drawKeyBackground(int drawableId, Canvas canvas, Key key) {
        Drawable npd = mContext.getResources().getDrawable(
                drawableId);
        int[] drawableState = key.getCurrentDrawableState();
        if (key.codes[0] != 0) {
            npd.setState(drawableState);
        }
        npd.setBounds(key.x, key.y, key.x + key.width, key.y
                + key.height);
        npd.draw(canvas);
    }

    private void drawText(Canvas canvas, Key key) {
        Rect bounds = new Rect();
        Paint paint = new Paint();
        paint.setTextAlign(Paint.Align.CENTER);


        paint.setAntiAlias(true);

        paint.setColor(Color.WHITE);
        if (key.label != null) {
            String label = key.label.toString();

            Field field;

            if (label.length() > 1 && key.codes.length < 2) {
                int labelTextSize = 0;
                try {
                    field = KeyboardView.class.getDeclaredField("mLabelTextSize");
                    field.setAccessible(true);
                    labelTextSize = (int) field.get(this);
                } catch (NoSuchFieldException e) {
                    e.printStackTrace();
                } catch (IllegalAccessException e) {
                    e.printStackTrace();
                }
                paint.setTextSize(labelTextSize);
                paint.setTypeface(Typeface.DEFAULT_BOLD);
            } else {
                int keyTextSize = 0;
                try {
                    field = KeyboardView.class.getDeclaredField("mLabelTextSize");
                    field.setAccessible(true);
                    keyTextSize = (int) field.get(this);
                } catch (NoSuchFieldException e) {
                    e.printStackTrace();
                } catch (IllegalAccessException e) {
                    e.printStackTrace();
                }
                paint.setTextSize(keyTextSize);
                paint.setTypeface(Typeface.DEFAULT);
            }

            paint.getTextBounds(key.label.toString(), 0, key.label.toString()
                    .length(), bounds);
            canvas.drawText(key.label.toString(), key.x + (key.width / 2),
                    (key.y + key.height / 2) + bounds.height() / 2, paint);
        } else if (key.icon != null) {
            key.icon.setBounds(key.x + (key.width - key.icon.getIntrinsicWidth()) / 2, key.y + (key.height - key.icon.getIntrinsicHeight()) / 2,
                    key.x + (key.width - key.icon.getIntrinsicWidth()) / 2 + key.icon.getIntrinsicWidth(), key.y + (key.height - key.icon.getIntrinsicHeight()) / 2 + key.icon.getIntrinsicHeight());
            key.icon.draw(canvas);
        }

    }
}

增加随机数字键盘 增加速记数字键盘,用于输入安全级别高的密码输入

private void randomKeyboardNumber() {
        List<Keyboard.Key> keyList = mKeyboardNumber.getKeys();
        // 查找出0-9的数字键
        List<Keyboard.Key> newkeyList = new ArrayList<Keyboard.Key>();
        for (int i = 0; i < keyList.size(); i++) {
            if (keyList.get(i).label != null
                    && isNumber(keyList.get(i).label.toString())) {
                newkeyList.add(keyList.get(i));
            }
        }
        // 数组长度
        int count = newkeyList.size();
        // 结果集
        List<KeyModel> resultList = new ArrayList<KeyModel>();
        // 用一个LinkedList作为中介
        LinkedList<KeyModel> temp = new LinkedList<KeyModel>();
        // 初始化temp
        for (int i = 0; i < count; i++) {
            temp.add(new KeyModel(48 + i, i + ""));
        }
        // 取数
        Random rand = new Random();
        for (int i = 0; i < count; i++) {
            int num = rand.nextInt(count - i);
            resultList.add(new KeyModel(temp.get(num).getCode(),
                    temp.get(num).getLable()));
            temp.remove(num);
        }
        for (int i = 0; i < newkeyList.size(); i++) {
            newkeyList.get(i).label = resultList.get(i).getLable();
            newkeyList.get(i).codes[0] = resultList.get(i)
                    .getCode();
        }

        mKeyboardView.setKeyboard(mKeyboardNumber);
    }

最近在调用使用的android系统的api,keyboardview和keyboard

技术分享

项目地址:

https://github.com/xuejinwei/NumberKeyboard

相信自己,没有做不到的,只有想不到的

如果你觉得此文对您有所帮助,欢迎入群 QQ交流群 :644196190 微信公众号:终端研发部

技术分享

支持所有的 View(AbsListView、RecyclerView、WebView....View) 和多层嵌套的视图结构

支持自定义并且已经集成了很多炫酷的 Header 和 Footer

支持和ListView的同步滚动 和 RecyclerView、AppBarLayout、CoordinatorLayout 的嵌套滚动 NestedScrolling.

支持在Android Studio Xml 编辑器中预览 效果

支持分别在 Default(默认)、Xml、JavaCode 三个中设置 Header 和 Footer

支持自动刷新、自动上拉加载(自动检测列表惯性滚动到底部,而不用手动上拉)

支持通用的刷新监听器 OnRefreshListener 和更详细的滚动监听 OnMultiPurposeListener

支持自定义回弹动画的插值器,实现各种炫酷的动画效果.

支持设置主题来适配任何场景的App,不会出现炫酷但很尴尬的情况.

支持设置多种滑动方式来适配各种效果的Header和Footer:平移、拉伸、背后固定、顶层固定、全屏

支持内容尺寸自适应 Content-wrap_content

支持继承重写和扩展功能,内部实现没有 private 方法和字段,继承之后都可以重写覆盖

支持越界回弹(Listview、RecyclerView、ScrollView、WebView...View)

支持多点触摸,下拉、上拉各种手势冲突

自定义数字键盘

...我有两个问题?1.我使用“界面生成器在我的视图中添加一个文本字段并选择“数字键盘”作为用户输入数字的默认键盘,所以当我单击文本字段时,数字键盘会自动出现,我该如何阻止它出现数字键盘?因为我想显示我的数字... 查看详情

为我的自定义数字键盘设置动画

...常工作,不能动画为默认数字键盘,我该如何修改?我有一个UITextField调用“fNumber”和一个自定义数字键盘视图调用myNumberPadView并由界面生成器创建,当“fNumber”被聚焦时,我将 查看详情

iPad应用程序的自定义数字键盘

...10-2020:58:21【问题描述】:我正在为在iOS8上运行的iPad创建一个内部应用程序(不适用于应用商店),其中一个要求是一个自定义键盘,可以复制iPad解锁/PIN码输入数字键盘。我的自定义数字键盘基于这个项目:https://github.com/lnafzi... 查看详情

Kotlin 中的自定义数字键盘

...10:36:22【问题描述】:我需要使用Kotlin在AndroidStudio中创建一个自定义数字键盘。我成功地使用键盘按钮(从0到9和一个删除按钮)和显示结果的TextInputEditText实现了视图。我还在片段中实现了按钮:result=binding.editTextInsert//Dat 查看详情

在 iOS 中有一个自定义数字键盘来拨打号码

】在iOS中有一个自定义数字键盘来拨打号码【英文标题】:HaveacustomnumberpadiniOStodialnumber【发布时间】:2014-03-1306:45:21【问题描述】:我正在制作一个应用程序,用户通过该应用程序拨打号码。我想设计我自己的带有删除按钮的... 查看详情

iOS应用程序中的自定义数字键盘问题

...diniOSapp【发布时间】:2013-11-2920:17:26【问题描述】:我有一个带有自定义数字键盘的应用。我需要一些自定义数字键盘,但不是首选项视图上的所有文本字段。我已经编写了这个方法来为某些文本字段设置数字键盘:-(void)setNumbe... 查看详情

在自定义数字键盘上的按键上点击播放声音

...【发布时间】:2012-06-2022:01:26【问题描述】:我正在创建一个自定义数字栏并将其放在常规键盘的顶部。现在,当我点击数字键盘中的键时,我希望播放常规的键盘声音。我在按下按钮的委托中使用以下代码。打印日志语句,但... 查看详情

使用带有 TextField 的自定义表格视图单元格关闭数字键盘

...TextField【发布时间】:2015-11-0401:05:01【问题描述】:我有一个带有自定义单元格和文本字段的表格视图。如下图。自定义单元格的类:importUIKitprotocolTextFieldTableDelegatefuncretornaTexto( 查看详情

我需要一个定制的移动数字键盘[关闭]

】我需要一个定制的移动数字键盘[关闭]【英文标题】:IneedacustomizedNumerickeypadformobile[closed]【发布时间】:2015-03-2019:52:45【问题描述】:我正在开发一个混合应用程序,我希望我的应用程序可以打开一个在所有设备上看起来都相... 查看详情

自定义数字软键盘

需求:1.数字键盘2.输入删除,光标要随之移动3.删除键长按全部清除4.点击键盘背景有颜色变换效果效果图:布局<?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_p 查看详情

自定义键盘附件视图输入

...put【发布时间】:2020-06-0721:34:39【问题描述】:我创建了一个自定义附件视图来补充标准ApplealphaiOS键盘。目的是添加一行数字键,以防止在键盘视图之间来回翻转。起初,我创建了一个工具栏并加载了一组0-9个标题为buttonItems的... 查看详情

键盘 Swift 上的自定义键

...的设置中在这两者之间进行切换。我想在两个键盘上添加一个键,允许用户在数字搜索和单词搜索之间切换,但我不知道怎么做。在iOS8中引入,您可以创建自定义键盘,但这不是用户 查看详情

从数字键盘上的自定义“完成”按钮接收通知在 iOS 8.3 中不起作用

...他线程likethisone中发布的解决方案在数字小键盘上添加了一个自定义“完成”按钮。随着iOS8.3的更新,一些事情发生了 查看详情

html5自定义数字键盘

原理:使用div模拟输入框,避免手机原生键盘弹出,键盘使用div模拟,点击事件使用js控制,光标闪烁使用css模拟,具体代码如下:1<!doctypehtml>2<htmllang="zh">3<head>4<metacharset="UTF-8">5<metahttp-equiv="X-UA-Compatible"conten... 查看详情

c#中定义了一个泛型,从键盘输入一个int型数字,如何接收转化为int型

Console.Write("您想要插入的元素是:");Tt=T.Parse(Console.ReadLine());//T是泛型类这句话肯定是错的,我知道。但是如何将得到的字符串转化为T类型????能转化吗??参考技术ATt=(T)Convert.ChangeType(Console.ReadLine(),typeof(T));本回答... 查看详情

gridview+popupwindow自定义数字键盘(代码片段)

publicclassSimpleGridViewTestextendsActivityEditTexteditText;privatePopupWindowpopupWindow;privateGridViewmGridView;privateViewcontentview;privateList<String>datas=newArrayList<String>(); 查看详情

android高级控件——自定义listview高仿一个qq可拖拽列表的实现

Android高级控件(六)——自定义ListView高仿一个QQ可拖拽列表的实现我们做一些好友列表或者商品列表的时候,居多的需求可能就是需要列表拖拽了,而我们选择了ListView,也是因为使用ListView太久远了,导致对他已经有浓厚的感... 查看详情

自定义数字软键盘--封装版

布局:<?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:or 查看详情