美文网首页
Canvas绘制类

Canvas绘制类

作者: jadefly | 来源:发表于2018-11-01 17:12 被阅读0次

绘制类:canvas.drawXXX(基本信息,paint控制颜色、风格等) ,draw颜色、点线、图形、路径、图片、文字等

canvas绘制

drawPicture

简介:可以看作是一个录制Canvas操作的录像机,将操作录制下来重复调用,开销小。

使用

drawBitmap详解

drawBitmap(Bitmap bitmap, Matrix matrix, Paint paint) 矩阵变换

Matrix 中的几个常用的变换方法:

setTranslate(float dx, float dy):控制Matrix进行平移;

setRotate(float degrees, float px, float py):旋转,参数依次是:旋转角度,轴心(x,y);

setScale(float sx, float sy, float px, float py):缩放, 参数依次是:X,Y轴上的缩放比例;缩放的轴心;

setSkew(float kx, float ky):倾斜(扭曲),参数依次是:X,Y轴上的缩放比例;

reset():重置

drawBitmap (Bitmap bitmap, Rect src, Rect dst, Paint paint)

src:指定绘制图片的区域

dst:指定图片在屏幕上显示(绘制)的区域

场景

drawBitmapMesh(Bitmap bitmap, int meshWidth, int meshHeight, float[] verts, int vertOffset, int[] colors, int colorOffset, Paint paint)

网格拉伸效果/图像扭曲

参数:meshWidth/meshHeight:在横/纵向上把原位图划分为多少格;

           verts:长度为(meshWidth+1)*(meshHeight+1)*2的一维数组,记录扭曲后位图各顶点(网格线交点) 位置,控制扭曲效果;

                        (假设横纵都为1格,则有2*2=4个顶点,8个长度的float[]存储)

           vertOffset:控制verts数组从第几个数组元素开始对bitmap进行扭曲(忽略verOffset之前数据的扭曲效果);

过程

drawPath详解

API

contour:外形、轮廓,指一次不间断的连线,一个 Path 可以包含多个轮廓。eg:一个圆形,一条曲线都是一个轮廓

                addXXX()每一次方法调用都新增了一个独立的轮廓

                xxxTo()每一次断线(即每一次「抬笔」),都标志着一个轮廓的结束,以及一个新的轮廓的开始

1.addXXX 添加轮廓(完整封闭图形 除addPath)

    Path也可以添加基本图形,addCircle、addRect、addPath(Path path) 添加另一个 Path

    eg:addCircle(float x, float y, float radius, Direction dir) 添加圆,参数:圆的基本信息,画圆的路径方向

                        Direction路径方向:Path.Direction.CW 顺时针,CCW 逆时针 

                        Direction只在图形出现自相交并且需要填充图形,用于判断填充范围时需要

    注:如果只是画图形,直接使用canvas.draw图形更方便,path一般用于复杂的组合图形中

2.xxxTo 画线(直线或曲线)

    lineTo/ rLineTo(float x, float y) 画直线,从当前位置向目标位置(x,y)画一条直线

    区别:lineTo采用绝对坐标,rLineTo采用相对坐标,即把当前位置作为坐标原点来定位目标位置

画直线

    quadTo(float x1, float y1, float x2, float y2)画二次贝塞尔曲线

    贝塞尔曲线:通过起点(当前位置)、控制点(x1, y1)和终点(x2, y2)来描述一条曲线

    cubicTo(float x1, float y1, float x2, float y2, float x3, float y3)画三次贝塞尔曲线(两个控制点)

    moveTo(float x, float y) 移动到目标位置

    由于直线曲线都以当前位置做为绘制起点,使用moveTo可以改变当前位置,间接设置绘制的起点

    arcTo(RectF oval, float startAngle, float sweepAngle, boolean forceMoveTo) 画弧形

    sweepAngle范围在[-360, 360),不在范围内不绘制

    相比canvas.drawArc(),少了参数useCenter,即不用于判断是否连接到圆心,也就不会画扇形

                                          多了参数forceMoveTo,是否强制移动到弧形起点

