android 仿ios数字密码解锁界面的实例

 更新时间:2017年12月22日 14:08:10   作者:AndyRenJie  
下面小编就为大家分享一篇android 仿ios数字密码解锁界面的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

如下所示:

每个Android开发人员都知道,现在android的解锁最常用的就是九宫格解锁,ios的解锁常用的是数字密码解锁。而我们在开发工程中,很多时候,都需要android和ios进行结合。有的时候我们就需要把我们的解锁界面弄成像ios一样的数字键盘。

这里我就实现了一个仿照ios的数字密码解锁界面。在这里我采用了两种方式来实现,第一种就是使用自定义控件的形式,第二种就是使用我们的布局来实现的。这里我就着重讲一下使用自定义控件形式实现的思路。至于使用布局文件实现的方式,我就不进行具体的讲解了,具体的在后面我会上传源码供大家下载进行研究学习。

当然,我的能力有限,可能你们觉得我的方式不好,那么你们就给我提出来,看看具体你们觉得怎么实现才好,我们一起研究学习。

好了,废话不多说了,现在就来讲解一下,我所使用自定义控件的实现方法:

1.最主要还是实现自定义数字键盘(一个自定义View的控件):

1.绘制数字

// 绘制第一排1,2,3
 canvas.drawText("1", first_x, 40 + first_y, paint);
 canvas.drawText("2", first_x * 2, 40 + first_y, paint);
 canvas.drawText("3", first_x * 3, 40 + first_y, paint);
 // 绘制第2排4,5,6
 canvas.drawText("4", first_x, 40 + first_y + first_x, paint);
 canvas.drawText("5", first_x * 2, 40 + first_y + first_x, paint);
 canvas.drawText("6", first_x * 3, 40 + first_y + first_x, paint);
 // 绘制第3排7,8,9
 canvas.drawText("7", first_x, 40 + first_y + first_x * 2, paint);
 canvas.drawText("8", first_x * 2, 40 + first_y + first_x * 2, paint);
 canvas.drawText("9", first_x * 3, 40 + first_y + first_x * 2, paint);
 // 绘制第4排0
 canvas.drawText("0", first_x * 2, 40 + first_y + first_x * 3, paint);

2.绘制好数字后,我们需要在每一个数字外面添加一层圆,绘制圆

//依次绘制第一排的圆
 canvas.drawCircle(first_x+10, 40 + first_y - 15, 50, paint);
 canvas.drawCircle(first_x*2+10, 40 + first_y - 15, 50, paint);
 canvas.drawCircle(first_x*3+10, 40 + first_y - 15, 50, paint);
 //依次绘制第2排的圆
 canvas.drawCircle(first_x+10, 40 + first_y + first_x - 15, 50, paint);
 canvas.drawCircle(first_x*2+10, 40 + first_y + first_x - 15, 50, paint);
 canvas.drawCircle(first_x*3+10, 40 + first_y + first_x - 15, 50, paint);
 //依次绘制第3排的圆
 canvas.drawCircle(first_x+10, 40 + first_y + first_x * 2 - 15, 50, paint);
 canvas.drawCircle(first_x*2+10, 40 + first_y + first_x * 2 - 15, 50, paint);
 canvas.drawCircle(first_x*3+10, 40 + first_y + first_x * 2 - 15, 50, paint);
 //绘制最后一个圆
 canvas.drawCircle(first_x*2+10, 40 + first_y + first_x * 3 - 15, 50, paint);

3.点击数字后,我们给一个不同的效果,让用户知道自己点击了该数字,这里我是吧外面的圆的颜色改为了黄色

//判断是否点击数字
 if(circle_x > 0 && circle_y > 0){//点击
 if(type == 0){//按下刷新
 paint.setColor(Color.YELLOW);//设置画笔颜色
 canvas.drawCircle(circle_x, circle_y, 50, paint);//绘制圆
 }else if(type == 1){//弹起刷新
 paint.setColor(Color.WHITE);//设置画笔颜色
 canvas.drawCircle(circle_x, circle_y, 50, paint);//绘制圆
 //绘制完成后,重置
 circle_x = 0; circle_y = 0;
 }
 }

4.最后就是判断点击的数字

/*
 * 判断点击的是哪一个数字圆
 */
