English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Android仿iOS数字密码解锁界面的实例

Como se muestra a continuación:

Todos los desarrolladores de Android saben que, en la actualidad, el desbloqueo más común de Android es el desbloqueo de nueve cuadrantes, y el desbloqueo más común de iOS es el desbloqueo de contraseña numérica. Mientras tanto, en el proceso de desarrollo, a menudo necesitamos combinar Android e iOS. A veces, necesitamos que nuestra interfaz de desbloqueo se parezca a un teclado numérico de 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);
 // 绘制第2Fila4,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);
 // 绘制第3Fila7,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){//Presione refrescar
 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){//Primera columna
 //Obtener la coordenada x del centro del círculo al hacer clic
 circle_x = xs[0];
 //Determinar en qué fila hizo clic
 if(ys[0] - 50 <= y && ys[0] + 50 >= y){//Fila1Fila
 //Obtener la coordenada y del centro del círculo al hacer clic
 circle_y = ys[0];
 number = 1;//Establecer el número clic
 }1]; - 50 <= y && ys[1]; + 50 >= y){//Fila2Fila
 //Obtener la coordenada y del centro del círculo al hacer clic
 circle_y = ys[1];
 number = 4;//Establecer el número clic
 }2]; - 50 <= y && ys[2]; + 50 >= y){//Fila3Fila
 //Obtener la coordenada y del centro del círculo al hacer clic
 circle_y = ys[2];
 number = 7;//Establecer el número clic
 }
 }1]; - 50 <= x && x <= xs[1]; + 50){//Fila2Columna
 //Obtener la coordenada x del centro del círculo al hacer clic
 circle_x = xs[1];
 //Determinar en qué fila hizo clic
 if(ys[0] - 50 <= y && ys[0] + 50 >= y){//Fila1Fila
 //Obtener la coordenada y del centro del círculo al hacer clic
 circle_y = ys[0];
 number = 2;//Establecer el número clic
 }1]; - 50 <= y && ys[1]; + 50 >= y){//Fila2Fila
 //Obtener la coordenada y del centro del círculo al hacer clic
 circle_y = ys[1];
 number = 5;//Establecer el número clic
 }2]; - 50 <= y && ys[2]; + 50 >= y){//Fila3Fila
 //Obtener la coordenada y del centro del círculo al hacer clic
 circle_y = ys[2];
 number = 8;//Establecer el número clic
 }3]; - 50 <= y && ys[3]; + 50 >= y){//Fila4Fila
 //Obtener la coordenada y del centro del círculo al hacer clic
 circle_y = ys[3];
 number = 0;//Establecer el número clic
 }
 }2]; - 50 <= x && x <= xs[2]; + 50){//Fila3Columna
 //Obtener la coordenada x del centro del círculo al hacer clic
 circle_x = xs[2];
 //Determinar en qué fila hizo clic
 if(ys[0] - 50 <= y && ys[0] + 50 >= y){//Fila1Fila
 //Obtener la coordenada y del centro del círculo al hacer clic
 circle_y = ys[0];
 number = 3;//Establecer el número clic
 }1]; - 50 <= y && ys[1]; + 50 >= y){//Fila2Fila
 //Obtener la coordenada y del centro del círculo al hacer clic
 circle_y = ys[1];
 number = 6;//Establecer el número clic
 }2]; - 50 <= y && ys[2]; + 50 >= y){//Fila3Fila
 //Obtener la coordenada y del centro del círculo al hacer clic
 circle_y = ys[2];
 number = 9;//Establecer el número clic
 }
 }
 sendAccessEvent(R.string.numeric_keyboard_down);
 type = 0;//Presione refrescar
 //Dibujar el fondo circular al hacer clic
 invalidate();
}

Bueno, más o menos es así. Por cierto, aquí4El control deslizante de visualización de la contraseña también utiliza el método de control deslizante personalizado, que utiliza hilos para realizar la entrada de números después1Después de un segundo, reemplace los números introducidos con caracteres de contraseña. (Algunas personas pueden decir que establecer el estilo de EditText del sistema como contraseña también puede lograrlo, pero quiero decir que no es posible, al menos no funcionó para mí)

La instancia de desbloqueo de contraseña digital similar a iOS que comparto con ustedes aquí es todo lo que tengo, espero que les sirva de referencia y que apoyen más a la tutoría de gritos.

Declaración: El contenido de este artículo se obtiene de la red, es propiedad del autor original, el contenido se contribuye y carga de manera autónoma por los usuarios de Internet, este sitio no posee los derechos de propiedad, no se ha editado de manera artificial y no asume responsabilidad alguna por ellas. Si encuentra contenido sospechoso de infracción de derechos de autor, le invitamos a enviar un correo electrónico a: notice#oldtoolbag.com (al enviar un correo electrónico, por favor reemplace # con @) para denunciar, y proporcione evidencia relevante. Una vez confirmado, este sitio eliminará inmediatamente el contenido sospechoso de infracción.