English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Voici un exemple :
Chaque développeur Android sait que, actuellement, le déverrouillage le plus couramment utilisé pour Android est le déverrouillage en grille de neuf cases, et pour iOS, c'est le déverrouillage par mot de passe numérique. Pendant le développement de nos projets, nous devons souvent combiner Android et iOS. Parfois, nous avons besoin de rendre notre interface de déverrouillage ressembler à un clavier numérique comme 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); // 绘制第2rang4,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); // 绘制第3rang7,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){//Appuyer sur actualiser 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){//第一列 //Obtenir l'abscisse du centre horizontal de l'endroit cliqué circle_x = xs[0]; //Déterminer sur quel rang on clique if(ys[0] - 50 <= y && ys[0] + 50 >= y){//le1rang //Obtenir l'abscisse du centre vertical du cercle cliqué circle_y = ys[0]; number = 1;//Définir le nombre cliqué }else if(ys[1] - 50 <= y && ys[1] + 50 >= y){//le2rang //Obtenir l'abscisse du centre vertical du cercle cliqué circle_y = ys[1]; number = 4;//Définir le nombre cliqué }else if(ys[2] - 50 <= y && ys[2] + 50 >= y){//le3rang //Obtenir l'abscisse du centre vertical du cercle cliqué circle_y = ys[2]; number = 7;//Définir le nombre cliqué } 1] - 50 <= x && x <= xs[1] + 50){//le2colonne //Obtenir l'abscisse du centre horizontal de l'endroit cliqué circle_x = xs[1]; //Déterminer sur quel rang on clique if(ys[0] - 50 <= y && ys[0] + 50 >= y){//le1rang //Obtenir l'abscisse du centre vertical du cercle cliqué circle_y = ys[0]; number = 2;//Définir le nombre cliqué }else if(ys[1] - 50 <= y && ys[1] + 50 >= y){//le2rang //Obtenir l'abscisse du centre vertical du cercle cliqué circle_y = ys[1]; number = 5;//Définir le nombre cliqué }else if(ys[2] - 50 <= y && ys[2] + 50 >= y){//le3rang //Obtenir l'abscisse du centre vertical du cercle cliqué circle_y = ys[2]; number = 8;//Définir le nombre cliqué }else if(ys[3] - 50 <= y && ys[3] + 50 >= y){//le4rang //Obtenir l'abscisse du centre vertical du cercle cliqué circle_y = ys[3]; number = 0;//Définir le nombre cliqué } 2] - 50 <= x && x <= xs[2] + 50){//le3colonne //Obtenir l'abscisse du centre horizontal de l'endroit cliqué circle_x = xs[2]; //Déterminer sur quel rang on clique if(ys[0] - 50 <= y && ys[0] + 50 >= y){//le1rang //Obtenir l'abscisse du centre vertical du cercle cliqué circle_y = ys[0]; number = 3;//Définir le nombre cliqué }else if(ys[1] - 50 <= y && ys[1] + 50 >= y){//le2rang //Obtenir l'abscisse du centre vertical du cercle cliqué circle_y = ys[1]; number = 6;//Définir le nombre cliqué }else if(ys[2] - 50 <= y && ys[2] + 50 >= y){//le3rang //Obtenir l'abscisse du centre vertical du cercle cliqué circle_y = ys[2]; number = 9;//Définir le nombre cliqué } } sendAccessEvent(R.string.numeric_keyboard_down); type = 0;//Appuyer sur actualiser //Dessiner le fond circulaire lors du clic invalidate(); }
C'est ainsi que je l'ai fait, d'ailleurs, ici en haut4Le contrôle à affichage de mot de passe est également réalisé de manière personnalisée, en utilisant un thread pour entrer des chiffres après1Après une seconde, remplacez les chiffres saisis par des caractères de mot de passe (certains pourraient dire que la mise en style du contrôle EditText du système peut également être réalisée, mais je veux dire que ce n'est pas possible, au moins je l'ai essayé et cela ne fonctionne pas)
C'est tout ce que j'ai partagé avec vous aujourd'hui sur l'exemple de la vue de déverrouillage numérique iOS仿制android, j'espère qu'il vous sera utile et que vous continuerez à soutenir le tutoriel d'hurlement.
Déclaration : Le contenu de cet article est extrait du réseau, propriété du propriétaire du réseau, partagé par les utilisateurs d'Internet, téléchargé par eux-mêmes, ce site ne possède pas de propriété, n'a pas été traité par l'éditeur humain et n'assume pas de responsabilité juridique. Si vous trouvez du contenu suspect de violation de droits d'auteur, veuillez envoyer un e-mail à : notice#oldtoolbag.com (au moment de l'envoi d'un e-mail, veuillez remplacer # par @ pour faire une plainte, et fournir des preuves pertinentes. Une fois vérifié, ce site supprimera immédiatement le contenu suspect de violation de droits d'auteur.)