Android_模拟时钟内时针、分针触摸转动

  次阅读 作者:智能小宝 来源:互联网 2015-09-29 10:38 我要评论(0)

最近实现了android里的一个机能,在activity里面画了一个模拟的时针,然后触摸上面的时针跟分针可以实现调时间的功能。

其实,说起原来来还是挺简单的,但是我花了将近一周的时间才全部实现,有点惭愧。。。

一、在activity里面画一个时钟,有时针跟分针,代码略。

表盘、时针和分针都是imageView,创建一个位图,然后上面盖了分针的imageView,位图旋转一定的角度,这个时候显示的就是时针的角度。

二、给分针添加onTouch事件:

由于imageView是一层盖着一层的,所以我的代码里是分针的imageView在最上面,所以我的触摸事件就全部写在分针上;

基本原理:当我的手指触摸到mImageView_minuteHand的时候,会有个点坐标,根据点的坐标来判断我点的位置,下图是模拟的时钟界面:

我把时钟分为四个象限,0-15分钟为第一象限,15-30分钟为第二象限,30-45分钟为第三象限,45-60分钟为第四象限,分这四块主要是为了下面的计算角度准备的。

0分的时候为0度,以o点为中心,这样一来我手在圆盘里点到某个位置的时候,连接圆心就有一条直线,圆心与0分连接也有一条直线,就可以计算两条直线的夹角了,但是由于圆心与0分连接的直线斜率不存在,所以我用圆心与15分的连线代替,图中红线所示。

计算两条直线的夹角代码:

[java]

double k1 = (double)(startY - centerY)/(startX - centerX);

double k2 = (double)(endY - centerY)/(endX - centerX);

double tmpDegree = Math.atan((Math.abs(k1 - k2))/(1 + k1*k2)) / Math.PI * 180 ;

double k1 = (double)(startY - centerY)/(startX - centerX);

double k2 = (double)(endY - centerY)/(endX - centerX);

double tmpDegree = Math.atan((Math.abs(k1 - k2))/(1 + k1*k2)) / Math.PI * 180 ;startX与startY为图中的15分所在点,centerX与centerY为图中的中心点o点,endX与endY就是我手指所点的点,接下来就是计算我手指所在的点与圆心的连线和0度的夹角:

[java]

if(endY < width/2 && endX > width/2){ //位于第一象限

firstTouchDegree = 90 - tmpDegree;

System.out.println("firstTouchDegree<90..."+ firstTouchDegree);

}else if (endY > width/2 && endX > width/2 ) { //位于第二象限

firstTouchDegree = 90 + tmpDegree;

System.out.println("firstTouchDegree90-180..."+ firstTouchDegree);

}else if (endY > width/2 && endX < width/2 ) { //位于第三象限

firstTouchDegree = 270 - tmpDegree;

System.out.println("firstTouchDegree180-270..."+ firstTouchDegree);

}else if (endX < width/2 && endY < width/2) { //位于第四象限

firstTouchDegree = 180 + 90 + tmpDegree;

System.out.println("firstTouchDegree>270..."+ firstTouchDegree);

}else if (endX == width/2 && endY < width/2) {//位于0分位置

firstTouchDegree = 0.0;

}else if (endX == width/2 && endY > width/2) { //位于30分位置

firstTouchDegree = 180.0;

}

if(endY < width/2 && endX > width/2){ //位于第一象限

firstTouchDegree = 90 - tmpDegree;

System.out.println("firstTouchDegree<90..."+ firstTouchDegree);

}else if (endY > width/2 && endX > width/2 ) { //位于第二象限

本站文章信息来源于网络以及网友投稿,本站只负责对文章进行整理、排版、编辑,是出于传递更多信息之目的,并不意味着赞同其观点或证实其内容的真实性。如果您有什么意见或建议,请联系QQ28-1688-302!

人工智能实验室
相关文章相关文章
  • 韩春雨称已能重复实验结果 近期将有消息公布

    韩春雨称已能重复实验结果 近期将有消息公布

  • 英国研发“杀生”机器人 通过生命体获取能量

    英国研发“杀生”机器人 通过生命体获取能量

  • 无人驾驶汽车如何改变城市生活?听听他们怎么说

    无人驾驶汽车如何改变城市生活?听听他们怎么说

  • 未来两年人工智能要怎么走?看这篇就够了

    未来两年人工智能要怎么走?看这篇就够了

网友点评网友点评
阅读推荐阅读推荐

据国外媒体报道,在过去两年内,聊天机器人(chatbot)、人工智能以及机器学习的研发和采用取得了巨大进展。许多初创公司正利用人工智能和...

霍金 视觉中国 图 英国著名物理学家霍金(Stephen Hawking)再次就人工智能(AI)发声,他认为:对于人类来说,强大AI的出现可能是最美妙的...

文|郑娟娟 今年,人工智能(AI) 60岁了。在AI60岁的时候,笔者想要介绍一下AI100,一个刚刚2岁的研究项目,但它的预设寿命是100年,甚至更长...

AlphaGo与李世石的人机大战,为大众迅速普及了人工智能的概念。 但对谷歌而言,除了下围棋,现在的人工智能进展到哪一步了?未来,人工智能...