安卓自訂View實現鐘錶,安卓view鐘錶

來源:互聯網
上載者:User

安卓自訂View實現鐘錶,安卓view鐘錶

    轉載請註明出處:http://blog.csdn.net/baiyuliang2013/article/details/45535227

       之前實現過html5版的鐘錶,html5也有一個畫板屬性Canvas,相對於安卓的Canvas來說html5的功能要強大的多,就拿鐘錶的實現,html5要方便簡單的多,而安卓實現起來則非常複雜,像指標轉動,html5可以畫一條線,然後可以用這條線旋轉一個弧度即可,而安卓必須是已知起點座標和終點座標,這就需要精確計算起始座標了。先看下,因為是圖靜態,動態圖也懶得做,所以看個大致效果即可,具體效果可以下載demo觀看:


這個鐘錶並不算完美,正常的鐘錶,秒針每轉動一格,分針和時針都會跟著轉動相應的弧度,但本例中偷了個懶,只有秒針轉一周時,分針才移動一小格,分針轉一周時,時針移動一大格,不滿一周的情況下不動,因為畫線需要精確的座標值,如果做到這種效果那工作量可就大了去了,因此我們知道原理即可。

實現思路:

1.重寫View,並在ondraw方法中繪圖;

2.定義邊框寬度,刻度寬度,長度,指標寬度,長度,計算圓心座標及錶盤半徑;

3.繪製邊框:

mPaint.setStrokeWidth(bordWidth); // 設定圓環的寬度          mPaint.setColor(bordColor);canvas.drawCircle(getWidth()/2, getWidth()/2, r, mPaint);

4.繪製刻度:

