- 配置Android环境,本来是想用
IDEA
做的,但是最新的IDEA
好像不太配套,在官网上好像Android
的AVD
在2010就没有再更新了 - 所以选择的编译环境是
Android studio
- 配置
Android studio
的环境倒是没什么,只要别放C盘就行 - 唯一要注意的就是
AVD
的安装位置是没有选择的,只能再安装完成之后进行修改,一般默认是在 Android Studio默认的AVD路径是在C:\Users\用户名.android\avd下 - 用户名不能是中文,否则运行虚拟机的时候会报 The emulator process for AVD Nexus_4_API_22 has terminated.的错误
- 创建仓库
- 了解Android知识
- 完成Android的基础理论的学习
- 了解项目的开发流程,准备开始对项目进行代码实现
- 先对用户界面进行编写,后续完成操作界面的实现z
- 初步确定进行单手主辅的程序编写
- 暂时先将单手辅助模式作为主活动进行测试,其实主活动应该是启动界面,这个后续再调整
- 测试
Android
的屏幕坐标系,检查获取的屏幕坐标是否正确 - 在实机上进行测试,主要是测试坐标位置是否合理
- 开始进行触屏操作的代码编写
- 对三个环的位置进行调整,在屏幕上显示合理
- 对是否闭环的条件要重新考虑,如果只是单纯的考虑点之间的坐标问题,难免会出现巧合,因为刚出发的时候也是误差最小的时候,这个整体的逻辑得好好考虑一下
- 完成单手主辅绘制界面的编写,解决程序在AVD上 keeping stop的错误
- 在终端上无法显示输出值 ---> 这里要么使用
System.out.println()
或者使用loge()
在 logcat 中查看,总算解决这一问题 - 画线界面和图形显示界面存在冲突,图形显示界面会将画线界面覆盖 ---> 原因是 paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));,这个会导致取两层绘制交集,显示上层,所以线条不会显示,直接注释掉就好了
- 确定圆环与屏幕是在同一坐标系,检查数学逻辑
- 解决对圆环的判定问题
- 优化画线的精确度,解决断触的问题
- 实现三个圆环依次出现
- 开始着手实现菜单的设计,估计要对Android的多点触摸机制进行了解
- 首先会记录一下画线的初始位置
- 由于选择的是与出初始点的相对位置作为是否是闭环的判断条件,而最初画线的时候肯定是满足条件的(是一个由小到大的过程)
- 所以附加了一个判断条件 ---> 画过半圆
- 把画圆的坐标换为参数后无法显示的问题 ---> 在获取到屏幕的大小后进行赋值
- 第三个环在闭环后不显示的问题 ---> 只考虑到
x
轴的差值问题,没有考虑到y
轴的差值,考虑到可能会在不同位置开始,将判断条件改为求两点之间的距离,而不单纯的只以坐标为判断依据
- 实现双指触发菜单(多指触发的机制)
- 实现对双指的监听
* 当我们一个手指触摸屏幕 ——> 触发ACTION_DOWN事件
* 接着有另一个手指也触摸屏幕 ——> 触发ACTION_POINTER_DOWN事件,如果还* 有其他手指触摸,继续触发
* 有一个手指离开屏幕 ——> 触发ACTION_POINTER_UP事件,继续有手指离开,继续触发
* 当最后一个手指离开屏幕 ——> 触发ACTION_UP事件
* 而且在整个过程中,ACTION_MOVE事件会一直不停地被触发
-
在双指进行操作时,第一根手指的
id为0
,再按下第二根手指时id为1
,而当释放第一根手指,再按下时,会出现直接将两个点连成一条线 ---> 因为第一根手指释放再按下id还是0
,还是会触发画线的函数,所以对当前屏幕的手指数也作为判断条件 -
当第二根手指进入时,会出现
Move
事件并没有响应 ---> 因为后台还一直在处理第一根手指的事件序列
- 尝试实现对第二根手指的检测,能够检测到该手指的移动,这是实现菜单选择的关键
- 第二根手指的移动始终不能获得
- 继续测试第二根手指的焦点,这个困扰属实是有点久,还是没有什么好多解决办法
- 实现菜单触发。开始编写菜单界面(一级展示菜单)
- 对一级菜单进行划分,完成菜单提示文字的位置排版
- 完成一级菜单的选择高亮显示,主要确定可以实现的范围
- 对第二根手指的识别问题 ---> 突然想到可以直接获得这第二根手指的位置,因为两根手指在移动的时候,虽然焦点一直在第一根手指上,但是做菜单触发的时候它还是会移动,所以可以通过这个现象来实时更新第二根手指的位置,实现菜单触发,问题总算解决了
- 一级菜单的显示问题
- 解决一级菜单的显示问题
- 实现菜单根据选择进行高亮,主要还是注意每一个画布之间的逻辑关系,其实一级菜单不用展开,但这个功能用来测试也不错,反正二级菜单也要用到高亮
- 正常的应该是一级菜单打开二级菜单,然后二级菜单根据手指区域高亮
- 解决异常退出的问题
- 一级菜单与二级菜单兼容
- 二级菜单的一些坐标位置还有待计算
- 绘制一次后异常退出 ---> 数组下标越界
- 建立二级菜单高亮的坐标
- 完成二级颜色菜单的高亮显示
- 开始实现颜色菜单的选择
- 二级菜单高亮显示位置不一致 ---> 坐标系建立错误
- 选择颜色后,所有的线都成为切换后的颜色 ---> 这个就是每次画线的时候直接将之前存下的点,按当前颜色重新再绘制
- 解决选择颜色后会将之前的线条一起覆盖的问题,对于这个问题还是采用之前项目的方法,但在这里应该是设置一个
Path
类 - 顺利完成颜色选择问题
- 开始编写像素的二级菜单展开问题以及选择显示问题
- 完成像素二级菜单的区域划分
- 当二级菜单未展开,但在满足二级菜单选择的范围内,依然还是会选择颜色 ---> 附加一个判断
- 像素二级菜单的展示和选择
- 解决画笔颜色不一致问题
- 暂时先完成这些,后面应该还是会有一些调整,等待后续调制
- 确定动态
- 菜单之间的选择和切换还是存在逻辑问题,偶尔会出现令人意外的效果
- 颜色切换和像素切换不同步 ---> 记录下当前的颜色和像素,在合适的位置给下一个路径进行赋值
- 因为每个模式都会用到环的显示所以将环的显示独立出来
- 环的显示出现问题,无法正常实现逻辑功能 ---> 对逻辑进行层层测试,原因是对在圆内的逻辑判断没有正常执行,主要还是参数错误
- 后续还有两种以上的模式,所以再添加一个菜单选择的主页面
- 设置
Intent
实现两个活动之间的穿梭 - 设置每个按钮的位置,解决覆盖问题
- 初始界面现在只是简单设置一下,暂时以实现功能为主,后续时间允许的条件下可以进行微调
- 设置每个活动的标题
- 按钮出现覆盖问题,且修改坐标无法生效
- 标题覆盖问题
- 完成单手动态模式的环显示
- View的分别显示问题 ---> 在最初的响应界面无法按菜单按钮进行正确响应,这个问题还是有点困惑
- 继续解决 View 响应问题,这个问题依旧还是关键要克服的技术问题
- View 界面的响应问题需要在 layout 中设置所需要使用的具体 View ,如果没有设置,会产生一个默认的界面,无法进行自定义
- 对单手主辅模式的菜单位置进行调整
- 开始编写单手动态模式界面,这个界面和单手主辅的模式的区别就是菜单的选择和显示,该模式下的菜单位置是固定的
- 设计一级菜单的显示,一级菜单依旧分为颜色一级菜单和像素一级菜单
- 对整体菜单的响应逻辑进行探究
- 二级菜单的设置以及显示问题,先进行显示测试,后续进行触发安排
- 设置二级菜单的位置和排版,二级菜单的编写完成
- 本来想编写二级菜单的高亮显示,菜单的响应过程比较复杂,放到后面再去编写,但是发现二级菜单的高亮显示需要在菜单响应后才能进行测试,所以还是得先写菜单的响应,这个过程可能很复杂,估计会花掉大部分时间
- 菜单的响应是一个复杂的过程,因为这包含了两个手指的独立操作,每一个手指都能控制菜单
- 第二根手指控制的一级菜单跳转无法正常执行 ---> 逻辑错误
- 继续完成单手动态模式的菜单切换功能
- 完成菜单的对手指位置的检测
- 开始编写二级菜单的选择高亮
- 完成抬手对菜单的选中和切换,并能完成颜色和像素的赋值
- 颜色二级菜单不能正常显示 ---> 注意画笔清除和绘制的顺序,应该是先清除再绘制,不要颠倒顺序
- 二级菜单在抬手后不能正常收回 ---> 之前记录的手指位置信息没有清除,导致每次检测都能通过
- 二级菜单高亮异常 ---> 注意每个组件的产生顺序以及撤销的过程
- 二级菜单移动选择时多处高亮,主要问题还是出现在像素的切换上面 ---> 每次绘制都将二级菜单再绘制一次(其实也就是将以前的覆盖一下),不这样也行,这只是一个特定的触发效果
- 对已经开发的项目进行测试
- 对需要调整的内容进行总结
单手主辅模式:
(1)高亮区域由加粗显示改为扇形显示,颜色为绿色,扇形区域占整体部分的一半
(2)调整呼出菜单的大小,目前测试结果发现菜单有点大
(3)调整菜单的提示字体大小
---
区域映射模式(原单手动态模式):
(1)将菜单调整到左上角显示(原来的位置是在中间位置)
(2)当进行菜单选择,设置一个矩形提示光标
(3)菜单选择提示栏高亮显示为绿色
(4)调整菜单栏的粗细
(5)调整手指移动的距离和目标移动距离比
---
通用修改:
(1)加入切换提示功能,提示用户目标颜色和目标像素
(2)在界面右小角增加一个返回主页面的按钮
(3)暂时确定需要记录的数据(这个先放在最后写)
- 对于位置和大小问题需要在大屏上进行修改,所以相关调整放在最后进行
- 完成菜单的高亮显示
- 完成菜单大小的调整 ---> 调整为原来的
2 / 3
- 对菜单位置以及菜单像素的大小进行调整
- 修改菜单高亮的显示效果
- 高亮位置异常 ---> 坐标设置错误
- 菜单高亮没有对一级颜色和像素菜单进行覆盖,猜测是绘制优先级的问题
- 在区域映射模式中添加矩形提示光标
- 将映射比例设为
1:3
,具体还得以测试为准、 - 添加返回按钮,暂时将按钮位置放在右上角,并添加按钮监听
- 没有双击也能触发菜单切换问题 ---> 添加一个对双击状态的检测
- 在测试界面添加切换提示界面
- 完成提示文字部署
- 将部署到相关坐标放在一个类中,方便后续的坐标调整
- 设置随机类,将不同颜色和像素组合出现
- 切换成变量后出现部分位置错位的情况 ---> 设置的比例错误
- 对测试获得的数据进行导出测试
android
的文件存储与之前写过的代码还是有差异,这个估计会花费比我预想还要长的时间- 文件保存功能完成,后面继续提示模块的开发工作
- 文件无法实现存储 ---> 需要写入完整路径,在代码中加入
app
的存储权限,并在设备上开启权限
- 实现切换提示信息的随机出现
- 完成单手主辅模式中的像素和颜色提示模块
- 实现当前颜色随着菜单切换进行相应的转换
- 对区域映射技术进行同样的功能部署
- 调整区域映射模式的一级菜单位置(菜单长度进行下调)
- 颜色位置显示错误
- 当前像素显示与菜单切换不一致 ---> 初始的菜单判断逻辑存在问题,像素中级位置缺少约束
- 进行测试,检验
Bug
- 估计界面显示进行位置调整
- 添加传统模式进行对照
- 记录的实验数据待定,目前以实现文件存储
- 在主界面添加传统模式选择按钮
- 将主菜单的响应与传统绘制界面链接
- 设置界面布局
- 感觉返回按钮有点问题,到时候再调整一下
- 传统模式菜单的样式和绘制模块编写完成
- 剩下就是对选择菜单逻辑的编写
- 在主菜单点击传统按钮跳转失败 ---> 只能从当前活动跳向另一个活动
- 继续设计传统模式的设计,主要是实现菜单的响应和切换
- 返回按钮暂时还没有写
- 二级菜单的响应 定义为点击菜单位置触发(其实对于式点击触发还是抬起触发都是可以实现的,但是大部分还是抬起触发,所以在这里设置为抬起触发)
- 将菜单区域(包括二级菜单区域)的设置为画笔 真空区域(画笔不显示)
- 菜单选择逻辑存在问题以及切换后绘制出现失灵的情况
- 完善菜单选择逻辑
- 解决菜单切换错误和线条绘制的bug
- 线条的绘制感觉有点不太灵敏
- 完成像素切换的功能
- 对返回键进行调整(之前只是从当前页面跳转到主页面),现在是实现了返回效果
- 切换颜色导致之前绘制的线条全部变色(这个问题之前已经解决过,再次出现估计是存在逻辑问题)且无法再次切换颜色 ---> 调整产生新对象的位置
- 线条绘制错误 ---> 新产生的对象添加位置存在错误
- 颜色切换一直是红色 ---> 判断内的要素过多,导致判断逻辑错误
- 线条绘制失灵问题 ---> 布尔变量赋值失灵,将对点击位置的判断放在对移动的判断,将布尔变量移除
- 开始进行文件保存测试,文件保存的数据暂时为:
1.测试姓名:
2.实验组数;进行总的几次
3.实验组编号:在进行当前组的第几次测试
4.模式切换技术:
5.目标颜色:
6.目标像素:
7.误触发总数:
8.颜色切换错误数:
9.像素切换错误数:
10.模式切换总错误数:
- 先实现 ** 5、6、7、8、9、10 ** 前面的需要在主菜单进行布置,暂时放在后面进行实现
- 继续完成数据记录的工作,现在暂时先在传统模式上进行测试
- 进行主界面的样式再设计,需要在之前的基础上进行
用户名
和实验组数
,用户名
由输入框进行输入,实验组数
设计为选择栏,顺便对主界面样式进行一些调整 - 将获取实验组数的方式改为输入,因为
Android
的复选菜单不太适用,这个先暂时这样,待讨论 - 对菜单样式的排版进行重新选择,在布局过程中,现有的样式出现排版不美观的情况
- 菜单样式调整达不到预期要求
- 在传统模式下进行数据记录部署,进行数据存储检测
- 将一次实验的结束条件设置为第三个环绘制完成
- 测试完成后的初始化模块(将界面还原为最初的样子)
- 在进行测试的时候,当第三个圆环绘制完成后,直接退出到主界面,而不是按逻辑初始化 ---> 清空画笔的操作有问题,清空之后进行对象添加
- 完成一次绘制后,无法再次触发环的操作 ---> 对圆环的判断状态进行更新
- 初始化后,会出现一条直线从菜单处与最后一次绘制的位置相连 ---> 附加一个反应当前状态的变量
- 没有在绘制完成后立即清除画笔 ---> 在初始化时进行画布清除
- 更新当前像素失败 ---> 对菜单状态进行更新
- 解决界面跟新出现的遗留问题
- 开始进行界面输入的数据记录(之前尝试了一下,但是没有达到预期效果)
- 将主界面的值传入到文件中是个问题
- 继续完成从主界面的数据获取程序
- 测试者姓名正常传入,但是在存储过程中却是一个
空字符
---> 用户名的存储位置错误,同时还要注意activity
和View
的响应顺序
- 系统调整修改
1.将组数选中定为选择菜单 ---> 已完成
2.传统模式的一级菜单左右宽度减少 1 / 3 ---> 已完成 由最初的 1 / 3 改为 1 / 2
3.单手主辅模式的菜单字体需要调整 ---> 已完成
4.单手动态模式的一级菜单也需要减少1/3,与传统模式保持一致 ---> y
- 数据记录新增
时间记录:
* 三个画圈时间:手触摸的第一个圆环到第二个圆环出现的时间
* 模式切换时间:
传统模式:手画完圆抬起手到选中切换目标
单手主辅:从双击开始到选中目标
单手动态:从双击到选中目标
* 整个操作时间:整个屏幕上第一次触摸到最后抬手的时间
- 待修改 bug
在传统模式中一开始选择像素再画就会默认为4px ---> 已完成
- 对主界面的组数选择进行修改,将最初的输入改为下拉菜单
- 调整传统模式下的菜单宽度,调整为 ** 1 / 2 **,对一级菜单的位置也需要进行响应的调整
- 修改在传统界面出现的 Bug
- 对提示的像素进行修改
- 对传统界面的选择逻辑进行修改
- 修改后的传统模式在选择完像素后无法继续进行绘制 ---> boolean 变量没有更新
- 完成进行完当前组数退回到主界面
- 将数据改为单次记录
- 在传统界面中增加对时间数据的记录
- 误触发的记录逻辑存在错误(手指按下时会一直增加次数)---> 当手指一直按下时,会对
up
一直检测,所以统一放在对手指down
的检测中
- 完成传统模式中相关时间数据的采集部署
- 考虑是不是该将初始化的代码段优化一下
- 新增对时间数据记录的相关控制变量,用于准确记录时间,以及约束记录
- 所有的数据记录在传统模式上部署完成,完成测试
- 优化完成测试后的初始化
- 开始对剩下两个模式进行代码更新
- 完成对单手主辅模式的菜单调整 ---> 取消粗体显示,调整字体大小,对字体位置进行调整
- 对单手主辅模式添加数据记录的代码
- 感觉误触发的定义还需要修改,这部分讨论后在进行编写
- 对误触发模式的新的判定
误触发是在提示菜单未出现时进行判定,最初在传统模式下是通过对选择菜单的检测来进行判断(选择颜色时会进行第二个环是否出现的检测,选择像素时会出现第三个环是否出现的检测),可是这样会出现一个问题,就是当第三个环还未出现时,如果此时误触发了颜色菜单,按之前的判断就不是误触发了
所以对误触发进行一个新的布尔变量约束,当第二个环或第三个环出现时,允许切换,除此之外的切换均为误触发
- 完成在单手主辅模式下的颜色和像素切换时间记录
- 对单手动态模式的菜单进行调整
- 对单手动态模式添加数据记录的代码模块
- 对单手动态模式的文字位置进行调整
- 在正常操作情况下,颜色切换时间和像素切换时间显示为负值 ---> 在双击的过程中会出现多次抬起的情况,将一级菜单是否显示作为判断条件
- 误触发记录异常 ---> 是对每次误触发布尔变量的初始化出现问题,主要原因还是双击动作会触发两次抬指
- 像素切换时间数据错误 ---> 像素切换的开始时间记录错误
- 新增单手双手选择菜单
- 对主菜单选择的模式名字进行修改
- 对颜色和像素的提示位置进行调整
- 对每个环的位置进行调整
- 对菜单的初始化进行调整
- 修改单手动态模式和传统模式的一级菜单字体
- 对单手动态的二级菜单选择进行修改,当下滑至最低位置时,将原来的收起菜单改为保存显示菜单,并高亮最后的颜色或像素
- 新增练习模式
- 修改进行一组以上时,记录倒叙的情况
- 修改像素错误记录异常情况
- 当绘制完最后一个环的时候会出现多余的线条 ---> 修改任务结束的条件,改为绘制完成之后的抬手
- 单手动态模式数据无法保存
- 在数据记录中记录实际切换的结果
- 修改主菜单的下拉菜单的名称
- 将绘制图形的三个环形改为 环形 三角形 正方形
重新设计进入图形的逻辑和数学判断
重新设计每个图形的大小
重新设计新图形的在绘制区域的检测
对三角形大小和位置进行微调
对正方形的大小进行微调
思考对是否进入图形的数学判断
- 修改主辅选择模式的菜单高亮
- 完成对三角形和正方形的在图形内的数学逻辑判断,具体内容参考单手动态图片
- 对数学方程进行调整
- 通过测试将最终代码部署到另外两个模式
- 对两点距离的判断进行修改
- 在图形内的判断的设计花费了大量时间,主要是对三角形内的判断,其逻辑设计花费较多时间
- 在第二个图形出现时,当最初没有在图形内绘制,然后再在图形内绘制时无法触发下一个图形的显示 ---> 三角形的判断逻辑有问题,区域限制方程存在问题,导致在图形外绘制时会判定在图形内
- 对主菜单的按钮名称进行修改