Android自定義view——動態畫圓形

最近經常會被問到自定義控件方向的問題,今天抽空做了一個簡單的demo。簡單仿照火箭鬧鐘首頁的動畫。就是動態的畫一個圓形,這個和當前時間的秒值綁定。具體的實現方式就是不停的重繪,實現動畫的效果。下面直接看代碼

在onResume中獲取當前時間的秒值賦值給全局的一個變量值

//在這裏算出i的值,也就是當前時間的秒值,因爲要延遲50ms繪製一次,所以1分鐘是60s是6000ms,需要繪製1200次。
所以這裏需要乘以20
i = Calendar.getInstance().get(Calendar.SECOND)*20;
handler.sendEmptyMessageDelayed(i++, 0);

接下來看handler的處理

pro = 1200;
Handler handler = new Handler() {
    public void handleMessage(android.os.Message msg) {
        testConvas.setProgress(msg.what);
        if (i <= pro) {//如果還沒有到達一分鐘的時間,繼續發送消息,每次延遲50ms,實現動畫效果
            handler.sendEmptyMessageDelayed(i++, 50);
        }else {//如果大於pro之後,立即將i置爲0,重新開始繪製
            i = 0;
            handler.sendEmptyMessageDelayed(i++, 0);
        }
    }
};

以上是activity的處理,接下來看繪製的方法

供activity調用的,將自增的i值發送到這裏

public void setProgress(int progress) {
    this.progress = progress;
    invalidate();//重繪的方法
}

繪製圓弧

if (progress <= pro) {
    Paint paint1 = initPaint();
    paint1.setColor(color);
    canvas.drawArc(initRecF(), -90, ((float) progress / max) * 360, false, paint1);
// 畫圓弧,第一個是圓弧所在的橢圓對象,第二個參數爲:起始角度,第三個爲跨的角度,
第四個爲true的時候是實心,false的時候爲空心
}

就這麼簡單,一個和時間綁定的圓弧的繪製實現了。一圈正好是1分鐘的時間哦。只是一個簡單的例子,後期會補充修改一下樣式,使效果更完美

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章