创建表盘后,复制修改代码后显示不出来,打印了log,方法都有被执行,数据也正常。

public class WatchFaceMY extends CanvasWatchFaceService {
private static final String TAG = "WatchFaced";
@Override
public Engine onCreateEngine() {
return new OneEngine(this);
}
private class OneEngine extends Engine {
private int circleRadius ;
private Calendar mCalendar;
private Paint mSecondPaint;
private Paint mMinPaint;
private Paint mHourPaint;
private Paint mScalePaint;
public OneEngine(Context context) {
circleRadius = SizeUtils.dip2px(context, 15f);
}
@Override
public void onCreate(SurfaceHolder holder) {
super.onCreate(holder);
//获取日历
mCalendar = Calendar.getInstance();
//设置时区
mCalendar.setTimeZone(TimeZone.getDefault());
//监听时区变化
initPaints();
}
private void initPaints() {
//秒针
mSecondPaint = new Paint();
mSecondPaint.setColor(getColor(R.color.secondDefaultColor));
mSecondPaint.setStyle(Paint.Style.STROKE);
mSecondPaint.setStrokeCap(Paint.Cap.ROUND);
mSecondPaint.setStrokeWidth(5f);
mSecondPaint.setAntiAlias(true);
//分针
mMinPaint = new Paint();
mMinPaint.setColor(getColor(R.color.minDefaultColor));
mMinPaint.setStyle(Paint.Style.STROKE);
mMinPaint.setStrokeCap(Paint.Cap.ROUND);
mMinPaint.setStrokeWidth(10f);
mMinPaint.setAntiAlias(true);
//时针
mHourPaint = new Paint();
mHourPaint.setColor(getColor(R.color.hourDefaultColor));
mHourPaint.setStyle(Paint.Style.STROKE);
mHourPaint.setStrokeWidth(15f);
mHourPaint.setStrokeCap(Paint.Cap.ROUND);
mHourPaint.setAntiAlias(true);
//刻度
mScalePaint = new Paint();
mScalePaint.setColor(getColor(R.color.scaleDefaultColor));
mScalePaint.setStyle(Paint.Style.STROKE);
mScalePaint.setStrokeWidth(5f);
mScalePaint.setStrokeCap(Paint.Cap.ROUND);
mScalePaint.setAntiAlias(true);
Log.i(TAG, "initPaints: ");
}
@Override
public void onDestroy() {
super.onDestroy();
mSecondPaint = null;
mMinPaint = null;
mHourPaint = null;
mScalePaint = null;
}
@Override
public void onDraw(Canvas canvas, Rect bounds) {
long timeMillis = System.currentTimeMillis();
mCalendar.setTimeInMillis(timeMillis);
//绘制背景
canvas.drawColor(Color.parseColor("#000000"));
//绘制刻度
drawScale(canvas, bounds);
int secondV = mCalendar.get(Calendar.SECOND);
if (secondV == 0) {
//绘制秒针
drawSecondLine(canvas, bounds.centerX());
//绘制分针
drawMinuteLine(canvas, bounds.centerX());
//绘制时针
drawHourLine(canvas, bounds.centerX());
} else {
//绘制时针
drawHourLine(canvas, bounds.centerX());
//绘制分针
drawMinuteLine(canvas, bounds.centerX());
//绘制秒针
drawSecondLine(canvas, bounds.centerX());
}
Log.i(TAG, "onDraw: ");
}
private void drawScale(Canvas canvas, Rect bounds) {
float radius = bounds.centerX();
float innerR = bounds.centerX() * 0.85f;
float outR = bounds.centerX() * 0.95f;
// for (int i = 0; i < 12; i++) {
// double th = i * Math.PI * 2 / 12;
//
// double innerB = Math.cos(th) * innerR;
// int innerX = (int) (mHeight / 2 - innerB);
// double innerA = Math.sin(th) * innerR;
// int innerY = (int) (mWidth/ 2 + innerA);
//
// double outB = Math.cos(th) * outR;
// int outX = (int) (mHeight / 2 - outB);
// double outA = Math.sin(th) * outR;
// int outY = (int) (mWidth/ 2 + outA);
// canvas.drawLine(innerY, innerX, outY, outX, mScalePaint);
//
// }
canvas.drawCircle(radius, radius, circleRadius, mScalePaint);
canvas.save();
for (int i = 0; i < 12; i++) {
canvas.drawLine(radius, radius - outR, radius, radius - innerR, mScalePaint);
canvas.rotate(30, radius, radius);
}
canvas.restore();
Log.i(TAG, "drawScale: ");
}
private void drawSecondLine(Canvas canvas, float radius) {
canvas.save();
float secondRadius = radius * 0.8f;
int secondValue = mCalendar.get(Calendar.SECOND);
int secondRotate = secondValue * 6;
canvas.rotate(secondRotate, radius, radius);
canvas.drawLine(radius, radius - secondRadius, radius, radius - circleRadius, mSecondPaint);
canvas.restore();
Log.i(TAG, "drawSecondLine: ");
}
private void drawMinuteLine(Canvas canvas, float radius) {
canvas.save();
float minRadius = radius * 0.7f;
int minValue = mCalendar.get(Calendar.MINUTE);
int minRotate = minValue * 6;
canvas.rotate(minRotate, radius, radius);
canvas.drawLine(radius, radius - minRadius, radius, radius - circleRadius, mMinPaint);
canvas.restore();
Log.i(TAG, "drawMinuteLine: ");
}
private void drawHourLine(Canvas canvas, float radius) {
float hourRadius = radius * 0.6f;
int hourValue = mCalendar.get(Calendar.HOUR);
Log.i(TAG, "hourRadius: " + hourRadius);
//求旋转角度
int hourOffsetRotate = mCalendar.get(Calendar.MINUTE) / 2;//60/30
int hourRotate = hourValue * 30 + hourOffsetRotate;
canvas.save();
canvas.rotate(hourRotate, radius, radius);
canvas.drawLine(radius, radius - hourRadius, radius, radius - circleRadius, mHourPaint);
canvas.restore();
Log.i(TAG, "drawHourLine: ");
}
}
}
invalidate没有调用,你调用了这个方法,就会调用onDraw了,另外则是需要定时去刷新。这个视频里都有说呀,怎么照着都做不出来吗?