android开发图案解锁,Android开发中图案解锁完整版
学习目的
通过学习Android里面的onTouchEvent方法对上篇的图案解锁进行完善,调用touch方法实现触控功能和tag值得用法。
先关技术、及其使用
1、重写onTouchEvent方法
返回值表示表示这个事件是否已经被处理,true表示已经被处理了/消费了,false表示还没有被处理/消费。
在方法里面系统自动将事件包装MotionEvent类,事件有ACTION_DOWN ACTION_MOVE ACTION_UP ACTION_CANSLE,然后通过getAction获取事件
2、在xml里面创建控件并添加id ,在通过Java代码中findViewById 找到对应的控件,用getACtoin获取事件类型
//获取事件类型
int action = event.getAction();
在判断是什么事件,然后实现每个事件的相应功能,touch事件需要获取到触摸点在屏幕上的坐标。
(1)ACTION_DOWN 触摸
case MotionEvent.ACTION_DOWN:
//按下
//获取触摸点的坐标
x = event.getX();
y = event.getY();
//判断 x 和 y 是不是在某个点的范围内
selected = dtoOfTouch(x,y);
if(selected != null) {
//点亮
selected.setVisibility(View.VISIBLE);
//记录当前这个的点
lastSelectDot = selected;
//将tag值拼接到密码中
password.append(selected.getTag());
//将点亮的点添加到这个数组中
selectedList.add(selected);
}
break;
(2)ACTION_MOVE 移动,实现移动功能需要获取到移动过程中划过的点和和线,然后对齐点亮,所以要给对应的点和线添加tag值
case MotionEvent.ACTION_MOVE:
//移动
x = event.getX();
y = event.getY();
//判断 x 和 y 是不是在某个点的范围内
selected = dtoOfTouch(x,y);
if(selected != null) {
//判断这个点是不是第一个点
if(lastSelectDot == null){
//第一个点
selected.setVisibility(View.VISIBLE);
//记录
lastSelectDot = selected;
//将tag值拼接到密码中
password.append(selected.getTag());
//将点亮的点添加到这个数组中
selectedList.add(selected);
}else{
//不是第一个点
//获取上一个点和当前点的tag组成的线的tag值
int LTag = (Integer) lastSelectDot.getTag();
int CTag = (Integer) selected.getTag();
//获取两个线的tag值 small * 10 + big
int LineTag = LTag > CTag ? CTag * 10 +LTag : LTag * 10 + CTag;
//判断这条线是否存在
if(LineTagsList.contains(LineTag)){
//线存在
//点亮点 点亮线
selected.setVisibility(View.VISIBLE);
//将tag值拼接到密码中
password.append(selected.getTag());
//点亮这条线
//获取容器对象
RelativeLayout rl = findViewById(R.id.root_layout);
//通过tag查找子控件
ImageView iv = rl.findViewWithTag(LineTag);
//点亮线
iv.setVisibility(View.VISIBLE);
//将点亮的点添加到这个数组中
selectedList.add(selected);
//将点亮的线添加到这个数组中
selectedList.add(iv);
}
}
}
break;
(3)ACTION_UP离开,离开里面需要将move里面获取绘制的图案保存,保存也是通过记录划过点的tag值进行拼接保存。
case MotionEvent.ACTION_UP:
//离开
// 1、绘制密码 和原始密码比较
// 2、设置密码 第一次
// 3、设置密码 第二次
if(orgPassword != null){
//有密码了 判断是否和原始密码相同
if(password.toString().equals(orgPassword)){
alertTextView.setText("解锁成功");
}else {
alertTextView.setText("解锁密码失败");
}
}else {
//设置密码
//判断是第一次还是第二次确认密码
if(firstPassword == null){
//设置密码的第一次
firstPassword = password.toString();
//提示确认密码
alertTextView.setText("请确认密码图案");
}else {
//第二次确认密码
//判断两次是否一致
if(firstPassword.equals(password.toString())){
//设置成功
alertTextView.setText("设置密码成功");
//保存密码
SharedPreferences sp = getSharedPreferences("passwrod",MODE_PRIVATE);
SharedPreferences.Editor editor = sp.edit();
editor.putString("pwd",firstPassword);
editor.commit();
}else {
//设置失败
alertTextView.setText("两次密码不一致,请重新设置");
firstPassword = null;
}
}
}
clean();
另外,还需要写clean方法对所选的图案进行清空,以及dtoOfTouch方法来判断触摸点是否在控件内部
clean方法
//清空
public void clean(){
password.setLength(0);
//隐藏所有选中发的视图 点 线
for(ImageView iv : selectedList){
iv.setVisibility(View.INVISIBLE);
}
//清空数组
selectedList.clear();
}
dtoOfTouch 方法
//写一个方法用于处理判断触摸点是否在某个控件内部
public ImageView dtoOfTouch(float x ,float y){
//遍历数组
for (ImageView dot : dotsList){
//获取这个dot相对于屏幕的x和y
int[] loc = new int[2];
dot.getLocationOnScreen(loc);
int dx = loc[0];
int dy = loc[1];
//获取右边的偏移量
int r = dx + dot.getWidth();
//获取最底部的偏移量
int b = dy + dot.getHeight();
//判断这个控件是否在这个范围内
if(( x <= r && x>= dx ) && (y <= b && y >=dy)){
return dot;
}
}
return null;
}
PS
学习了tag值得相关使用,但是还是不太懂tag值得用法,只清楚tag在代码中起什么作用,清楚了如何让控件切换到屏幕的坐标系。
android开发图案解锁,Android开发中图案解锁完整版相关推荐
- 贡献30本经典Linux学习和开发教程和资料,都是pdf完整版的
贡献30本经典Linux学习和开发教程和资料,都是pdf完整版的 |字号 订阅 完全免费下载:无需注册也无需积分 pdf版经典Linux学习教程资料列表: 电子书 下载链接 ...
- 计算机在材料表征方面的应用,计算机在材料科学中的应用---完整版
计算机在材料科学中的应用---完整版 计算机在材料科学中的应用 1 材料:是人类生产和生活水平提高的物质基础,是人类文明的重要支柱和进步的里程碑. 20世纪下半叶形成的以新材料技术为基础:信息技术.新 ...
- 材料科学计算机科学,计算机在材料科学中的应用---完整版.doc
计算机在材料科学中的应用---完整版.doc PAGE PAGE 17 计算机在材料科学中的应用1 材料:是人类生产和生活水平提高的物质基础,是人类文明的重要支柱和进步的里程碑.20世纪下半叶形成的以 ...
- python微服务开发pdf_《微服务设计》中文完整版PDF电子书下载
版权声明 1. 本站文章和资源均来自互联网收集和整理,本站不承担任何责任及版权问题. 2. 相关版权归作者及其公司所有,仅供学习研究用途,请勿用于商业目的. 3. 请于下载后24小时内删除,如果喜欢此 ...
- c语言编程图案大全,C语言中图案的编程
用星号打印各种图形及参考答案 [4.4]输入n值,输出如图所示矩形. [4.5]输入n值,输出如图所示平行四边形. #include void main( ) { int i,j,n; printf( ...
- Android版哆啦A梦连连看游戏源码完整版
本代码主本人编写,没版权问题,另有其他少量小游戏和应用源码稍后会陆续上线!哆啦A梦连连看包括了2种游戏模式和60关卡,并可以通过修改配置文件很方便的实现自行增加新关卡.采用andengine游戏引擎开 ...
- 微信公众号开发:获取openId和用户信息(完整版)
注:之前总结怎么进行本地公众号开发调试,时间一长忘记开发配置却忘了,所以这里记录一下公众号开发配置,方便快速上手. 目录 开发前服务器配置 网页授权获取用户基本信息 snsapi_base snsap ...
- vue3中使用swiper完整版教程
介绍 在 vue3 中使用 swiper, 实现轮播图的效果:如果组件样式等模块引入不当,很有可能导致,页面无效果:或者想要的箭头或者切换效果异常问题.具体使用方式如下所示: 使用方式 使用命令 np ...
- 计算机软件在矿井地质中的应用,(完整版)遥感导论知识点整理(梅安新版)
遥感导论知识点整理 [题型] 一.选择题 二.填空题 三.名词解释 四.简答题 五.论述题 注意:标注页码的地方比较难理解,希望大家多看看书,看看ppt.[第一章]绪论 1.[名]遥感(remote ...
- 30本pdf完整版的经典Linux学习和开发教程和资料下载 android arm java 资料大全
史上最牛的Linux内核学习方法论 点击下载 我的arm_linux移植笔记 点击下载 S3C2440完全开发流程 点击下载 Linux系统命令及其使用详解完整版 点击下载 Linux ...
最新文章
- Crunch Bang(linux)安装Webstorm上手
- 通过Clocking Wizard定制和生成一个IP核(MMCM)(Virtex7)(ISE版)
- visual c++ 6.0原版_C/C++编程笔记:C语言函数指针的理解与使用,就是这么简单明了!...
- 【Python-ML】神经网络-多层感知器
- 年结 利润分配-未分配利润年结
- [转]序列化悍将Protobuf-Net,入门动手实录
- jquery jstree 插件的使用
- go nil json.marshal 完是null_字节跳动踩坑记#3:Go服务灵异panic
- Python 字典或JSON模拟数据库的增删改查
- C语言小游戏,笑傲江湖之鸿蒙
- 【Keil变量定义】定义extern类型变量
- 【思想总结】关于最近思想滑坡的反省
- vue实现抽奖大转盘
- 键盘输入圆的半径求圆的周长和面积
- 子网与超网的含义和区别
- Android面试题总结(三)
- seneca mysql_seneca-entity的mysql插件自增主键
- python编写代码实现文件的拷贝功能_python从一个文件夹自动拷贝文件到目标文件夹的代码...
- 计算机考试准考证尺寸标准
- android app 素材下载地址,素材空间app下载-素材空间 安卓版v3.4.7-PC6安卓网