Android开发者文档中关于绘图的描述
The Canvas class holds the “draw” calls. To draw something, you need 4 basic components: A Bitmap to hold the pixels, a Canvas to host the draw calls (writing into the bitmap), a drawing primitive (e.g. Rect, Path, text, Bitmap), and a paint (to describe the colors and styles for the drawing).
翻译如下
在Android中如果想完成画的操作,你需要4个组件,一个Bitmap来存储像素,一个Canvas用来调用draw函数,一个作画的图元(Primitive)(比如Rect,Path,text,Bitmap)和一个用来描述作画颜色和风格的Paint.
这篇只是包含了总体的,会用到的内容,不涉及具体的细节.
Canvas
相关类
- RectF,参数是float类型的矩形
- Rect,参数是int类型矩形
- Region.Op,作用是裁剪过程中的参数,一般用于两个形状之间的共同部分等,类似于PorterDuffXfermode
- Matirx 矩阵,canvas在进行一些涉及到坐标系的操作的时候,就会利用到Matrix的坐标系,具体来说,那些改变的实质方法就是坐标系的改变,画布中的实际内容没有发生改变
- ColorSpace,设置颜色空间,比如rgb,srbg,DCI_P3
函数种类
- clip类函数,作用是裁剪画布的某一个区域,但是实际上相关的Bitmap还是那么大的,如果想让裁剪后的大小改变,可以用Bitmap.createBitmap方法来进行裁剪
- draw函数,根据提供的参数和画笔绘制图形
- 旋转(rotate),平移(translate),缩放(scale),错切(skew,参数是区域角度的变化,如果不设置,就相当于正无穷)
- save,restore,配对使用,save函数首先记录画布当前的状态,然后进行旋转,平移,缩放,错切等操作,这个过程中遵循的是新的坐标系操作完成后调用restore函数恢复状态,restore函数不能比save函数多,否则会报错
- isOpaque(不透明)
- setColor,设置颜色,包括透明的
- quickReject函数可以用来判断UI是否在某一个图层中,经常用来判断是否可见,减少绘制,从而提升性能问题(OverDraw).相同功能的还有clipReject函数
Paint
相关类:
Xfermode, 子类PorterDuffXfermode可以用来画图遮掩,类似于shader,但是功能更多
FontMetrics 设置文字相关的属性,包含ascent,bottom,descent,leading,top
Shader 子类BitmapShader可以用来给Bitmap设置背景,然后在上面图层
- Paint默认为实心,如果想设置空心,调用paint.setStyle(Paint.Style.STROKE);
设置属性
- setColor 设置画笔颜色,可以设置为透明
- setAntiAlias 设置抗锯齿特性
- setShader 在某一个区域设置背景
- breakText 用于截断长文字
- setStyle 设置填充属性,如果不设置,默认是填满
控制
- reset 复位Paint到默认的内容
- clearShadowLayer 清除图层
- set 复制一个已经存在的画笔
Bitmap
创建方法
- createBitmap方法,根据不同的参数可以获取不同的效果,比如截取老的bitmap的一部分生成新的bitmap
- copy函数获得一个相同的
- extractAlpha 把原图的rgb值设置为0,只提出alpha也就是轮廓,可以用来作边缘光晕效果.
- BitmapFactory.decode()可以把其他类型的对象转换为bitmap
设置项和功能
- eraseColor填充颜色
- compress把当前Bitmap的压缩版本输入到流中
- 其他设置项