android canvas和paint

一个画图需要3个基本元素
1.Bitmap(用来保存像素)   2.Canvas()绘制Bitmap   3.paint

Canvas对象的获取
1.view的onDraw()方法中自带canvas参数  2.创建Canvas 必须结合Bitmap对象
   Bitmap b = Bitmap.createBitmap(100,100,Bitmap.Config.ARGB_8888);
   Canvas c = new Canvas(b);
   或者
   Canvas c = new  Canvas()
   c.setBitmap(b);
Canvas 可以绘制的内容
填充
drawARGB(int a,int r, int g, int b)
drawColor(int color)
drawRGB(int r,int g,int b)
drawRGB(int color,porterDuff.Mode)

几何图形
canvas.drawArc 扇形
canvas.drawCircle
canvas.drawOval椭圆
canvas.drawLine
canvas.drawPoint
canvas.drawRect
canvas.drawRoundRect
canvas.drawVertices定点
canvas.drawPath
图片
canvas.drawBitmap位图
canvas.drawPicture
文本
canvas.drawText


canvas的保存和回滚
代码
public native int save();保存当前的matix和clip到私有的栈 调用restore的时候回返回该位置 

public native int save();传入一个标志位,来表示restore的时候,哪些参数需要还原,该参数定义在canvas中

public native void restore();回到上一个save调用之前的状态,如果restore调用的次数大于save方法,会出错

public native int getSaveCount();返回占中保存的状态,值等译save调用次数-restore调用次数

public native void restoreToCount(int saveCount);回调任何一个save方法调用之前的状态

paint画笔的一些方法和应用

[java]  view plain copy print ?
  1. canvas = sfh.lockCanvas();  
  2. if (canvas != null) {  
  3.     canvas.drawColor(Color.WHITE);  
  4.     //-----设置画笔无锯齿  
  5.     Paint paint1 = new Paint();  
  6.     canvas.drawCircle(403020, paint1);  
  7.     paint1.setAntiAlias(true);  
  8.     canvas.drawCircle(1003020, paint1);  
  9.     //-----设置画笔的透明度  
  10.     canvas.drawText("无透明度"10070new Paint());  
  11.     Paint paint2 = new Paint();  
  12.     paint2.setAlpha(0x77);  
  13.     canvas.drawText("半透明度"2070, paint2);  
  14.     //-----设置绘制文本的锚点  
  15.     canvas.drawText("锚点"2090new Paint());  
  16.     Paint paint3 = new Paint();  
  17.     //设置以文本的中心点绘制  
  18.     paint3.setTextAlign(Paint.Align.CENTER);  
  19.     canvas.drawText("锚点"20105, paint3);  
  20.     //------获取文本的长度  
  21.     Paint paint4 = new Paint();  
  22.     float len =paint4.measureText("文本宽度:");  
  23.     canvas.drawText("文本长度:"+len, 20130new Paint());  
  24.     //------设置画笔样式  
  25.     canvas.drawRect(new Rect(20,140,40,160), new Paint());  
  26.     Paint paint5 = new Paint();  
  27.     //设置画笔不填充  
  28.     paint5.setStyle(Style.STROKE);  
  29.     canvas.drawRect(new Rect(60,140,80,160), paint5);  
  30.     //------设置画笔颜色  
  31.     Paint paint6 = new Paint();  
  32.     paint6.setColor(Color.GRAY);  
  33.     canvas.drawText("灰色"30180, paint6);  
  34.     //------设置画笔的粗细程度  
  35.     canvas.drawLine(20200,70200new Paint());  
  36.     Paint paint7 = new Paint();  
  37.     paint7.setStrokeWidth(7);  
  38.     canvas.drawLine(20220,70220,paint7);  
  39.     //------设置画笔绘制文本的字体粗细  
  40.     Paint paint8 = new Paint();  
  41.     paint8.setTextSize(20);  
  42.     canvas.drawText("文字尺寸"20260, paint8);  
  43.     //------设置画笔的ARGB分量  
  44.     Paint paint9 = new Paint();  
  45.     paint9.setARGB(0x770xff0x000x00);  
  46.     canvas.drawText("红色半透明"20290, paint9);  
  47. }  


paint的参数介绍
setARGB(int a,int r,int g,int b)a代表透明度 r,g,b代表颜色色值

setAlpha(int a) 设置绘制图形的透明度

setColor(int color)

setAntiAlias(boolean aa) 设置是否使用抗锯齿功能,会消耗很大资源,绘制图形较慢

setDlither(boolean dither)设置是否使用图像抖动处理,会使绘制出来的图像颜色更加平滑,图像更加清晰

setFilterBitmap(boolean filter) true :图像在绘制过程中会滤对Bitmap图像的优化操作加快像是速度,本设置依赖ditcher和xfermode的设置

setMaskFilter(ColorFilter colorFilter)设置颜色的过滤器,可以再绘制颜色时实现不同颜色的变换效果

setPathEfferv(PathEffect effect)设置绘制路径的效果

setShader(Shader shader)

setShadowLayer(float radius,float dx, float dy,int color) 在图形下面设置阴影层,产生阴影效果,radius为阴影的角度,dx和dy为阴影在x轴和y轴上的距离,color为阴影的颜色 

setStyle(Paint.Style style)设置画笔的样式 为 FULL,FULL_OR_STROKE,STROLE

setSrokeJoin(Paint.Join join) 设置绘制时个图形的结合方式

setStrokeWidth(float width)当画笔样式为STROKE或FILL_OR_STROKE时,设置笔刷的粗细度       

setXfermode(Xfermode xfermode);  

设置图形重叠时的处理方式,如合并,取交集或并集,经常用来制作橡皮的擦除效果  


setFakeBoldText(boolean fakeBoldText0)模拟实现粗体文字,设置在小字体上效果差

setSubpixelText(boolean subpixelText) true ,有助于文本在LCD屏幕上显示

setTextAlign(Paint.Align align) 设置绘制文字的对齐方向

setTextScaleX(float scaleX)设置绘制文字在x轴的缩放比例,实现文字的拉伸效果

setTextSize(float textSize)

setTextSkewX(float skewX)设置文字的倾斜度

setUnderLineText(boolean underLineText)

setStrikeThruText(boolean strikeThruText) 设置带有删除线效果


你可能感兴趣的:(android canvas和paint)