Android中有一些绘图技巧,可以方便绘图。
一、Canvas:
Canvas作为绘制图形的直接对象,提供了几个很有用的方法。
Canvas.save():保存画布。作用:将之前的所有已绘制图像保存起来,让后续的操作就好像造一个新的图层上操作一样。
Canvas.restore():合并图层操作。将在save()之后绘制的所有图像与save()之前的图像进行合并。
Canvas.translate(x,y):将坐标原点从(0,0)移到(x,y)。
Canvas.rotate(x):将坐标系顺时针旋转x度。
绘制一个仪表盘:
思路: 1、绘制一个外圆圈。
2、绘制刻度线:包含四个长的刻度线和其他短的刻度线。
3、绘制刻度值:包含长刻度线对应的刻度值和短刻度线对应的刻度值。
4、绘制指针:一粗一细两个指针。
代码:
int width = getWidth();
int height = getHeight();
//画外圆
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeWidth(5);
canvas.drawCircle(width / 2, height / 2, width / 2, paint);
//画刻度
paint.setStrokeWidth(3);
for(int i = 0; i < 24; i++){
//区分整点与非整点
if(i == 0||i == 6||i == 12||i == 18){
paint.setStrokeWidth(5);
paint.setTextSize(30);
canvas.drawLine(width / 2, height / 2 - width / 2, width / 2, height / 2 - width / 2 +60, paint);
String degree = String.valueOf(i);
canvas.drawText(degree, width / 2 - paint.measureText(degree) / 2, height / 2 - width / 2 +90, paint);
}else{
paint.setTextSize(15);
canvas.drawLine(width / 2, height / 2 - width / 2, width / 2, height / 2 - width / 2 +30, paint);
String degree = String.valueOf(i);
canvas.drawText(degree, width / 2 - paint.measureText(degree) / 2, height / 2 - width / 2 +60, paint);
}
//通过旋转画布简化坐标计算
canvas.rotate(15, width / 2, height / 2);
}
//画指针
paint.setStrokeWidth(20);
canvas.save();
canvas.translate(width / 2, height / 2);
canvas.drawLine(0, 0, 100, 100, paint);
paint.setStrokeWidth(10);
canvas.drawLine(0, 0, 100, 200, paint);
canvas.restore();
二、Layer图层:
在Android中,使用saveLayer()方法创建一个图层,是基于栈的结构进行管理的。调用saveLayer()、saveLayerAlpha()方法将一个图层入栈,使用restore()、restoreToCount()将一个图层出栈。
代码:
canvas.drawColor(Color.WHITE);
paint.setColor(Color.BLUE);
canvas.drawCircle(150, 150, 100, paint);
canvas.saveLayerAlpha(0, 0, 400, 400, 127, LAYER_TYPE_HARDWARE);
paint.setColor(Color.RED);
canvas.drawCircle(200, 200, 100, paint);
canvas.restore();
效果图: