如何正确确定用户是使用时间顺时针还是逆时针拖动我的圆轮滑块?
How do I properly determine if user is dragging my circle wheel slider Clockwise or Counter Clockwise using time?
我有一个形状像时钟的自定义视图。我有一个滑块图像,用户可以使用它来逆时针 (CCW) 或顺时针 (CW) 滑动,这样他们就可以 select 时间。我的自定义视图 returns 是 time
数据类型 String
的 H:mm aa
格式。例如:1:34 AM
。
我目前能够确定 CW 或 CCW 检测,但它不是完整的证据,因为当用户滑过 12:00 AM 点时会出现问题。
我当前确定 CW 或 CCW 运动的逻辑是:
- 将
time
转换为军事时间,以便我可以将其存储为 Date
对象,称为 mDate
。
- 检查最后一个
timeToMil
是否小于当前 mDate.getTime()
。如果小于,我假设它是 CW,否则它是 CCW。
- 将自 1970 年 1 月 1 日以来的当前毫秒数存储到变量
timeToMil
中,以便下一次迭代可以确定最后一个点是在时间上向前移动还是向后移动。
但问题是如果用户上次是 11:00 下午并将滑块移动到 1:00AM。按照 #2 逻辑,这将检测到它是不正确的 CCW。
if (timeToMil < mDate.getTime()) {
cw = true;
} else {
cw = false;
}
我想知道是否有比这更好的方法?我关注它的时间太长了,以至于我认为它不再有用了,看到一些外部观点会有所帮助。
我正在考虑将所有分钟转换为某种弧度,但我不确定这种努力是否可行。
编辑:
添加照片:
灰色圆圈是用户可以沿红线顺时针或逆时针拖动的图像。向左滑动为CCW,向右滑动为CW
h - 小时 [1,12]
m - 分钟 [0,59]
720 = 12*60 - 时针整圈的分钟数
halfOfCircle = 360 = 720/2 - 时针 half-circle 的分钟
timePrev = timeNext
timeNext = (h%12)*60+m
if (abs(timePrev-timeNext)<halfOfCircle){
if (timePrev<timeNext){
return "CW"
} else {
return "CCW"
}
} else {
if (timeNext<halfOfCircle){
return "CW"
} else {
return "CCW"
}
}
我有一个形状像时钟的自定义视图。我有一个滑块图像,用户可以使用它来逆时针 (CCW) 或顺时针 (CW) 滑动,这样他们就可以 select 时间。我的自定义视图 returns 是 time
数据类型 String
的 H:mm aa
格式。例如:1:34 AM
。
我目前能够确定 CW 或 CCW 检测,但它不是完整的证据,因为当用户滑过 12:00 AM 点时会出现问题。
我当前确定 CW 或 CCW 运动的逻辑是:
- 将
time
转换为军事时间,以便我可以将其存储为Date
对象,称为mDate
。 - 检查最后一个
timeToMil
是否小于当前mDate.getTime()
。如果小于,我假设它是 CW,否则它是 CCW。 - 将自 1970 年 1 月 1 日以来的当前毫秒数存储到变量
timeToMil
中,以便下一次迭代可以确定最后一个点是在时间上向前移动还是向后移动。
但问题是如果用户上次是 11:00 下午并将滑块移动到 1:00AM。按照 #2 逻辑,这将检测到它是不正确的 CCW。
if (timeToMil < mDate.getTime()) {
cw = true;
} else {
cw = false;
}
我想知道是否有比这更好的方法?我关注它的时间太长了,以至于我认为它不再有用了,看到一些外部观点会有所帮助。
我正在考虑将所有分钟转换为某种弧度,但我不确定这种努力是否可行。
编辑: 添加照片:
灰色圆圈是用户可以沿红线顺时针或逆时针拖动的图像。向左滑动为CCW,向右滑动为CW
h - 小时 [1,12] m - 分钟 [0,59]
720 = 12*60 - 时针整圈的分钟数
halfOfCircle = 360 = 720/2 - 时针 half-circle 的分钟
timePrev = timeNext
timeNext = (h%12)*60+m
if (abs(timePrev-timeNext)<halfOfCircle){
if (timePrev<timeNext){
return "CW"
} else {
return "CCW"
}
} else {
if (timeNext<halfOfCircle){
return "CW"
} else {
return "CCW"
}
}