canvas以及paint的一些介绍

//bitmap可以获得图像文件信息,然后进行旋转剪切等操作,而且可以指定格式保存图像文件。但bitmap是将图像信息全部存入内存中,所以也容易引发oom

bitmap:画布
canvas:画家
paint:画笔
drawable:就是将画出来的东西展示出来的接口

**获取canvas2个方式:**
1、一种是自定义view和自定义SurfaceView对象获取canvas。

由于自定义view和SurfaceView在界面中已经获得了显示区域,所以canvas只不过在其显示区域上进行布局的设计,完成后,系统会显示canvas的操作结果。
自定义view获取canvas

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

        }
自定义surfaceView获取canvas

SurfaceView surfaceView = new SurfaceView(this);
SurfaceHolder holder = surfaceView.getHolder();
Canvas canvas = holder.lockCanvas();
//Canvas canvas1 = holder.lockCanvas(new Rect(0, 0, 100, 100));
holder.unlockCanvasAndPost(canvas);//释放canvas锁,并显示视图

2、一种是代码创建canvas对象。这种情况需要我们在绘画结束后将画图区域转化为drawable图片,或者setBitmap(bitmap)展现。

Bitmap bitmap = Bitmap.createBitmap(100, 100, Bitmap.Config.ARGB_4444);//画布
Canvas canvas = new Canvas(bitmap);
//进行绘制操作….
//然后展示
Drawable drawable = new BitmapDrawable(bitmap) ;
imgView .setBackgroundDrawable(drawable) ;
//imgView .setImageBitmap(bitmap);

**canvas方法介绍:**

**clipxxx():**
就是在当前canvas显示区域上clip出一个新的绘制区域,这个新的绘制区域就是canvas的当前绘制区域了。

**save():**
保存由canvas绘制出来的东西。之后的操作不会对其产生影响。比如现在已经画好了,需要进行旋转,先save,再旋转,这样画的东西就会跟着一起旋转。如果想在旋转后进行操作就要调用restore方法,还原到原来的状态,然后进行操作。
比如画钟的那个例子,需要先画一个圆,然后画刻度。这个刻度就是旋转前先save保存已经画的东西,然后旋转一定的角度,画上刻度,然后restore原来的状态(没旋转时的状态),如此循环。

**restore():**
还原save方法之前保存的资源。

**drawxxx:**

**translate(float x,float y):**
移动canvas,x、y代表移动的px大小

**rotate(float degrees):**
旋转canvas

paint方法介绍:

 * Paint类介绍  
 *   
 * Paint即画笔,在绘图过程中起到了极其重要的作用,画笔主要保存了颜色,  
 * 样式等绘制信息,指定了如何绘制文本和图形,画笔对象有很多设置方法,  
 * 大体上可以分为两类,一类与图形绘制相关,一类与文本绘制相关。         
 *   
 * 1.图形绘制  
 * setARGB(int a,int r,int g,int b);  
 * 设置绘制的颜色,a代表透明度,r,g,b代表颜色值。  
 *   
 * setAlpha(int a);  
 * 设置绘制图形的透明度。  
 *   
 * setColor(int color);  
 * 设置绘制的颜色,使用颜色值来表示,该颜色值包括透明度和RGB颜色。  
 *   
