网站防止被采集,个人网站建设计划报告,昆明网站建设推广优化,如何建立一个网站并维护在创建新的控件或修改现有的控件时#xff0c;我们都会涉及到重写控件或View的onDraw方法。 onDraw方法会传入一个Canvas对象#xff0c;它是你用来绘制控件视觉界面的画布。 在onDraw方法里#xff0c;我们经常会看到调用save和restore方法#xff0c;它们到底是干什么用的…在创建新的控件或修改现有的控件时我们都会涉及到重写控件或View的onDraw方法。 onDraw方法会传入一个Canvas对象它是你用来绘制控件视觉界面的画布。 在onDraw方法里我们经常会看到调用save和restore方法它们到底是干什么用的呢 ❑ save用来保存Canvas的状态。save之后可以调用Canvas的平移、放缩、旋转、错切、裁剪等操作。 ❑ restore用来恢复Canvas之前保存的状态。防止save后对Canvas执行的操作对后续的绘制有影响。 save和restore要配对使用restore可以比save少但不能多如果restore调用次数比save多会引发Error。 例如我们先想在画布上绘制一个右向的三角箭头当然我们可以直接绘制另外我们也可以先把画布旋转90°画一个向上的箭头然后再旋转回来这种旋转操作对于画圆周上的标记非常有用。然后我们想在右下角有个20像素的圆那么onDraw中的核心代码是 int px getMeasuredWidth(); int py getMeasuredWidth(); // Draw background canvas.drawRect(0, 0, px, py, backgroundPaint); canvas.save(); canvas.rotate(90, px/2, py/2); // Draw up arrow canvas.drawLine(px / 2, 0, 0, py / 2, linePaint); canvas.drawLine(px / 2, 0, px, py / 2, linePaint); canvas.drawLine(px / 2, 0, px / 2, py, linePaint); canvas.restore(); // Draw circle canvas.drawCircle(px - 10, py - 10, 10, linePaint); 效果如图1所示 图1 如果我们不调用save和restore会是什么样子呢如图2所示 图2 从这两个图中我们就能看到圆圈位置的明显差异。不进行Canvas的save和restore操作的话所有的图像都是在画布旋转90°后的画布上绘制的。当执行完onDraw方法系统自动将画布恢复回来。save和restore操作执行的时机不同就能造成绘制的图形不同。 所以save和restore之间往往夹杂的是对Canvas的特殊操作。