转载请注明出处:http://blog.csdn.net/crazy1235/article/details/73611978
Rect & RectF
RectF和Rect都表示的是一个矩形的区域,他们的构造方法类似!
不同的是,Rect 的精度是integer,RectF 的精度是float !!
public Rect(int left, int top, int right, int bottom) {
this.left = left;
this.top = top;
this.right = right;
this.bottom = bottom;
}
public RectF(float left, float top, float right, float bottom) {
this.left = left;
this.top = top;
this.right = right;
this.bottom = bottom;
}
在RectF.java 中,有这样两个函数
public void round(Rect dst) {
dst.set(FastMath.round(left), FastMath.round(top),
FastMath.round(right), FastMath.round(bottom));
}
public void roundOut(Rect dst) {
dst.set((int) Math.floor(left), (int) Math.floor(top),
(int) Math.ceil(right), (int) Math.ceil(bottom));
}
目的就是将 RectF 转成 Rect
Canvas
Canvas – 画布
canvas 里的方法基本可以分为这么几类:
save、restore 等与层的保存和回滚相关的方法;
scale、rotate、clipxxx 等对画布进行操作的方法;
drawxxx 等一系列绘图相关的方法;
想要画图案,就得需要用到画布(Canvas)、画笔(Paint)、路径(Path)、填充(Shader)。
想要对图案做变形处理,就得用到Matrix(矩阵)
Paint
Paint就是画布上画图用的画笔!
提供了画笔的颜色、透明度、大小、笔刷的风格等属性!
Paint常用属性如下:
setARGB/setColor 设置颜色
setAlpha 设置透明度
setAntiAlias 设置是否抗锯齿
setShader 设置画笔的填充效果
setShaderLayer 设置阴影
setStyle 设置画笔风格(填充模式)
Paint.Style.FILL :填充内部
Paint.Style.FILL_AND_STROKE :填充内部和描边
Paint.Style.STROKE :仅描边
setStrokeWidth 设置边框的宽度
setStrokeCap() 设置线冒样式
Paint.Cap.ROUND : 圆形线冒
Paint.Cap.SQUARE:方形线冒
Paint.Cap.BUTT:无线冒
setStrokeJoin() 设置线段连接处样式
Paint.Join.MITER:结合处为锐角
Paint.Join.Round:结合处为圆弧
Paint.Join.BEVEL:结合处为直线)
setStrokeMiter(float miter) :设置笔画的倾斜度
setPathEffect(PathEffect effect) :设置路径样式
setXfermode(Xfermode xfermode):设置Xfermode样式
setTextSize():设置文字大小
setTextAlign(Align align) : 设置文字排列方式
setTextScaleX(float scaleX):设置文字X轴方向缩放比例,默认值是1.0,大于1.0表示放大,小于1.0表示缩小
setTextSkewX(float skewX):设置文字X轴错切
Point
Canvas绘制点有三个重载的函数:
drawPoint(float x, float y, @NonNull Paint paint)
drawPoints(@Size(multiple=2) @NonNull float[] pts, @NonNull Paint paint)
drawPoints(@Size(multiple=2) float[] pts, int offset, int count, @NonNull Paint paint)
paint.setStrokeWidth(50);
paint.setColor(Color.BLACK);
canvas.drawPoint(200, 200, paint); // 点的x、y坐标, 画笔
private float[] points = new float[]{
10, 10, 100, 10, 200, 100};
canvas.drawPoints(points, paint); // 坐标的数组 + 画笔