* setAntiAlias(boolean aa);  
 * 设置是否使用抗锯齿功能,会消耗较大资源,绘制图形速度会变慢。  
 *   
 * setDither(boolean dither);  
 * 设定是否使用图像抖动处理,会使绘制出来的图片颜色更加平滑和饱满,图像更加清晰  
 *   
 * setFilterBitmap(boolean filter);  
 * 如果该项设置为true,则图像在动画进行中会滤掉对Bitmap图像的优化操作,加快显示  
 * 速度,本设置项依赖于dither和xfermode的设置  
 *   
 * setMaskFilter(MaskFilter maskfilter);  
 * 设置MaskFilter,可以用不同的MaskFilter实现滤镜的效果,如滤化,立体等       *   
 * setColorFilter(ColorFilter colorfilter);  
 * 设置颜色过滤器,可以在绘制颜色时实现不用颜色的变换效果  
 *   
 * setPathEffect(PathEffect effect);  
 * 设置绘制路径的效果,如点画线等  
 *   
 * setShader(Shader shader);  
 * 设置图像效果,使用Shader可以绘制出各种渐变效果  
 *  
 * setShadowLayer(float radius ,float dx,float dy,int color);  
 * 在图形下面设置阴影层,产生阴影效果,radius为阴影的角度,dx和dy为阴影在x轴和y轴上的距离,color为阴影的颜色  
 *   
 * setStyle(Paint.Style style);  
 * 设置画笔的样式,为FILL,FILL_OR_STROKE,或STROKE  
 *   
 * setStrokeCap(Paint.Cap cap);  
 * 当画笔样式为STROKE或FILL_OR_STROKE时,设置笔刷的图形样式,如圆形样式  
 * Cap.ROUND,或方形样式Cap.SQUARE  
 *   
 * setSrokeJoin(Paint.Join join);  
 * 设置绘制时各图形的结合方式,如平滑效果等  
 *   
 * setStrokeWidth(float width);  
 * 当画笔样式为STROKE或FILL_OR_STROKE时,设置笔刷的粗细度  
 *   
 * setXfermode(Xfermode xfermode);  
 * 设置图形重叠时的处理方式,如合并,取交集或并集,经常用来制作橡皮的擦除效果  
 *   
 * 2.文本绘制  
 * setFakeBoldText(boolean fakeBoldText);  
 * 模拟实现粗体文字,设置在小字体上效果会非常差  
 *   
 * setSubpixelText(boolean subpixelText);  
 * 设置该项为true,将有助于文本在LCD屏幕上的显示效果  
 *   
 * setTextAlign(Paint.Align align);  
 * 设置绘制文字的对齐方向  
 *   
 * setTextScaleX(float scaleX);  
 * 设置绘制文字x轴的缩放比例,可以实现文字的拉伸的效果  
 *   
 * setTextSize(float textSize);  
 * 设置绘制文字的字号大小  
 *   
 * setTextSkewX(float skewX);  
 * 设置斜体文字,skewX为倾斜弧度  
 *   
 * setTypeface(Typeface typeface);  
 * 设置Typeface对象,即字体风格,包括粗体,斜体以及衬线体,非衬线体等  
 *   
 * setUnderlineText(boolean underlineText);  
 * 设置带有下划线的文字效果  
 *   
 *  setTextAlign(Paint.Align align);  
 * 设置绘制文字的对齐方向  
 * 
 * setUnderlineText(boolean underlineText);  
 * 设置带有下划线的文字效果  
 *   
 * setStrikeThruText(boolean strikeThruText);  
 * 设置带有删除线的效果
 * 
 * setStrikeThruText(boolean strikeThruText);  
 * 设置带有删除线的效果  
 *   
 * setDither(boolean dither);  
 * 设定是否使用图像抖动处理,会使绘制出来的图片颜色更加平滑和饱满,图像更加清晰  
 * 
 * setMaskFilter(MaskFilter maskfilter);  
 * 设置MaskFilter,可以用不同的MaskFilter实现滤镜的效果,如滤化,立体等   
 * 
 * setColorFilter(ColorFilter colorfilter);  
 * 设置颜色过滤器,可以在绘制颜色时实现不用颜色的变换效果
 * 
 * setShadowLayer(float radius ,float dx,float dy,int color);  
 * 在图形下面设置阴影层,产生阴影效果,radius为阴影的角度,dx和dy为阴影在x轴和y轴上的距离,color为阴影的颜色 
 *
  setStrokeCap(Paint.Cap cap);  
 * 当画笔样式为STROKE或FILL_OR_STROKE时,设置笔刷的图形样式,如圆形样式Cap.ROUND,或方形样式Cap.SQUARE
 * 
 * setXfermode(Xfermode xfermode);  
 * 设置图形重叠时的处理方式,如合并,取交集或并集,经常用来制作橡皮的擦除效果 ,比如圆形头像的制作
    */    
设置渐变色
Shader mShader = new LinearGradient(0, 0, 100, 100,new int[] {Color.RED, Color.GREEN, Color.BLUE, Color.YELLOW },new float[]{0 , 0.5f,1.0f}, Shader.TileMode.REPEAT);

参数:
起始点的x坐标
起始点的y坐标
终点的x坐标
终点的y坐标
渐变色的数组
定义每个颜色处于的渐变相对位置, 这个参数可以为null,如果为null表示所有的颜色按顺序均匀的分布
渐变模式:
            // REPEAT:沿着渐变方向循环重复

            // CLAMP:如果在预先定义的范围外画的话,就重复边界的颜色

            // MIRROR:与REPEAT一样都是循环重复,但这个会对称重复

dawArc(RectF f,float startAngel,float sweepAngel,boolean useCenter,Paint p)
//参数介绍
f:就是要画在画布上的矩形的范围。
startAngel:圆弧开始的角度
sweepAngel:圆弧扫过的角度(大于0顺时针)
useCenter:是否使用中心点
paint:画笔

drawArc(float left,float,top,float right,float bottom,float startAngel,float sweepAngel,boolean useCenter,Paint p)
同上,只不过讲矩形范围放在了参数中

drawBitmap()

drawBitmap(Bitmap bitmap, Rect src, RectF dst, Paint paint)
src:裁剪的图片的区域,若为null,则表示不裁剪,即为整个图片
dst:图片在canvas中显示的区域
drawBitmap(Bitmap bitmap, float left, float top, Paint paint)
left:左起点
top:上起点

drawCircle( float x,float y,float radius,Paint p)



drawColor(int color)

dawColor(int color,Mode mode)
Mode:




//画线
drawLine(float startx,float starty,float endx,float endy,Paint p)


//画椭圆,矩形区域内
drawOval(RectF f,Paint p)



//画点
drawPoint()




9、drawPicture()


10、drawPaint()

//画路径
drawPath(Path path,Paint paint)

Path path = new Path();
path.moveTo(x,y);
path.lineTo(x,y);
path.lineTo(x,y);
path.close();//闭合

由于path的起始点是(0,0),我们可以自己设置起始点,就是moveTo(x,y)
lineTo(x,y)就是下一个点。
close()方法是闭合的意思,如果闭合了,然后paint的style设置的是实心的,那么就会以paint的颜色填充该闭合区域,如果设置的是空心的那么就只有线有颜色。(开始很懵逼,然后自己猜测着试了一下,是这样的)

二级贝塞尔曲线:
path.moveTo(x,y);//左边起始点坐标
path.quadTo(x1,y1,x2,y2);//1控制点和2结束点
canvas.drawPath(path,paint);


//将文字一个一个画在点上面
drawPosText(String text,new Float[]{x,y,x,y,x,y,….},Paint p)
效果:

这里写图片描述

//画矩形
drawRect(Rect rect,Paint p)



14、drawRGB()

//画圆角矩形
drawRoundRect(Rect r,float x,float y,Paint p)
x:4个角的圆角的x半径
y:4个角的圆角的y半径


//将文字画在路径上
drawTextOnPath(String text,Path path,float startx,float starty,Paint p)
“`

17、drarVertices()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值