1.绘图基础
1.1 基本图形绘制
1.1.1 概述
- Paint类是画笔,Canvas类是画布。
- Paint类里设置:画笔大小、粗细、画笔颜色、透明度、字体的样式等。
- Canvas类里设置:如圆形、矩形、文字等。
1.1.2 Paint使用基础
setStyle() :设置填充样式
- Paint.Style.FILL : 仅填充内部。
- Paint.Style.FILL_ AND_ STROKE :填充内部和描边。
- Paint.Style.STROKE : 仅描边。
setStrokeWidth():设置描边宽度值, 单位是px 。
举例:
class BaseView : View { constructor(context: Context) : super(context) { } constructor(context: Context, attrs: AttributeSet) : super(context, attrs) { } constructor(context: Context, attrs: AttributeSet, defStyleAttr: Int) : super(context, attrs, defStyleAttr) { } override fun onDraw(canvas: Canvas) { super.onDraw(canvas) //设置画笔的基本属性 /** * 实际上:不允许在onDraw()函数中创建Paint对象,onDraw()函数会被多次调用,会引起GC。 * 一般在自定义控件的构造函数中创建变量。 */ val paint = Paint() paint.color = Color.RED//颜色 paint.style = Paint.Style.STROKE//填充样式 paint.strokeMiter = 50f//描边宽度 单位px canvas.drawCircle(190f, 200f, 150f, paint) } }
1.1.3 Canvas使用基础
画布背景设置:
void drawColor(int color)// 8位的0xAARRGGBB样式颜色值 void drawARGB(int a,int r,int g,int b)//a指Alpha(透明度) void drawRGB(int r,int g,int b)
画直线:
void drawLine(float startX,float startY,float stopX,float stopY,Paint paint)
- startX :起始点X 坐标。
- startY :起始点Y 坐标。
- stopX : 终点X 坐标。
- stopY : 终点Y 坐标。
画点:
void drawPoint(float x,float y,Paint paint)
- float x : 点的X 坐标。
- float y : 点的Y 坐标。
矩形工具类RectF 、Rect:
- RectF 保存float类型数值的矩形结构;Rect保存int类型数值的矩形结构。
RectF() RectF(float left,float top,float right,float bottom)//常用 RectF(RectF r) RectF(Rect r) Rect() Rect(int left,工nt to,int right,int bottom) Rect(Rect r)
矩形:
void drawRect(float left,float top,float right,float bottom,Paint paint) void drawRect(RectF rect,Paint paint) void drawRect(Rect r,Paint paint)
1.1.4 Color
常量颜色:
int BLACK int BLUE int CYAN int DKGRAY int GRAY int GREEN int LTGRAY int MAGENTA int RED int TRANSPARENT int WHITE int YELLOW
- 通过Color.XXX 来直接使用这些颜色。
构造颜色:
static int argb(int alpha,int red,int green,int blue)//带透明度的颜色 static int rgb(int red, int green, int blue)//不带透明度的颜色
- 色彩分量的取值范围都是0~ 255 。(十六进制表示更为直观:S0x00~0xFF)
提取颜色分量:
static int alpha(int color) static int red(int color) static int green(int color) static int blue(int color) //example int green = Color.green(0xFF000F00);
1.1.5 补充
**抗锯齿功能:**setAntiAlias()
void setAntiAlias(boolean aa) //example paint.setAntiAlias(true)//打开抗锯齿功能
多条直线:
//构造函数1 void drawLines(float[] pts, Paint paint)//pts中两两连线 //构造函数2 void drawLines(float[] pts, int offset, int count, Paint paint)//pts中两两连线
- int offset:集合中跳过的数值个数(指单个数值)。
- int count:参与绘制的数值个数(指单个数值)。
点:
void drawPoint(float x, float y, Paint paint)
多个点:
void drawPoints(float[] pts, Paint paint) void drawPoints(float[] pts, int offset, int count, Paint paint)
圆角矩形: