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分钟的时间哦。只是一个简单的例子,后期会补充修改一下样式,使效果更完美

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