canvas 详解(一)

来源:互联网 发布:淘宝关注我链接地址 编辑:程序博客网 时间:2024/06/02 00:17

1.api概述

canvas顾名思义画布,我们要绘制一些东西,除了画布还需要paint画笔。通过画布设置我们所要绘制的图形的背景形状,而一些基本设置如大小,粗细,画笔颜色,透明度,和字体样式等均可以通过画笔来实现的。


首先了解下paint的几个基本函数设置

paint.setAntiAlias(true) 抗锯齿功能

paint.setColor(Color.BLUE)//设置画笔颜色

paint.setStyle(Style.STROKE);//设置填充样式

paint.setShadowLayer(5,15,15,Color.RED)//设置阴影

paint.setAlpha(10);//设置alpha不透明度,范围0-255

paint.setTextScaleX(5)//设置文本缩放倍数,1.0f为原始

paint.setTextSize(16)//设置字体大小

paint.setUnderlineText(true)//设置下划线


接下来对几个函数进行简单的介绍,锯齿和画笔颜色很简单

setStyle(style);//设置填充样式

panit的填充样式分为3中

Style.STROKE   描边

Style.FILL           填充

Style.FILL_AND_STROKE 填充加描边(貌似一般情况下跟FILL效果一样)


setShadowLayer(radius, dx, dy, color);//设置阴影

radis  阴影的倾斜度,为0时阴影移除

dx x轴偏移量

dy y轴偏移量

color 阴影颜色


画布背景设置

canvas.drawColor(Color.WHITE);设置颜色

canvas.drawBitmap(bitmap, matrix, paint);//设置背景图片,所绘制的内容以设置的图片为背景

canvas.drawARGB(a, r, g, b); //以颜色ARBG填充整个控件的背景


代码实例:

private Paint mPaint;
private Rect mRect;
private Context mContext;

public CanvasDemo(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
mPaint = new Paint();
mContext = context;
}

public CanvasDemo(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}

public CanvasDemo(Context context) {
this(context, null);
}

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
// TODO Auto-generated method stub
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}

@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);

mPaint.setAntiAlias(true);
mPaint.setColor(Color.RED);
mPaint.setStyle(Style.FILL_AND_STROKE);
mPaint.setStrokeWidth(5);
mPaint.setShadowLayer(10, 15, 15, Color.BLUE);

//绘制直线
// canvas.drawLine(100, 100, 200, 200, mPaint);
//绘制圆
// canvas.drawCircle(200, 200, 100, mPaint);



/**
* 该方法用于在画布上绘制多条直线,通过指定直线的端点坐标数组来绘制。该方法可以绘制多条直线,非常灵活。
* pts:绘制直线的端点数组,每条直线占用4个数据。
* paint:绘制直线所使用的画笔。
*
*/
// float[] pts = { 5, 10, 15, 10, 20, 30, 15, 15, 200, 300, 150, 150 };
// canvas.drawLines(pts, mPaint);



/**
* 有选择的绘制多条直线
* 该方法用于在画布上绘制多条直线,通过指定直线的端点坐标数组来绘制 Rect rect = new Rect(10, 10, 100, 100);
canvas.drawRect(rect, mPaint);。
* 该方法可以绘制多条直线,同时也可以指定哪些线段绘制,而哪些线段不绘制,更加灵活。
* pts:绘制直线的端点数组,每条直线占用4个数据。
* offset:跳过的数据个数,这些数据将不参与绘制过程。
* count:实际参与绘制的数据个数。
* paint:绘制直线所使用的画笔。
*/
float[] pts = { 10, 10, 500, 100,
200, 200, 400, 400 };
canvas.drawLines(pts, 1, 4, mPaint);
}

绘制点以及多点的绘制跟line的绘制基本大同小异,不再做介绍,下图为选择多线绘制,略过第一个值取后边四个进行绘制


矩形的绘制需要用到矩形的两个辅助工具类Rect  RectF,需要注意的是两个类只是精度不一样,一个是int类的数值,一个是float类的数值.

常用构造方法  Rect(left, top, right, bottom)

例 

canvas.drawRect(10, 10, 100, 100, mPaint);//直接构造

RectF rect = new RectF(120, 10, 210, 100);
canvas.drawRect(rect, mPaint);//使用RectF构造

Rect rect2 = new Rect(230, 10, 320, 100);
canvas.drawRect(rect2, mPaint);//使用Rect构造


canvas.drawRoundRect(rect, 10, 10, mPaint);//绘制圆角矩形



RectF rect = new RectF(100, 10, 300, 100);
//canvas.drawRect(rect, mPaint);// 画矩形

mPaint.setColor(Color.BLUE);// 更改画笔颜色
canvas.drawOval(rect, mPaint);// 同一个矩形画椭圆


椭圆的绘制是以所绘制的矩形的边框为基准绘制而成的

绘制弧形

RectF rect1 = new RectF(100, 10, 300, 100);
canvas.drawArc(rect1, 0, 90, true, mPaint);

RectF rect2 = new RectF(400, 10, 600, 100);
canvas.drawArc(rect2, 0, 90, false, mPaint);


到此,一开始设置的阴影总算是出来了,看来除了对字体有效弧形也是可以的。

好了 今天到此为止,下期再见。





0 0
原创粉丝点击