//畫刻度//12mPaint.setStrokeWidth(timeLineB_W);mPaint.setColor(timeColor);canvas.drawLine(circleX,bordWidth, circleX, bordWidth+timeLineB_H, mPaint);//12-1mPaint.setStrokeWidth(timeLineS_W);for(int i=1;i<6;i++){canvas.drawLine((float)(circleX+r*Math.cos(Math.toRadians(90-i*6)) ),(float)(circleX-r*Math.cos(Math.toRadians(i*6))), (float)(circleX+(r-timeLineS_H)*Math.cos(Math.toRadians(90-i*6))),(float)(circleX-(r-timeLineS_H)*Math.cos(Math.toRadians(i*6))),mPaint);}//1mPaint.setStrokeWidth(timeLineB_W);canvas.drawLine((float)(circleX+r*Math.cos(Math.toRadians(60)) ),(float)(circleX-r*Math.cos(Math.toRadians(30))), (float)(circleX+(r-timeLineB_H)*Math.cos(Math.toRadians(60))),(float)(circleX-(r-timeLineB_H)*Math.cos(Math.toRadians(30))),mPaint);//1-2mPaint.setStrokeWidth(timeLineS_W);for(int i=1;i<6;i++){canvas.drawLine((float)(circleX+r*Math.cos(Math.toRadians(90-30-i*6)) ),(float)(circleX-r*Math.cos(Math.toRadians(30+i*6))), (float)(circleX+(r-timeLineS_H)*Math.cos(Math.toRadians(90-30-i*6))),(float)(circleX-(r-timeLineS_H)*Math.cos(Math.toRadians(30+i*6))),mPaint);}//2mPaint.setStrokeWidth(timeLineB_W);canvas.drawLine((float)(circleX+r*Math.cos(Math.toRadians(30)) ),(float)(circleX-r*Math.cos(Math.toRadians(60))), (float)(circleX+(r-timeLineB_H)*Math.cos(Math.toRadians(30))),(float)(circleX-(r-timeLineB_H)*Math.cos(Math.toRadians(60))),mPaint);   //2-3mPaint.setStrokeWidth(timeLineS_W);for(int i=1;i<6;i++){canvas.drawLine((float)(circleX+r*Math.cos(Math.toRadians(90-60-i*6)) ),(float)(circleX-r*Math.cos(Math.toRadians(60+i*6))), (float)(circleX+(r-timeLineS_H)*Math.cos(Math.toRadians(90-60-i*6))),(float)(circleX-(r-timeLineS_H)*Math.cos(Math.toRadians(60+i*6))),mPaint);}//3mPaint.setStrokeWidth(timeLineB_W);canvas.drawLine(getWidth()-bordWidth, circleX, getWidth()-bordWidth-timeLineB_H, circleX, mPaint);//3-4mPaint.setStrokeWidth(timeLineS_W);for(int i=1;i<6;i++){canvas.drawLine((float)(circleX+r*Math.cos(Math.toRadians(i*6)) ),(float)(circleX+r*Math.cos(Math.toRadians(90-i*6))), (float)(circleX+(r-timeLineS_H)*Math.cos(Math.toRadians(i*6))),(float)(circleX+(r-timeLineS_H)*Math.cos(Math.toRadians(90-i*6))),mPaint);}//4mPaint.setStrokeWidth(timeLineB_W);canvas.drawLine((float)(circleX+r*Math.cos(Math.toRadians(30)) ),(float)(circleX+r*Math.cos(Math.toRadians(60))), (float)(circleX+(r-timeLineB_H)*Math.cos(Math.toRadians(30))),(float)(circleX+(r-timeLineB_H)*Math.cos(Math.toRadians(60))),mPaint);//4-5mPaint.setStrokeWidth(timeLineS_W);for(int i=1;i<6;i++){canvas.drawLine((float)(circleX+r*Math.cos(Math.toRadians(30+i*6)) ),(float)(circleX+r*Math.cos(Math.toRadians(90-30-i*6))), (float)(circleX+(r-timeLineS_H)*Math.cos(Math.toRadians(30+i*6))),(float)(circleX+(r-timeLineS_H)*Math.cos(Math.toRadians(90-30-i*6))),mPaint);}//5mPaint.setStrokeWidth(timeLineB_W);canvas.drawLine((float)(circleX+r*Math.cos(Math.toRadians(60)) ),(float)(circleX+r*Math.cos(Math.toRadians(30))), (float)(circleX+(r-timeLineB_H)*Math.cos(Math.toRadians(60))),(float)(circleX+(r-timeLineB_H)*Math.cos(Math.toRadians(30))),mPaint);//5-6mPaint.setStrokeWidth(timeLineS_W);for(int i=1;i<6;i++){canvas.drawLine((float)(circleX+r*Math.cos(Math.toRadians(60+i*6)) ),(float)(circleX+r*Math.cos(Math.toRadians(90-60-i*6))), (float)(circleX+(r-timeLineS_H)*Math.cos(Math.toRadians(60+i*6))),(float)(circleX+(r-timeLineS_H)*Math.cos(Math.toRadians(90-60-i*6))),mPaint);}//6mPaint.setStrokeWidth(timeLineB_W);canvas.drawLine(circleX,getWidth()-bordWidth, circleX, getWidth()-bordWidth-timeLineB_H,mPaint);//6-7mPaint.setStrokeWidth(timeLineS_W);for(int i=1;i<6;i++){canvas.drawLine((float)(circleX-r*Math.cos(Math.toRadians(90-i*6)) ),(float)(circleX+r*Math.cos(Math.toRadians(i*6))), (float)(circleX-(r-timeLineS_H)*Math.cos(Math.toRadians(90-i*6))),(float)(circleX+(r-timeLineS_H)*Math.cos(Math.toRadians(i*6))),mPaint);}//7mPaint.setStrokeWidth(timeLineB_W);canvas.drawLine((float)(circleX-r*Math.cos(Math.toRadians(60)) ),(float)(circleX+r*Math.cos(Math.toRadians(30))), (float)(circleX-(r-timeLineB_H)*Math.cos(Math.toRadians(60))),(float)(circleX+(r-timeLineB_H)*Math.cos(Math.toRadians(30))),mPaint);//7-8mPaint.setStrokeWidth(timeLineS_W);for(int i=1;i<6;i++){canvas.drawLine((float)(circleX-r*Math.cos(Math.toRadians(90-30-i*6)) ),(float)(circleX+r*Math.cos(Math.toRadians(30+i*6))), (float)(circleX-(r-timeLineS_H)*Math.cos(Math.toRadians(90-30-i*6))),(float)(circleX+(r-timeLineS_H)*Math.cos(Math.toRadians(30+i*6))),mPaint);}//8mPaint.setStrokeWidth(timeLineB_W);canvas.drawLine((float)(circleX-r*Math.cos(Math.toRadians(30)) ),(float)(circleX+r*Math.cos(Math.toRadians(60))), (float)(circleX-(r-timeLineB_H)*Math.cos(Math.toRadians(30))),(float)(circleX+(r-timeLineB_H)*Math.cos(Math.toRadians(60))),mPaint);//8-9mPaint.setStrokeWidth(timeLineS_W);for(int i=1;i<6;i++){canvas.drawLine((float)(circleX-r*Math.cos(Math.toRadians(90-60-i*6)) ),(float)(circleX+r*Math.cos(Math.toRadians(60+i*6))), (float)(circleX-(r-timeLineS_H)*Math.cos(Math.toRadians(90-60-i*6))),(float)(circleX+(r-timeLineS_H)*Math.cos(Math.toRadians(60+i*6))),mPaint);}//9mPaint.setStrokeWidth(timeLineB_W);canvas.drawLine(bordWidth,circleX, bordWidth+timeLineB_H, circleX,mPaint);//9-10mPaint.setStrokeWidth(timeLineS_W);for(int i=1;i<6;i++){canvas.drawLine((float)(circleX-r*Math.cos(Math.toRadians(i*6)) ),(float)(circleX-r*Math.cos(Math.toRadians(90-i*6))), (float)(circleX-(r-timeLineS_H)*Math.cos(Math.toRadians(i*6))),(float)(circleX-(r-timeLineS_H)*Math.cos(Math.toRadians(90-i*6))),mPaint);}//10mPaint.setStrokeWidth(timeLineB_W);canvas.drawLine((float)(circleX-r*Math.cos(Math.toRadians(30)) ),(float)(circleX-r*Math.cos(Math.toRadians(60))), (float)(circleX-(r-timeLineB_H)*Math.cos(Math.toRadians(30))),(float)(circleX-(r-timeLineB_H)*Math.cos(Math.toRadians(60))),mPaint);//10-11mPaint.setStrokeWidth(timeLineS_W);for(int i=1;i<6;i++){canvas.drawLine((float)(circleX-r*Math.cos(Math.toRadians(30+i*6)) ),(float)(circleX-r*Math.cos(Math.toRadians(90-30-i*6))), (float)(circleX-(r-timeLineS_H)*Math.cos(Math.toRadians(30+i*6))),(float)(circleX-(r-timeLineS_H)*Math.cos(Math.toRadians(90-30-i*6))),mPaint);}//11mPaint.setStrokeWidth(timeLineB_W);canvas.drawLine((float)(circleX-r*Math.cos(Math.toRadians(60)) ),(float)(circleX-r*Math.cos(Math.toRadians(30))), (float)(circleX-(r-timeLineB_H)*Math.cos(Math.toRadians(60))),(float)(circleX-(r-timeLineB_H)*Math.cos(Math.toRadians(30))),mPaint);//11-12mPaint.setStrokeWidth(timeLineS_W);for(int i=1;i<6;i++){canvas.drawLine((float)(circleX-r*Math.cos(Math.toRadians(60+i*6)) ),(float)(circleX-r*Math.cos(Math.toRadians(90-60-i*6))), (float)(circleX-(r-timeLineS_H)*Math.cos(Math.toRadians(60+i*6))),(float)(circleX-(r-timeLineS_H)*Math.cos(Math.toRadians(90-60-i*6))),mPaint);}
刻度是逐一計算起始點座標並繪製的,拿1點的刻度來說,



