源碼地址: https://github.com/senonwx/CustomClock.git
作出的效果
貼出核心代碼
1.繪製錶盤
private void drawCircle(Canvas canvas) {
mPaint.setStyle(Paint.Style.STROKE);
canvas.drawCircle(width/2,height/2,width/2-padding,mPaint);
}
2.繪製刻度
private void drawScale(Canvas canvas){
mPaint.setStyle(Paint.Style.FILL);
for (int i = 0; i < 12; i++) {
if(i % 3 == 0)
canvas.drawLine(width/2,padding,height/2,padding+4+20,mPaint);
else
canvas.drawLine(width/2,padding,height/2,padding+4+10,mPaint);
canvas.rotate(30,width/2,height/2);
}
}
3.繪製指針
private void drawPointer(Canvas canvas){
mCalendar = Calendar.getInstance();
mHour = mCalendar.get(Calendar.HOUR);
mMinute = mCalendar.get(Calendar.MINUTE);
mSecond = mCalendar.get(Calendar.SECOND);
//時針
mDegrees = mHour * 30 + mMinute / 2;
mPaint.setColor(Color.BLACK);
mPaint.setStrokeWidth(6);
canvas.save();
canvas.rotate(mDegrees,width/2,height/2);
canvas.drawLine(width/2,height/2,width/2,height/2-mHourLine,mPaint);
canvas.restore();
//分針
mPaint.setColor(Color.GRAY);
mPaint.setStrokeWidth(4);
mDegrees = mMinute * 6 + mSecond / 10;
canvas.save();
canvas.rotate(mDegrees,width/2,height/2);
canvas.drawLine(width/2,height/2,width/2,height/2-mMinuateLine,mPaint);
canvas.restore();
//秒針
mPaint.setStrokeWidth(2);
mPaint.setColor(Color.GREEN);
mDegrees = mSecond * 6;
canvas.save();
canvas.rotate(mDegrees,width/2,width/2);
canvas.drawLine(width/2,height/2,width/2,height/2-mSecondLine,mPaint);
canvas.restore();
mPaint.setColor(Color.BLACK);
}
4.繪製文字
private void drawStr(Canvas canvas){
mPaint.setTextSize(40);
StringBuffer sb = new StringBuffer();
if(mHour<10){
sb.append("0").append(String.valueOf(mHour)).append(":");
}else{
sb.append(String.valueOf(mHour)).append(":");
}
if(mMinute<10){
sb.append("0").append(String.valueOf(mMinute)).append(":");
}else{
sb.append(String.valueOf(mMinute)).append(":");
}
if(mSecond<10){
sb.append("0").append(String.valueOf(mSecond));
}else{
sb.append(String.valueOf(mSecond));
}
String time = sb.toString();
int strW = (int) mPaint.measureText(time);
canvas.drawText(time,width/2-strW/2,height/2+60,mPaint);
}
5.實現指針轉動
private Handler mHandler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
invalidate();
}
};
@Override
protected void onDraw(Canvas canvas) {
drawCircle(canvas);
drawScale(canvas);
drawPointer(canvas);
drawStr(canvas);
mHandler.sendEmptyMessage(0);
}
源碼地址在最上方哦!!!