一个简单的绘制直接上代码:
public class ClockView extends View {
private Paint paint;
private int h=12,m=0,s=0;//时分秒
private Handler handler;
public ClockView(Context context) {
super(context);
init();
}
public ClockView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
private void init()
{
paint=new Paint();
paint.setAntiAlias(true);
paint.setStyle(Paint.Style.STROKE);
handler=new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
//获取日历对象
Calendar calendar=Calendar.getInstance();
//获取时分秒,小时要获取12小时制
h=calendar.get(Calendar.HOUR);
m=calendar.get(Calendar.MINUTE);
s=calendar.get(Calendar.SECOND);
invalidate();//重新绘制
sendEmptyMessageDelayed(1,1000);//延迟1秒发送消息,发送给自己
}
};
handler.sendEmptyMessage(1);//发送空消息
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
int width=getWidth();
int height=getHeight();
//画中心的小圆
paint.setColor(Color.RED);//设置红色
paint.setStrokeWidth(2);
canvas.drawCircle(width/2,height/2,5,paint);//画中心小圆
//画内圆
paint.setColor(Color.BLUE);
paint.setStrokeWidth(4);
canvas.drawCircle(width/2,height/2,width/2-40,paint);//画内圆
//画外圆
paint.setColor(Color.GREEN);
canvas.drawCircle(width/2,height/2,width/2-20,paint);//画外圆
//画刻度,画60个其中整点的画的长一点
for(int i=1;i<=60;i++)
{
canvas.save();//保存以下,结合旋转
int angle=i*6;//计算当前的角度
if(angle%30==0)//该画整点
{
paint.setColor(Color.RED);
paint.setStrokeWidth(3);
canvas.rotate(angle,width/2,height/2);//旋转,按照指定的角度进行旋转
canvas.drawLine(40,height/2,60,height/2,paint);//画一个长度为20px的线
}else {//该画分或秒
paint.setColor(Color.BLACK);
paint.setStrokeWidth(2);
canvas.rotate(angle,width/2,height/2);
canvas.drawLine(40,height/2,50,height/2,paint);//画线
}
canvas.restore();//复位,结合save来用让刚刚的旋转复位
}
canvas.save();
//画表针
//画时针
//float jd=h*30+m*1.0F/60*30;
paint.setStrokeWidth(6);
float jd=h*30+m*0.5F;//计算当前时针的角度,当前小时和对应分钟的总角度
canvas.rotate(jd,width/2,height/2);//旋转指定的角度
canvas.drawLine(width/2,height/2,width/2,height/2-width/5,paint);
canvas.restore();//复位
canvas.save();
//画分针
paint.setStrokeWidth(3);
paint.setColor(Color.GRAY);
canvas.rotate(m*6,width/2,height/2);
canvas.drawLine(width/2,height/2,width/2,height/2-width/4,paint);
canvas.restore();
canvas.save();
//画秒针
paint.setStrokeWidth(1);
paint.setColor(Color.GREEN);
canvas.rotate(s*6,width/2,height/2);
canvas.drawLine(width/2,height/2,width/2,height/2-width/3,paint);
}
}
简单实现的步骤就是这个样子