感觉阔别scdn已经很久了,一个是项目比较忙,一个是许多想写的东西不敢轻易下笔写,最近又看了一些书,就更没有时间了,前天动手画了个表,贴贴代码,尚未完成,后续更新。
/**
* Created by Administrator
* draw a clock
*/
public class MyClock extends View {
private Paint paintCircle;
private Paint paintScale;
private Paint paintPointerMinute;
private Paint paintPointerHour;
public MyClock(Context context) {
super(context);
init(context);
}
public MyClock(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
init(context);
}
public MyClock(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init(context);
}
public MyClock(Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
init(context);
}
/**
* 外圆;圆心:屏幕中心;半径:屏幕宽的一半
*/
private void init(Context context) {
/*---------------------*/
DisplayMetrics displayMetrics = new DisplayMetrics();
WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
windowManager.getDefaultDisplay().getMetrics(displayMetrics);
int screenWidth = displayMetrics.widthPixels;
int screenHeight = displayMetrics.heightPixels;
LogT.i("屏幕的宽高是:" + screenWidth + ";" + screenHeight);
/*---------------------*/
paintCircle = new Paint();
paintCircle.setStyle(Paint.Style.STROKE);
paintCircle.setAntiAlias(true);
paintCircle.setStrokeWidth(5f);
paintCircle.setColor(Color.RED);
paintScale = new Paint();
paintScale.setColor(Color.RED);
paintScale.setAntiAlias(true);
paintScale.setStrokeWidth(3f);
paintPointerMinute = new Paint();
paintPointerMinute.setAntiAlias(true);
paintPointerMinute.setStrokeWidth(10f);
paintPointerMinute.setColor(Color.BLACK);
paintPointerHour = new Paint();
paintPointerHour.setAntiAlias(true);
paintPointerHour.setStrokeWidth(20f);
paintPointerHour.setColor(Color.BLACK);
}
// TODO: 2017/6/27
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawCircle(getMeasuredWidth() / 2, getMeasuredHeight() / 2, getMeasuredWidth() / 2, paintCircle);
//paint the scale
drawScale(canvas);
// paint the pointer
drawPointer(canvas);
}
/**
* paint the pointer
* @param canvas canvas
*/
private void drawPointer(final Canvas canvas) {
canvas.translate(getMeasuredWidth()/2,getMeasuredHeight()/2);
canvas.drawLine(0,0,100,100,paintPointerHour);
canvas.drawLine(0,0,100,200,paintPointerMinute);
canvas.save();
}
/**
* paint the scale
* @param canvas canvas
*/
private void drawScale(Canvas canvas) {
for (int i = 1;i<=12;i++) {
//翻转画布
canvas.rotate(30,getMeasuredWidth()/2,getMeasuredHeight()/2);
if (i ==3||i == 6|| i ==9||i == 12) {
paintScale.setStrokeWidth(5f);
paintScale.setTextSize(30f);
canvas.drawLine(getMeasuredWidth()/2,
(getMeasuredHeight()-Math.min(getMeasuredWidth(),getMeasuredHeight()))/2,
getMeasuredWidth()/2,
(getMeasuredHeight()-Math.min(getMeasuredWidth(),getMeasuredHeight()))/2+50,
paintScale);
String s = String.valueOf(i);
canvas.drawText(s,(getMeasuredWidth()-paintScale.measureText(s))/2,
(getMeasuredHeight()-Math.min(getMeasuredWidth(),getMeasuredHeight()))/2+100,
paintScale);
}else {
paintScale.setStrokeWidth(3f);
paintScale.setTextSize(20f);
canvas.drawLine(getMeasuredWidth()/2,
(getMeasuredHeight()-Math.min(getMeasuredWidth(),getMeasuredHeight()))/2,
getMeasuredWidth()/2,
(getMeasuredHeight()-Math.min(getMeasuredWidth(),getMeasuredHeight()))/2+30,
paintScale);
String s = String.valueOf(i);
canvas.drawText(s,(getMeasuredWidth()-paintScale.measureText(s))/2,
(getMeasuredHeight()-Math.min(getMeasuredWidth(),getMeasuredHeight()))/2+80,
paintScale);
}
}
}
}