您的位置:首页 > 移动开发 > Android开发

Android自定义view——动态画圆形

2016-09-12 18:05 204 查看
最近经常会被问到自定义控件方向的问题,今天抽空做了一个简单的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分钟的时间哦。只是一个简单的例子,后期会补充修改一下样式,使效果更完美
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息