如何正确确定用户是使用时间顺时针还是逆时针拖动我的圆形滚轮滑块?

时间:2019-05-07 19:02:11

标签: java android computational-geometry

我有一个形状像时钟的自定义视图。我有一个滑块图像,用户可以使用它来逆时针(CCW)或顺时针(CW)在时钟上滑动,以便他们可以选择时间。我的自定义视图向我返回了time格式的String数据类型H:mm aa。例如:1:34 AM

我目前能够确定CW或CCW检测,但不能完全证明,因为当用户滑过12:00 AM点时存在问题。

我目前用于确定CW或CCW运动的逻辑是:

  1. time转换为军事时间,这样我就可以将其存储为Date的{​​{1}}对象。
  2. 检查最后一个mDate是否小于当前的timeToMil。如果小于,则假定为CW,否则为CCW。
  3. 将自1970年1月1日起的当前毫秒数存储到变量mDate.getTime()中,以便下一次迭代可以确定最后一点是在时间上向前还是向后移动。

问题是,例如,如果用户上次是11:00 PM,并将滑块移至1:00 AM。使用#2逻辑,这将检测到它是CCW,这是不正确的。

timeToMil

我想知道是否有比这更好的方法?我一直在研究它太久了,以至于我认为它不再具有生产力了,这将有助于看到一些外部观点。

我当时正在考虑将所有分钟转换为某种弧度,但是我不确定这种努力是否可行。

编辑: 添加照片:

enter image description here

灰色圆圈是用户可以沿红线顺时针或逆时针拖动的图像。向左滑动是CCW,向右滑动是CW

1 个答案:

答案 0 :(得分:0)

h-小时[1,12] m-分钟[0,59]

720 = 12 * 60-时针整圈的分钟数

halfOfCircle = 360 = 720/2-时针半圈的分钟数

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"
    }
}