已知圓心座標(x,y),半徑r,AB長度為a,求A點B點座標。這應該是初中的題目了吧,很好計算,只要求出A點到y軸和x軸的距離,B點到y軸和x軸的距離即可(最方便的辦法就是利用正餘玄函數了,而Java也提供了正餘玄函數的演算法:Math.cos(Math.toRadians(角度值),因為Math.cos傳的是弧度,所以要將角度轉化為弧度如Math.toRadians(60)),當然要注意螢幕座標與數學中的象限座標是不同的,所以AB點座標要用求出的距離值結合圓的半徑求出該點在螢幕中的實際座標,然後畫線即可。

5.繪製指標交點:

mPaint.setStrokeWidth(2);mPaint.setStyle(Paint.Style.FILL);canvas.drawCircle(circleX,circleX, 10, mPaint);
6.秒針轉動:

到這裡,我們得思考下,鐘錶是要動的啊,那怎麼實現開啟應用鐘錶就開始走呢?很簡單吧,初始化View時,在View的構造方法中開啟個線程去不斷重繪View即可,時間間隔當然為一秒,這也就給你視覺感是指標一秒轉動一次,另外需要你對秒針分針時針轉動時相互關聯所走的角度有一個清晰的思路,如果你連他們之間的關係都搞不明白,那看代碼就更不用說了:

 while (true){                      if (ss == 360){                      mm++;//秒針每轉一圈,分針走一格,一格6度,一圈60格                    if(mm==60){                    hh++;//分針轉一圈,時針走一格,一格30度,一圈12格                    if(hh==12){                    hh=0;                    }                    mm=0;                    }                        ss = 0;                      }                      postInvalidate();  //重繪                    try{                          Thread.sleep(1000);  //暫停1秒                    } catch (InterruptedException e){                          e.printStackTrace();                      }                      ss+=6; //360度,分針每秒轉動6度                }  

秒針轉動:

mPaint.setStrokeWidth(timeLineS_W-5);//設定秒針寬度mPaint.setColor(pointColor);r=r-timeLineB_H-5;//設定秒針長度//分針隨秒針轉動if(ss<=30){canvas.drawLine(circleX,circleX,(float)(circleX+(r-timeLineS_H)*Math.cos(Math.toRadians(90-ss*1))),(float)(circleX-(r-timeLineS_H)*Math.cos(Math.toRadians(ss*1))), mPaint);}else if(ss<=60){canvas.drawLine(circleX,circleX,(float)(circleX+(r-timeLineS_H)*Math.cos(Math.toRadians(90-30-(ss-30)*1))),(float)(circleX-(r-timeLineS_H)*Math.cos(Math.toRadians(30+(ss-30)*1))), mPaint);}else if(ss<=90){canvas.drawLine(circleX,circleX,(float)(circleX+(r-timeLineS_H)*Math.cos(Math.toRadians(90-60-(ss-60)*1))),(float)(circleX-(r-timeLineS_H)*Math.cos(Math.toRadians(60+(ss-60)*1))), mPaint);}else if(ss<=120){canvas.drawLine(circleX,circleX,(float)(circleX+(r-timeLineS_H)*Math.cos(Math.toRadians((ss-90)*1))),(float)(circleX+(r-timeLineS_H)*Math.cos(Math.toRadians(90-(ss-90)*1))), mPaint);}else if(ss<=150){canvas.drawLine(circleX,circleX,(float)(circleX+(r-timeLineS_H)*Math.cos(Math.toRadians(30+(ss-120)*1))),(float)(circleX+(r-timeLineS_H)*Math.cos(Math.toRadians(90-30-(ss-120)*1))), mPaint);}else if(ss<=180){canvas.drawLine(circleX,circleX,(float)(circleX+(r-timeLineS_H)*Math.cos(Math.toRadians(60+(ss-150)*1))),(float)(circleX+(r-timeLineS_H)*Math.cos(Math.toRadians(90-60-(ss-150)*1))), mPaint);}else if(ss<=210){canvas.drawLine(circleX,circleX,(float)(circleX-(r-timeLineS_H)*Math.cos(Math.toRadians(90-(ss-180)*1))),(float)(circleX+(r-timeLineS_H)*Math.cos(Math.toRadians((ss-180)*1))), mPaint);}else if(ss<=240){canvas.drawLine(circleX,circleX,(float)(circleX-(r-timeLineS_H)*Math.cos(Math.toRadians(90-30-(ss-210)*1))),(float)(circleX+(r-timeLineS_H)*Math.cos(Math.toRadians(30+(ss-210)*1))), mPaint);}else if(ss<=270){canvas.drawLine(circleX,circleX,(float)(circleX-(r-timeLineS_H)*Math.cos(Math.toRadians(90-60-(ss-240)*1))),(float)(circleX+(r-timeLineS_H)*Math.cos(Math.toRadians(60+(ss-240)*1))), mPaint);}else if(ss<=300){canvas.drawLine(circleX,circleX,(float)(circleX-(r-timeLineS_H)*Math.cos(Math.toRadians((ss-270)*1))),(float)(circleX-(r-timeLineS_H)*Math.cos(Math.toRadians(90-(ss-270)*1))),mPaint);}else if(ss<=330){canvas.drawLine(circleX,circleX,(float)(circleX-(r-timeLineS_H)*Math.cos(Math.toRadians(30+(ss-300)*1))),(float)(circleX-(r-timeLineS_H)*Math.cos(Math.toRadians(90-30-(ss-300)*1))),mPaint);}else if(ss<=360){canvas.drawLine(circleX,circleX,(float)(circleX-(r-timeLineS_H)*Math.cos(Math.toRadians(60+(ss-330)*1))),(float)(circleX-(r-timeLineS_H)*Math.cos(Math.toRadians(90-60-(ss-330)*1))),mPaint);}

7.分針轉動:

mPaint.setStrokeWidth(timeLineS_W);//設定分針寬度r=circleX-bordWidth;//還原r=r-timeLineB_H-50;//設定分針長度//分針隨秒針轉動if(mm<=5){canvas.drawLine(circleX,circleX,(float)(circleX+(r-timeLineS_H)*Math.cos(Math.toRadians(90-mm*6))),(float)(circleX-(r-timeLineS_H)*Math.cos(Math.toRadians(mm*6))), mPaint);}else if(mm<=10){canvas.drawLine(circleX,circleX,(float)(circleX+(r-timeLineS_H)*Math.cos(Math.toRadians(90-30-(mm-5)*6))),(float)(circleX-(r-timeLineS_H)*Math.cos(Math.toRadians(30+(mm-5)*6))), mPaint);}else if(mm<=15){canvas.drawLine(circleX,circleX,(float)(circleX+(r-timeLineS_H)*Math.cos(Math.toRadians(90-60-(mm-10)*6))),(float)(circleX-(r-timeLineS_H)*Math.cos(Math.toRadians(60+(mm-10)*6))), mPaint);}else if(mm<=20){canvas.drawLine(circleX,circleX,(float)(circleX+(r-timeLineS_H)*Math.cos(Math.toRadians((mm-15)*6))),(float)(circleX+(r-timeLineS_H)*Math.cos(Math.toRadians(90-(mm-15)*6))), mPaint);}else if(mm<=25){canvas.drawLine(circleX,circleX,(float)(circleX+(r-timeLineS_H)*Math.cos(Math.toRadians(30+(mm-20)*6))),(float)(circleX+(r-timeLineS_H)*Math.cos(Math.toRadians(90-30-(mm-20)*6))), mPaint);}else if(mm<=30){canvas.drawLine(circleX,circleX,(float)(circleX+(r-timeLineS_H)*Math.cos(Math.toRadians(60+(mm-25)*6))),(float)(circleX+(r-timeLineS_H)*Math.cos(Math.toRadians(90-60-(mm-25)*6))), mPaint);}else if(mm<=35){canvas.drawLine(circleX,circleX,(float)(circleX-(r-timeLineS_H)*Math.cos(Math.toRadians(90-(mm-30)*6))),(float)(circleX+(r-timeLineS_H)*Math.cos(Math.toRadians((mm-30)*6))), mPaint);}else if(mm<=40){canvas.drawLine(circleX,circleX,(float)(circleX-(r-timeLineS_H)*Math.cos(Math.toRadians(90-30-(mm-35)*6))),(float)(circleX+(r-timeLineS_H)*Math.cos(Math.toRadians(30+(mm-35)*6))), mPaint);}else if(mm<=45){canvas.drawLine(circleX,circleX,(float)(circleX-(r-timeLineS_H)*Math.cos(Math.toRadians(90-60-(mm-40)*6))),(float)(circleX+(r-timeLineS_H)*Math.cos(Math.toRadians(60+(mm-40)*6))), mPaint);}else if(mm<=50){canvas.drawLine(circleX,circleX,(float)(circleX-(r-timeLineS_H)*Math.cos(Math.toRadians((mm-45)*6))),(float)(circleX-(r-timeLineS_H)*Math.cos(Math.toRadians(90-(mm-45)*6))),mPaint);}else if(mm<=55){canvas.drawLine(circleX,circleX,(float)(circleX-(r-timeLineS_H)*Math.cos(Math.toRadians(30+(mm-50)*6))),(float)(circleX-(r-timeLineS_H)*Math.cos(Math.toRadians(90-30-(mm-50)*6))),mPaint);}else if(mm<=60){canvas.drawLine(circleX,circleX,(float)(circleX-(r-timeLineS_H)*Math.cos(Math.toRadians(60+(mm-55)*6))),(float)(circleX-(r-timeLineS_H)*Math.cos(Math.toRadians(90-30-(mm-55)*6))),mPaint);}

8.時針轉動:

r=circleX-bordWidth;//還原r=r-timeLineB_H-120;//設定時針長度//時針隨分針轉動if(hh<=3){canvas.drawLine(circleX,circleX,(float)(circleX+(r-timeLineS_H)*Math.cos(Math.toRadians(90-hh*30))),(float)(circleX-(r-timeLineS_H)*Math.cos(Math.toRadians(hh*30))), mPaint);}else if(hh<=6){canvas.drawLine(circleX,circleX,(float)(circleX+(r-timeLineS_H)*Math.cos(Math.toRadians((hh-3)*30))),(float)(circleX+(r-timeLineS_H)*Math.cos(Math.toRadians(90-(hh-3)*30))), mPaint);}else if(hh<=9){canvas.drawLine(circleX,circleX,(float)(circleX-(r-timeLineS_H)*Math.cos(Math.toRadians(90-(hh-6)*30))),(float)(circleX+(r-timeLineS_H)*Math.cos(Math.toRadians((hh-6)*30))), mPaint);}else if(hh<=12){canvas.drawLine(circleX,circleX,(float)(circleX-(r-timeLineS_H)*Math.cos(Math.toRadians((hh-9)*30))),(float)(circleX-(r-timeLineS_H)*Math.cos(Math.toRadians(90-(hh-9)*30))),mPaint);}

9.繪製刻度值:

//寫時刻數字mPaint.setTextSize(26);mPaint.setStrokeWidth(2);mPaint.setColor(bordColor);canvas.drawText("12", circleX-timeLineB_W, bordWidth+timeLineB_H+30, mPaint);canvas.drawText("1", (float)(circleX+(r-timeLineB_H)*Math.cos(Math.toRadians(60)))-20,(float)(circleX-(r-timeLineB_H)*Math.cos(Math.toRadians(30)))+20, mPaint);canvas.drawText("2", (float)(circleX+(r-timeLineB_H)*Math.cos(Math.toRadians(30)))-20,(float)(circleX-(r-timeLineB_H)*Math.cos(Math.toRadians(60)))+20, mPaint);canvas.drawText("3", getWidth()-bordWidth-timeLineB_H-20, circleX+10, mPaint);canvas.drawText("4",(float)(circleX+(r-timeLineB_H)*Math.cos(Math.toRadians(30)))-20,(float)(circleX+(r-timeLineB_H)*Math.cos(Math.toRadians(60))), mPaint);canvas.drawText("5", (float)(circleX+(r-timeLineB_H)*Math.cos(Math.toRadians(60)))-15,(float)(circleX+(r-timeLineB_H)*Math.cos(Math.toRadians(30)))-5, mPaint);canvas.drawText("6",circleX-10, getWidth()-bordWidth-timeLineB_H-10, mPaint);canvas.drawText("7", (float)(circleX-(r-timeLineB_H)*Math.cos(Math.toRadians(60))),(float)(circleX+(r-timeLineB_H)*Math.cos(Math.toRadians(30)))-10, mPaint);canvas.drawText("8",  (float)(circleX-(r-timeLineB_H)*Math.cos(Math.toRadians(30)))+10,(float)(circleX+(r-timeLineB_H)*Math.cos(Math.toRadians(60)))+5, mPaint);canvas.drawText("9", bordWidth+timeLineB_H+10, circleX+10, mPaint);canvas.drawText("10", (float)(circleX-(r-timeLineB_H)*Math.cos(Math.toRadians(30)))+10,(float)(circleX-(r-timeLineB_H)*Math.cos(Math.toRadians(60)))+20, mPaint);canvas.drawText("11", (float)(circleX-(r-timeLineB_H)*Math.cos(Math.toRadians(60))),(float)(circleX-(r-timeLineB_H)*Math.cos(Math.toRadians(30)))+25, mPaint);

在做的過程中會發現規律,就是每個大刻度(30度)即12點-1點,1點-2點......這之間所用的代碼是相同的,只需要改變一下轉動的角度值即可。秒針分為360,一次+6,轉動一格為6度;分針分為60,在秒針到360時+1,轉動一格為6度;時針分為12,在分針到60時+1,轉動一格為30度;這也就是計算的時候有*1的,有*6的,有*30的原因,具體可以體會下代碼中的演算法,或者你有更好的演算法歡迎分享出來!


demo:http://download.csdn.net/detail/baiyuliang2013/8668103


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.