canvas图层与屏幕的关系
屏幕 Canvas图层--> Canvas 画图 --> 图层覆盖在屏幕上显示 -->图层清理图层上的元素
^ |
| |
------------------------------------
在Canvas与屏幕合成时,超出屏幕范围的图像是不会显示出来的。
Canvas图层一般 原点坐标为手机的左上角为(0,0),横为x轴,竖为y轴
基本方法:
rotate(degress,px,py)
对图层旋转:对xy轴旋转。(pxpy默认为图层的原点)
scale
缩放x/y坐标系密度
skew 倾斜x/y轴的方向,参数为倾斜角度的tan值.改变x/y轴的方向。
不再是单一的垂直xy轴。
translate(dx,dy)
对图层移动,改变原坐标。dx,dy为改变的差值
clip 裁剪
不可逆操作
save / restore
保存:图层入栈 恢复:图层出栈(赋值给当前的canvas)
drawText(String text, float x, float y, Paint paint)
y为文字基线的起点纵坐标,不是文字的左上角y坐标。
x代表 与绘制的文字相对的x坐标(左中右)
Paint::setTextAlign(Align align);
Align的取值为:Panit.Align.LEFT,Paint.Align.CENTER,Paint.Align.RIGHT
Panit.Align.LEFT :坐标x在文字的左边(默认).zzzz
Paint.Align.CENTER:坐标在文字的中间 zz.zz
Paint.Align.RIGHT:坐标x在文字的右边 zzzz.
在paint中设置字体大小 setTextSize() 以px为单位
所绘文字宽度、高度和最小矩形获取:
Paint.FontMetricsInt fm = paint.getFontMetricsInt();
int top = baseLineY + fm.top;
int bottom = baseLineY + fm.bottom;
//所占高度
int height = bottom - top;
int width = paint.measureText(String text);
//要配置好画笔的TextSize()
定点写字:
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
//主要计算出y坐标
String text = "harvic\'s blog";
int top = 200;
int baseLineX = 0 ;
//设置paint
Paint paint = new Paint();
paint.setTextSize(120); //事先确定字体大小以px为单位
paint.setTextAlign(Paint.Align.LEFT);
//画top线
paint.setColor(Color.YELLOW);
canvas.drawLine(baseLineX, top, 3000, top, paint);
//计算出baseLine位置
Paint.FontMetricsInt fm = paint.getFontMetricsInt();
int baseLineY = top - fm.top;
//画基线
paint.setColor(Color.RED);
canvas.drawLine(baseLineX, baseLineY, 3000, baseLineY, paint);
//写文字
paint.setColor(Color.GREEN);
canvas.drawText(text, baseLineX, baseLineY, paint);
}
参考: http://blog.csdn.net/harvic880925/article/details/50423762