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);
到此,一开始设置的阴影总算是出来了,看来除了对字体有效弧形也是可以的。
好了 今天到此为止,下期再见。
- canvas 详解(一)
- Android Canvas详解(一)
- canvas绘图详解笔记(一)
- canvas绘图详解笔记(一)
- canvas绘图详解笔记(一)
- canvas绘图详解笔记(一)
- canvas绘图详解笔记(一)
- canvas绘图详解笔记(一)
- canvas绘图详解笔记(一)
- canvas绘图详解笔记(一)
- canvas绘图详解笔记(一)
- canvas绘图详解笔记(一)
- canvas绘图详解笔记(一)
- canvas绘图详解笔记(一)
- canvas绘图详解笔记(一)
- canvas绘图详解笔记(一)
- canvas绘图详解笔记(一)
- 图形绘制之——Canvas详解(一)
- 计算几何+并查集处理:POJ 1127 Jack Straws
- [kmp算法next数组的应用][poj1961]Period
- Oracle Study之--Oracle 11gR2访问ASM diskgroup错误
- 基本TCP套接字编程
- C语言字符串函数大全
- canvas 详解(一)
- BMP与IplImage相互转换
- 【Cocos2dx 3.3 Lua】定时器事件
- ListView 的三种适配器 BaseAdapter ArrayAdapter SimpleAdapter(1)
- 如何将当前时间去掉十分秒
- [Java]读取文件方法大全
- 路由器定时重启脚本
- JDBC、事务、数据库连接池、DBUtils
- viewpager+fragment出现fragment不显示问题