private void handleDown(float x, float y){
 //判断点击的是那一列的数据
 if(xs[0] - 50 <= x && x <= xs[0] + 50){//第一列
 //获取点击处的圆心横坐标
 circle_x = xs[0];
 //判断点击的是哪一排
 if(ys[0] - 50 <= y && ys[0] + 50 >= y){//第1排
 //获取点击的数字圆的圆心纵坐标
 circle_y = ys[0];
 number = 1;//设置点击的数字
 }else if(ys[1] - 50 <= y && ys[1] + 50 >= y){//第2排
 //获取点击的数字圆的圆心纵坐标
 circle_y = ys[1];
 number = 4;//设置点击的数字
 }else if(ys[2] - 50 <= y && ys[2] + 50 >= y){//第3排
 //获取点击的数字圆的圆心纵坐标
 circle_y = ys[2];
 number = 7;//设置点击的数字
 }
 }else if(xs[1] - 50 <= x && x <= xs[1] + 50){//第2列
 //获取点击处的圆心横坐标
 circle_x = xs[1];
 //判断点击的是哪一排
 if(ys[0] - 50 <= y && ys[0] + 50 >= y){//第1排
 //获取点击的数字圆的圆心纵坐标
 circle_y = ys[0];
 number = 2;//设置点击的数字
 }else if(ys[1] - 50 <= y && ys[1] + 50 >= y){//第2排
 //获取点击的数字圆的圆心纵坐标
 circle_y = ys[1];
 number = 5;//设置点击的数字
 }else if(ys[2] - 50 <= y && ys[2] + 50 >= y){//第3排
 //获取点击的数字圆的圆心纵坐标
 circle_y = ys[2];
 number = 8;//设置点击的数字
 }else if(ys[3] - 50 <= y && ys[3] + 50 >= y){//第4排
 //获取点击的数字圆的圆心纵坐标
 circle_y = ys[3];
 number = 0;//设置点击的数字
 }
 }else if(xs[2] - 50 <= x && x <= xs[2] + 50){//第3列
 //获取点击处的圆心横坐标
 circle_x = xs[2];
 //判断点击的是哪一排
 if(ys[0] - 50 <= y && ys[0] + 50 >= y){//第1排
 //获取点击的数字圆的圆心纵坐标
 circle_y = ys[0];
 number = 3;//设置点击的数字
 }else if(ys[1] - 50 <= y && ys[1] + 50 >= y){//第2排
 //获取点击的数字圆的圆心纵坐标
 circle_y = ys[1];
 number = 6;//设置点击的数字
 }else if(ys[2] - 50 <= y && ys[2] + 50 >= y){//第3排
 //获取点击的数字圆的圆心纵坐标
 circle_y = ys[2];
 number = 9;//设置点击的数字
 }
 }
 sendAccessEvent(R.string.numeric_keyboard_down);
 type = 0;//按下刷新
 //绘制点击时的背景圆
 invalidate();
}

好了,大概我的就是这样了。顺带提一下,我这里上面4个显示密码的控件也是采用的自定义控件的方式,使用线程实现输入数字后1秒后用密码字符替换输入的数字。(有人可能会说系统的EditText控件设置样式为密码也可以实现,这里我想说的是,不可以的,至少我试了是不行的)

以上这篇android 仿ios数字密码解锁界面的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Android三种网络通讯方式及Android的网络通讯机制

    Android三种网络通讯方式及Android的网络通讯机制

    在android平台目前提供了三种网络接口可以使用:分别是java.net.*(标准Java接口)、Org.apache接口和Android.net.*(Android网络接口),本文主要给大家介绍android三种网络通讯方式及android的网络通讯机制,小伙伴们一起学习吧
    2015-11-11
  • Android招聘面试题解答

    Android招聘面试题解答

    Android招聘面试题答案
    2013-11-11
  • Android liveData与viewBinding使用教程

    Android liveData与viewBinding使用教程

    LiveData是一种可观察的数据存储器类,LiveData使用观察者模式,每当数据发生变化时,LiveData会通知 Observer对象,我们可以在这些 Observer 对象中更新UI,ViewModel对象为特定的界面组件提供数据,并包含数据处理业务逻辑,会配合LiveData一起使用
    2022-11-11
  • Android编程使用自定义shape实现shadow阴影效果的方法

    Android编程使用自定义shape实现shadow阴影效果的方法

    这篇文章主要介绍了Android编程使用自定义shape实现shadow阴影效果的方法,涉及Android中xml文件布局的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-11-11
  • Android开发服务Service全面讲解

    Android开发服务Service全面讲解

    Android的服务是开发Android应用程序的重要组成部分。不同于活动Activity,服务是在后台运行,服务没有接口,生命周期也与活动Activity非常不同。通过使用服务我们可以实现一些后台操作,比如想从远程服务器加载一个网页等,下面来看看详细内容,需要的朋友可以参考下
    2023-02-02
  • ViewPager实现图片切换效果

    ViewPager实现图片切换效果

    这篇文章主要为大家详细介绍了ViewPager实现图片切换效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-09-09
  • Android中通过AsyncTask类来制作炫酷进度条的实例教程

    Android中通过AsyncTask类来制作炫酷进度条的实例教程

    这篇文章主要介绍了Android中通过AsyncTask来制作炫酷进度条的实例教程,借助AsyncTask类的线程操作方法来管理异步任务,需要的朋友可以参考下
    2016-05-05
  • Android 实例开发基于ArcSoft实现人脸识别

    Android 实例开发基于ArcSoft实现人脸识别

    人脸识别,是基于人的脸部特征信息进行身份识别的一种生物识别技术。用摄像机或摄像头采集含有人脸的图像或视频流,并自动在图像中检测和跟踪人脸,进而对检测到的人脸进行识别的一系列相关技术,通常也叫做人像识别、面部识别
    2021-11-11
  • Android NDK生成及连接静态库与动态库的方法

    Android NDK生成及连接静态库与动态库的方法

    这篇文章主要介绍了Android NDK生成及连接静态库与动态库的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-08-08
  • Android在不使用数据库的情况下存储数据的方法

    Android在不使用数据库的情况下存储数据的方法

    这篇文章主要介绍了Android在不使用数据库的情况下存储数据的方法,涉及Android存储数据的相关技巧,需要的朋友可以参考下
    2015-04-04

最新评论