
正文
Android使用Canvas画图
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
1.参考:http://blog.csdn.net/rhljiayou/article/details/7212620/
2.常用方法:
1.Canvas类
drawArc 绘制弧
drawBitmap 绘制位图
drawCircle 绘制圆形
drawLine 绘制线
drawOval 绘制椭圆
drawPath 绘制路径
drawPoint 绘制一个点
drawPoints 绘制多个点
drawRect 绘制矩形
drawRoundRect 绘制圆角矩形
drawText 绘制字符串
drawTextOnPath 沿着路径绘制字符串
2.Paint类:
setARGB/setColor 设置颜色
setAlpha 设置透明度
setAntiAlias 设置是否抗锯齿
setShader 设置画笔的填充效果
setShadowLayer 设置阴影
setStyle 设置画笔风格
setStrokeWidth 设置空心边框的宽度
setTextSize 设置绘制文本时文字的大小
setStrokeCap(Paint.Cap.ROUND) 设置为圆角
3.代码如下:
public class DrawView extends View {
public DrawView(Context context) {
super(context);
}
public DrawView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
/*
* 方法 说明 drawRect 绘制矩形 drawCircle 绘制圆形 drawOval 绘制椭圆 drawPath 绘制任意多边形
* drawLine 绘制直线 drawPoin 绘制点
*/
//设置画笔
Paint paint=new Paint();
paint.setAntiAlias(true);
paint.setColor(Color.RED);
paint.setStyle(Paint.Style.STROKE);
//画文本
canvas.drawText("画圆",20,30,paint);
//画圆
canvas.drawCircle(100,30,30,paint);
//画线
paint.setColor(Color.BLACK);
canvas.drawText("画线及圆弧",10,80,paint);
canvas.drawLine(10,90,310,90,paint);//直线
canvas.drawLine(330,90,430,150,paint);//斜线
//画圆弧及扇形
RectF oval1=new RectF(10,160,110,260);
paint.setColor(Color.GREEN);
canvas.drawArc(oval1,180,180,false,paint);
//第一个参数:范围 第二个参数:开始角度 第三个参数:圆弧度数
//第四个参数:false---圆弧 true---扇形
//第五个参数:画笔
oval1.set( 120,160,220,260);
canvas.drawArc(oval1,20,60,true,paint);
oval1.set(230,160,330,260);
canvas.drawArc(oval1,200,240,true,paint);
//画矩形
paint.setColor(Color.BLUE);
canvas.drawRect(10,280,210,380,paint);
//绘制圆角矩形
RectF re1=new RectF(250,280,450,380);
canvas.drawRoundRect(re1,15,15,paint);
//画椭圆
RectF re2=new RectF(10,400,210,500);
canvas.drawOval(re2, paint);
//画三角形
paint.setColor(Color.DKGRAY);
Path path=new Path();
path.moveTo(70,520);
path.lineTo(10,580);
path.lineTo(130,580);
path.close();
canvas.drawPath(path,paint);
//画点
paint.setStyle(Paint.Style.FILL);
canvas.drawPoint(10,600,paint);//一个点
canvas.drawPoints(new float[]{20,600,30,600,40,600},paint);//多个点
//画贝塞尔曲线
paint.setStyle(Paint.Style.STROKE);
paint.setColor(Color.RED);
Path path1=new Path();
path1.moveTo(100,620);
path1.quadTo(150,550,170,700);
canvas.drawPath(path1,paint);
//画图片
Bitmap bitmap= BitmapFactory.decodeResource(getResources(),R.drawable.pic6);
// canvas.drawBitmap(bitmap,100,610,paint);//不限定图片大小 只指定左上角坐标
RectF rectF=new RectF(100,710,400,1010);
canvas.drawBitmap(bitmap,null,rectF,paint);//限定图片显示范围
//-----------------设置渐变后绘制------------------
//Paint设置渐变器
Shader mShader=new LinearGradient(0,0,40,60,
new int[]{Color.RED,Color.GREEN,Color.BLUE,Color.YELLOW},
null,Shader.TileMode.REPEAT);
paint.setShader(mShader);
paint.setStyle(Paint.Style.FILL);
//设置阴影
paint.setShadowLayer(45,10,10,Color.BLACK);
canvas.drawRect(440,710,640,910,paint);
}
}
4.效果图:
public class DrawView extends View {
public DrawView(Context context) {
super(context);
}
public DrawView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
/*
* 方法 说明 drawRect 绘制矩形 drawCircle 绘制圆形 drawOval 绘制椭圆 drawPath 绘制任意多边形
* drawLine 绘制直线 drawPoin 绘制点
*/
//设置画笔
Paint paint=new Paint();
paint.setAntiAlias(true);
paint.setColor(Color.RED);
paint.setStyle(Paint.Style.STROKE);
//画文本
canvas.drawText("画圆",20,30,paint);
//画圆
canvas.drawCircle(100,30,30,paint);
//画线
paint.setColor(Color.BLACK);
canvas.drawText("画线及圆弧",10,80,paint);
canvas.drawLine(10,90,310,90,paint);//直线
canvas.drawLine(330,90,430,150,paint);//斜线
//画圆弧及扇形
RectF oval1=new RectF(10,160,110,260);
paint.setColor(Color.GREEN);
canvas.drawArc(oval1,180,180,false,paint);
//第一个参数:范围 第二个参数:开始角度 第三个参数:圆弧度数
//第四个参数:false---圆弧 true---扇形
//第五个参数:画笔
oval1.set( 120,160,220,260);
canvas.drawArc(oval1,20,60,true,paint);
oval1.set(230,160,330,260);
canvas.drawArc(oval1,200,240,true,paint);
//画矩形
paint.setColor(Color.BLUE);
canvas.drawRect(10,280,210,380,paint);
//绘制圆角矩形
RectF re1=new RectF(250,280,450,380);
canvas.drawRoundRect(re1,15,15,paint);
//画椭圆
RectF re2=new RectF(10,400,210,500);
canvas.drawOval(re2, paint);
//画三角形
paint.setColor(Color.DKGRAY);
Path path=new Path();
path.moveTo(70,520);
path.lineTo(10,580);
path.lineTo(130,580);
path.close();
canvas.drawPath(path,paint);
//画点
paint.setStyle(Paint.Style.FILL);
canvas.drawPoint(10,600,paint);//一个点
canvas.drawPoints(new float[]{20,600,30,600,40,600},paint);//多个点
//画贝塞尔曲线
paint.setStyle(Paint.Style.STROKE);
paint.setColor(Color.RED);
Path path1=new Path();
path1.moveTo(100,620);
path1.quadTo(150,550,170,700);
canvas.drawPath(path1,paint);
//画图片
Bitmap bitmap= BitmapFactory.decodeResource(getResources(),R.drawable.pic6);
// canvas.drawBitmap(bitmap,100,610,paint);//不限定图片大小 只指定左上角坐标
RectF rectF=new RectF(100,710,400,1010);
canvas.drawBitmap(bitmap,null,rectF,paint);//限定图片显示范围
//-----------------设置渐变后绘制------------------
//Paint设置渐变器
Shader mShader=new LinearGradient(0,0,40,60,
new int[]{Color.RED,Color.GREEN,Color.BLUE,Color.YELLOW},
null,Shader.TileMode.REPEAT);
paint.setShader(mShader);
paint.setStyle(Paint.Style.FILL);
//设置阴影
paint.setShadowLayer(45,10,10,Color.BLACK);
canvas.drawRect(440,710,640,910,paint);
}
}






