惯例:先上图后说话,谢谢各位伙伴的支持! 有你们是我的福分!
欢迎一起讨论和学习,QQ:732258496 微信:15520726587
一、Paint与Canvas
像我们平时画图一样,需要两个工具,纸和笔。Paint就是相当于笔,而Canvas就是纸,这里叫画布。
所以,凡有跟要要画的东西的设置相关的,比如大小,粗细,画笔颜色,透明度,字体的样式等等,都是在Paint里设置;同样,凡是要画出成品的东西,比如圆形,矩形,文字等相关的都是在Canvas里生成。
下面先说下Paint的基本设置函数:
- paint.setAntiAlias(true);//抗锯齿功能
- paint.setColor(Color.RED); //设置画笔颜色
- paint.setStyle(Style.FILL);//设置填充样式
- paint.setStrokeWidth(30);//设置画笔宽度
- paint.setShadowLayer(10, 15, 15, Color.GREEN);//设置阴影
二、实际代码
public class MyView extends View { Context m_context; public MyView(Context context) { super(context); m_context = context; } //重写OnDraw()函数,在每次重绘时自主实现绘图 @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); paintCircle(canvas);//画圆 paintLint(canvas);//画直线 paintLints(canvas);//画多条直线 paintLints(canvas);//画多条直线 paintPonts(canvas);//画多个点 paintRect(canvas);//画矩形 paintRoundRect(canvas);//画圆角矩形 paintOval(canvas);//画椭圆 paintArc(canvas);//画弧 } /*画圆*/ private void paintCircle(Canvas canvas) { //设置画笔基本属性 Paint paint = new Paint(); paint.setAntiAlias(true);//抗锯齿功能 paint.setColor(Color.RED);//设置画笔的颜色 paint.setStyle(Paint.Style.STROKE);//设置填充的样式 paint.setStrokeWidth(5);//设置画笔的宽度 paint.setShadowLayer(10, 15, 10, Color.GREEN);//设置阴影 canvas.drawRGB(255, 255, 255);//设置画布颜色背景 canvas.drawCircle(190, 200, 150, paint);//画圆 } /*画直线*/ private void paintLint(Canvas canvas) { //设置画笔基本属性 Paint paint = new Paint(); paint.setColor(Color.RED);//设置画笔的颜色 paint.setStyle(Paint.Style.FILL);//设置填充的样式 paint.setStrokeWidth(5);//设置画笔的宽度 canvas.drawLine(100, 100, 200, 220, paint);//画直线 } /*画多条直线*/ private void paintLints(Canvas canvas) { //设置画笔基本属性 Paint paint = new Paint(); paint.setColor(Color.RED);//设置画笔的颜色 paint.setStyle(Paint.Style.FILL);//设置填充的样式 paint.setStrokeWidth(5);//设置画笔的宽度 float[] pts = {10, 10, 100, 100, 200, 200, 400, 400};//(上面有四个点:(10,10)、(100,100),(200,200),(400,400)),两两连成一条直线; canvas.drawLines(pts, paint);//画多条直线 } /*画多个点*/ private void paintPonts(Canvas canvas) { //设置画笔基本属性 Paint paint = new Paint(); paint.setColor(Color.RED);//设置画笔的颜色 paint.setStyle(Paint.Style.FILL);//设置填充的样式 paint.setStrokeWidth(15);//设置画笔的宽度 float[] pts = {10, 10, 100, 100, 200, 200, 400, 400};//(上面有四个点:(10,10)、(100,100),(200,200),(400,400)),两两连成一条直线; /* * float[] pts:点的合集,与上面直线一直,样式为{x1,y1,x2,y2,x3,y3,……} * int offset:集合中跳过的数值个数,注意不是点的个数!一个点是两个数值; * count:参与绘制的数值的个数,指pts[]里人数值个数,而不是点的个数,因为一个点是两个数值 * */ canvas.drawPoints(pts, 2, 4, paint);//跳过第一个点,画出后面两个点,第四个点不画 } //画矩形 private void paintRect(Canvas canvas) { Paint paint = new Paint(); paint.setColor(Color.RED); paint.setStyle(Paint.Style.FILL); paint.setStrokeWidth(15); //传入矩形的四个点,画出矩形 canvas.drawRect(10, 10, 100, 100, paint);//直接构造 RectF rectF = new RectF(120, 10, 220, 100); canvas.drawRect(rectF, paint);//使用RectF 构造 Rect rect = new Rect(230, 10, 320, 100); canvas.drawRect(rect, paint);//使用Rect 构造 } //画圆角矩形 private void paintRoundRect(Canvas canvas) { Paint paint = new Paint(); paint.setColor(Color.RED); paint.setStyle(Paint.Style.FILL); paint.setStrokeWidth(15); RectF rectF = new RectF(230, 10, 500, 100); canvas.drawRoundRect(rectF, 20, 10, paint); } //画椭圆 private void paintOval(Canvas canvas) { Paint paint = new Paint(); paint.setColor(Color.RED); paint.setStyle(Paint.Style.FILL); paint.setStrokeWidth(15); RectF rectF = new RectF(230, 10, 500, 100); canvas.drawRect(rectF, paint);//画矩形 paint.setColor(Color.GREEN); canvas.drawOval(rectF, paint);//话椭圆 } //画弧 private void paintArc(Canvas canvas) { Paint paint = new Paint(); paint.setColor(Color.RED); paint.setStyle(Paint.Style.STROKE); paint.setStrokeWidth(5); /** * *RectF oval:生成椭圆的矩形 *float startAngle:弧开始的角度,以X轴正方向为0度 *float sweepAngle:弧持续的角度 * *boolean useCenter:是否有弧的两边,True,还两边,False,只有一条弧 */ RectF rectF = new RectF(230, 10, 500, 100); canvas.drawArc(rectF, 0, 90, true, paint); } }