是否强制移动到弧形起点的区别

    注:path.addArc()是一个直接使用了 forceMoveTo = true 的简化版 arcTo()

    close() 封闭当前轮廓

    即由当前位置向当前轮廓的起点绘制一条直线,等价于lineTo(起点坐标)

3.辅助的设置或计算 eg:填充模式

    Path.setFillType(Path.FillType ft) 设置填充方式,用来设置图形自相交时的填充算法

    取值:EVEN_ODD、WINDING (默认值)、 INVERSE_EVEN_ODD、INVERSE_WINDING

               后两个是前两个的取反,所以只需搞懂前两个即可

奇偶相交 方向相交

    图形方向:addXXX()方向由方法参数Direction控制

                      xxxTo()线的方向就是图形的方向

对比

drawText详解

1.drawText():最基本的根据文字内容和位置进行绘制,也可只绘制部分文字 [ 前开后闭 )

    文字绘制从左下角开始, x:从文字最左边留出的空隙开始,y:基线的位置

位置

2.drawPosText():指定每个字符的位置(必须全指定)

3.drawTextRun():国外少部分文字需要用到

4.drawTextOnPath():沿着一条 Path 来绘制文字

沿路径绘制文字

StaticLayout绘制换行文字

Canvas.drawText() 只能绘制单行的文字,而不能换行,使用换行符也不行

StaticLayout 支持换行的类,不是View/ViewGroup,支持根据宽度上限换行和换行符换行

参数:width 是文字区域的宽度,文字到达这个宽度后就会自动换行; 

           align 是文字的对齐方向; 

           spacingmult 是行间距的倍数,通常情况下填 1 就好; 

           spacingadd 是行间距的额外增加值,通常情况下填 0 就好; 

           includeadd 是指是否在文字上下添加额外的空间,来避免某些过高的字符的绘制出现越界。

使用:StaticLayout staticLayout = new StaticLayout(text1, paint,600,Layout.Alignment.ALIGN_NORMAL,1,0,true);

           staticLayout.draw(canvas);//适用于对文字的排列和样式没有太复杂的花式要求,只需进行多行文字的绘制

相关文章

  • Adnroid 自定义View相关API和方法(未完)

    Canvas类相关API 1、绘制圆 drawCircle 2、绘制矩形 RectF,Rect 3、绘制圆角矩形 ...

  • Android自定义View之draw系方法

    Canvas是Android绘制的基础,onDraw方法提供Canvas类来帮助开发者绘制内容,为了加强自己的印象...

  • Canvas绘制类

    绘制类:canvas.drawXXX(基本信息,paint控制颜色、风格等) ,draw颜色、点线、图形、路径、图...

  • css三角制作

    第一类:通过使用border绘制 第二类:通过css样式的渐变绘制 第三类: 使用canvas进行绘制,不算css

  • html5 canvas入门知识

    什么是canvas? 使用canvas,可以在网页上绘制图像。我们常见的图表类网页、地图类网页上面那些复杂的图像、...

  • Android Canvas

    Android官方源码中对Canvas的描述是:“Canvas类容纳所有和Draw(绘制)相关方法。为了去Draw...

  • 自定义View的各个重要的类和属性

    1 、Path类详解 2、Paint详解 3、Canvas详解 4 、绘制雷达图

  • Android高级UI_Path小试牛刀<一>

    我们知道Android中Canvas类对象可以进行绘制事物,里面有一个方法为canvas.drawPath方法,这...

  • 2D画平面图形

    一、绘制2D图形使用四个类 Canvas:画布类,相当于手机屏幕 Paint:画笔类,使用相关方法绘制图形 Rec...

  • 浅析HTML5的Canvas——案例绘制

    1. Canvas绘制五环 2.Canvas绘制饼状图以及绘制文字 3. Canvas绘制一堆不断变大变小的随机移...

网友评论

      本文标题:Canvas绘制类

      本文链接:https://www.haomeiwen.com/subject/hpeatqtx.html