您的位置:首页 > 移动开发 > Android开发

自定义控件之绘图篇(一):概述及基本几何图形绘制 一目了然 ,适合初学者

2016-09-02 16:36 260 查看


惯例:先上图后说话,谢谢各位伙伴的支持! 有你们是我的福分!

             欢迎一起讨论和学习,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);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息