Android 自定义密码键盘组件,支持多点触控
前言
现在对于前端APP的安全要求越来越高,所以很多APP都开发了自己的数字键盘,这么做对于安全性的提升个人总结有如下几点:
- 防止第三方键盘出现BUG,泄露用户支付密码。
- 自定义键盘可以根据自己的算法提高加密等级,比如的密码是123456,但是我可以在内存中存储为xxxxxx。
- Android 系统黑客只能获取点击屏幕位置,并不能直接获得该按钮的具体值。
- 可以自定义按键的点击效果,防止录屏获取支付密码。(用户体验不好)
- 可以每次点击更改按键位置,防止屏幕位置点击对比获取支付密码。(用户体验不好)
个人认为,如果不是安全要求很高的系统,满足上述前3点即可,毕竟用户体验也是很重要的。不过最好还是要根据实际具体情况分析。
密码键盘DEMO
Github地址:https://github.com/AdolphL/PayKeyboard
密码键盘DEMO解析
自定义键盘的技术点在于Canvas画图和点击事件的编写
画图
这个我就不多讲了,多看看API就可以了。键盘绘画主要逻辑在onDraw方法下,主要就是算每个按键的范围和按键不同状态的背景色不同体现点击效果,整体的刷新函数使用的是invalidate()并没有使用局部刷新,原因是使用invalidate(xx)好像在高版本Android设备上没有效果也就没有尝试了,感兴趣的同学可以了解下。
点击事件
其实一个点击事件分解开来就是触点Down - xxx - Up(当然Up时候的区域要和Down时候的区域一致,不能中间状态已经出了此按键区域还触发OnClick时间了),这里可能还有个时间问题,过短就不触发,过长触发长按事件等等,此数字键盘的点击事件我是没有计算时间的,因为感觉意义不大。
点击事件的主要代码在onTouch()方法下面,这里需要注意的是ACTION_DOWN事件必须返回true,系统才会把后续的Move和UP事件等继续交由此View处理, ACTION_POINTER_DOWN 和 ACTION_POINTER_UP 是支持多点触控的事件,我们可以使用event.getPointerId(event.getActionIndex()) 方法来获取是第几个触点出发的Down或者Up事件,当然Move事件也是支持多点的,但是在我的测试中好像只有第一个点响应了Up事件后才会触发第二个触点的Move事件。
关于点击具体按键的区域判定,因为键盘上的按键都是我们自己画出来的,不是独立组件我们需要判定此次点击具体点击了哪个按键。clickable数组变量里面存放了每一个可点击按键的具体坐标。当触发onDown方法时会根据触点的坐标来求出此次触发了哪个按键或者是否触发按键。
关于当前屏幕触点的状态全部存放在clickType变量中,因为我们要记录下触点Down时候的状态,在Up的时候才能判断是否触发Click事件。
安全
这里可以注入一个Encryption接口,此接口复杂密码的加密(密码都是每一个字符加密的),具体加密算法由实现类实现。
密码键盘DEMO扩展
目前这个组件就是个小Demo,但是也可以做出很多的效果,比如结合popup做一个弹出键盘,或者结合透明的Activity让其它的应用直接唤醒你的支付键盘等。有兴趣的同学可以尝试下~
Android 自定义密码键盘组件,支持多点触控相关推荐
- Android 图片随着手势缩放,平移,并且支持多点触控
效果图: 现在app中,图片预览功能肯定是少不了的,用户基本已经形成条件反射,看到小图,点击看大图,看到大图两个手指开始进行放大,放大后,开始移动到指定部位~~~ 想要做到图片支持多点触控,自由的进行 ...
- linux多点触摸屏驱动程序,Linux系统实现支持多点触控操作[视频]
虽然大多数人目前还不会购买拥有触控屏的设备,不过在Windows 7的大力推动下,触控操作已经开始流行了起来.然而Linux目前却无法支持这一功能,这让很多用户十分郁闷,不过来自ENAC Intera ...
- Android游戏开发:SurfaceView多点触控之完美钢琴游戏Demo
一.我们在使用SurfaceView开发小游戏时,如果需要在窗体上自绘按钮和可交互对象,这时需要监听屏幕的多点触控,并且每次触控的改变都需要和游戏产生交互,如何实现呢? CSDN博客 @MXout 有 ...
- Android 多点触控 MotionEvent详解
相关API 介绍 MotionEvent.getY() 和 MotionEvent.getRawY() 的区别 getY 表示触摸事件在当前的View内的Y 坐标, getRawY表示触摸事件在整个屏 ...
- Android多点触控详解
本文转载自GcsSloop的 安卓自定义View进阶-多点触控详解 的文章 Android 多点触控详解,在前面的几篇文章中我们大致了解了 Android 中的事件处理流程和一些简单的处理方案,本次带 ...
- Android多点触控MultiTouch浅析
申明: 参考:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2013/0226/914.html 下面实现如何通过应用层支持多点触控操作, ...
- Android开发实例之多点触控程序
智能终端设备的多点触控操作为我们带来了种种炫酷体验,这也使得很多Android开发者都对多点触控程序的开发感兴趣.实际上多点触控程序的实现并不是那么遥不可及,而是比较容易.本文就主要通过一个实例具体讲 ...
- Android中的多点触控(装载)
Android多点触控技术 1 简介 Android多点触控在本质上需要LCD驱动和程序本身设计上支持,目前市面上HTC.Motorola和Samsung等知名厂商只要使用电容屏触控原理的手机均可以支 ...
- Android多点触控技术
1 简介 Android多点触控在本质上需要LCD驱动和程序本身设计上支持,目前市面上HTC.Motorola和Samsung等知名厂商只要使用电容屏触控原理的手机均可以支持多点触控Multitouc ...
最新文章
- Mysql INSERT、REPLACE、UPDATE的区别
- 使用iphone功能来实现远程监控
- altium designer丝印变绿,3D封装变绿,出现」25.4mm提示的解决方法
- asp.net javascrip获取session的值_一篇文章搞定 Django Cookie 与 Session
- NET问答: 有最干净利落的读写文件方式吗?
- VFP下利用API调用帮助
- 英文文本分析:与COVID-19有关的论文文本分析
- 打印冻结窗格怎么保证每页都有_在打印Excel表时怎么设置才能实现每页都打印标题行...
- CSS基本布局16例
- 20200612每日一句
- Centos 7 WPS简单安装方法
- android 驱动程序,安卓设备安装USB驱动程序教程
- Hadoop2.7.2 分布式集群搭建(CentOS 7)
- 2022react面试题整理
- 阿里云 短信服务——短信发送频率限制
- KerberosSDR新手入门测试
- setAttribute的具体用法
- 初到北上广打拼的外地人,生活状态是怎样的?
- 感光法制作PCB(手工制板)
- re.I参数实现在findall和finditer方法中实现匹配忽略大小写