自定义View中画布相关类及画布测量坐标系。

原创 2015年11月20日 10:51:01

canvas类介绍

Canvas这个类相当于一个画布,你可以在里面画很多东西;

我们可以把这个Canvas理解成系统提供给我们的一块内存区域(但实际上它只是一套画图的API,真正的内存是下面的Bitmap),而且它还提供了一整套对这个内存区域进行操作的方法,所有的这些操作都是画图API。也就是说在这种方式下我们已经能一笔一划或者使用Graphic来画我们所需要的东西了,要画什么要显示什么都由我们自己控制。

这种方式根据环境还分为两种:一种就是使用普通View的canvas画图,还有一种就是使用专门的SurfaceView的canvas来画图。两种的主要是区别就是可以在SurfaceView中定义一个专门的线程来完成画图工作,应用程序不需要等待View的刷图,提高性能。前面一种适合处理量比较小,帧率比较小的动画,比如说象棋游戏之类的;而后一种主要用在游戏,高品质动画方面的画图。

canvas常用方法:

 其下方法中 Paint paint;表示画笔类。。其后讨论,

canvas.drawRect(float left, float top, float right, float bottom, Paint paint)        //画一个矩形区域!left ,top,right,bottom,分别表示矩形左上右下的距离屏幕距离值。
canvas.drawCircle(float cx, float cy, float radius, Paint paint)    //画一个圆!cx cy,radiu  表示园心的左上距离屏幕值和园半径。

canvas.drawLine(float startX, float startY, float stopX, float stopY, Paint paint)  //画一个线! 参数表示直接翻译得知线的起始点坐标XY,与终止点坐标XY;    构成两点一线;

canvas.drawArc(RectF oval, float startAngle, float sweepAngle, boolean useCenter,Paint paint) //利用矩形绘制一段弧形!对矩形内切圆,参数oval表示外切矩形的左上右下值  ,startAngel表示 弧形开始起点(内切图的圆心右方表示0度 起点 90度正下方。180度左边),sweepAngle 表示 划过的度数,( 设置360则表示一个内切圆,180则是一半,) UseCenter表示是否将弧线两端连接圆心做线(常用得到扇形处理true)。 

canvas.drawPath(Path path, Paint paint)         //画一条轨迹!Path 表示 一个路径类, Path类中的方法(比如lineTo,quadTo)可以通过指定轨迹进行路径,然后通过canvas画出来。
canvas.drawPoint(float x, float y, Paint paint)  //画单个点!drawPoints(float[] pts, Paint paint) //画一堆点 ,

Paint类 

想象成可变的一只笔

在绘图过程中起到了极其重要的作用,画笔主要保存了颜色,  

     * 样式等绘制信息,指定了如何绘制文本和图形,画笔对象有很多设置方法,  

     * 大体上可以分为两类,一类与图形绘制相关,一类与文本绘制相关。


<pre name="code" class="java">setAlpha(int a) // 设置alpha不透明度,范围为0~255

setAntiAlias(boolean aa) // 是否抗锯齿

setColor(int color)  // 设置颜色,这里Android内部定义的有Color类包含了一些常见颜色定义

setTextScaleX(float scaleX)  // 设置文本缩放倍数,1.0f为原始

setTextSize(float textSize)  // 设置字体大小

setStyle(Style style) //设置样式

setUnderlineText(booleanunderlineText)  // 设置下划线
setPathEffect()  //设置路径样式


Path类    

表示一个路径轨迹

常用方法

reset()// 重新设置Path值,,但是不改变内部的样式
moveTo(float x,float y) //设置轨迹起点
rMoveTo(float x,float y) //重新设置起点  如果没有moveTo则 等同于moveTo
lineTo(float x,float y)// 一条线的轨迹  ,如果没有moveto则 从(0,0)开始画
quadTo(float x1, float y1,float x2,float y2) // 贝塞尔曲线,,其实别想得太复杂就是画曲线一算法,x1,x2表示控制点(何为控制点,自行百度),x2,y2表示终点 ,如果没有moveTo 则从(0.0)开始
public void cubicTo(float x1, float y1, float x2, float y2, float x3, float y3)  //立方 曲线   前面x1,x2,y1,y2都是控制点.X3.Y3结束点

close()//是的轨迹成为封闭的图形,,常用作多边形 。


相关实现博文链接:Path类的绘制效果相关类

Android中Path类的lineTo方法和quadTo方法画线的区别


测量坐标系


1。View获得布局位置后onlayout后 可在ondraw中得到。,getTop()返回得到
2。同上,getBottom()返回得到,
3。同上,getLeft()返回得到,
4。同上,getRigth()返回得到,

5。view自身测量完后得到的值onMeasure后都可以得到,getMeasuredHeight()
6。同上getMeasuredWidth()。

注意点 getwidth 与getHeight 并不能测量后就得到。底层通过rigth - left ,bottom-top得到。
一般情况下与measures的值一样。当measure的值超过屏幕了,就不一样。getwidth最大为屏幕大小。


版权声明:欢迎你来转载,不过请带个此Blog链接!

Canvas画各种图形及控件在屏幕中的坐标-android

> Canvas画各种图形(点、直线、弧、圆、椭圆、文字、矩形、多边形、曲线、圆角矩形) http://blog.csdn.net/rhljiayou/article/details/7212620 ...
  • ShareUs
  • ShareUs
  • 2016年06月22日 12:03
  • 5723

安卓自定义View进阶-Canvas之画布操作

上一篇【Canvas 之绘制基本形状】中我们了解了如何使用 Canvas 绘制基本图形,本次了解一些基本的画布操作。合理的使用画布操作可以帮助你用更容易理解的方式创作想要的效果。...
  • u013831257
  • u013831257
  • 2016年01月28日 12:54
  • 10363

HTML5画布Canvas坐标轴转换、图案填充、渐变与阴影

上一篇文章我们了解了一些canvas基本图形绘制  下面我们再来看一些相关操作 坐标轴变换 我们画布中默认的坐标轴与浏览器坐标轴相同  x正半轴朝右  y正半轴朝下  但是我们可以...
  • dx18520548758
  • dx18520548758
  • 2017年01月10日 17:32
  • 2412

自定义View学习笔记05—Canvas下操作画布

为什么要有画布操作? 疑问======>>>以默认的坐标系圆点为起点,画一条与X轴呈45°的射线,你会怎么操作?以常规的数学思路来看,先使用三角函数计算出射线上任一点的坐标,然后调用drawLine...
  • haoyuegongzi
  • haoyuegongzi
  • 2017年12月25日 22:35
  • 28

Android自定义View之画笔与画布

现在做的这个项目需要一个折线图的功能,当时想着使用第三方库来实现,结果总不能令我满意,只能通过自定义View用画笔去画了,这才发现 妈的 这东西我不会 赶紧去百度下,后来李大神把他画的折线图给我了,我...
  • u010069940
  • u010069940
  • 2016年07月29日 17:43
  • 2183

自定义View起步:画布(Canvas)的基本操作

上一节讲到了如何用画布绘制基本的图形,但是很多的图形绘制也离不开对画布的操作,比如图形的位移,缩放,错切,图层的保存,回滚等,使用我们的Canvas自带的一些api可以为我们减少很多复杂的数学运算。大...
  • hnzcdy
  • hnzcdy
  • 2017年03月29日 17:09
  • 420

安卓自定义View进阶-Canvas之画布操作

上一篇Canvas之绘制基本图形中我们了解了如何使用Canvas绘制基本图形,本次了解一些基本的画布操作。 本来想把画布操作放到后面部分的,但是发现很多图形绘制都离不开画布操作,于是先讲解一下画...
  • osle123
  • osle123
  • 2016年10月08日 15:00
  • 384

自定义View之Canvas之画布操作(转载)-6

自定义View之Canvas之画布操作(转载)-6原文作者: GcsSloop原文链接上一篇Canvas之绘制基本形状中我们了解了如何使用Canvas绘制基本图形,本次了解一些基本的画布操作。本来想把...
  • zrbcsdn
  • zrbcsdn
  • 2017年04月11日 18:30
  • 148

Android 绘图基础:Canvas画布——自定义View基础(绘制表盘、矩形、圆形、弧、渐变)

(转自:http://blog.csdn.net/danfengw/article/details/48503619)     今天学习了Canvas画布,感觉挺好玩的,通过它我们可以自定...
  • Baby_T
  • Baby_T
  • 2016年10月17日 10:55
  • 590

【Android】自定义View、画布Canvas与画笔Paint

安卓自定义View其实很简单。这个View可以像《【Android】利用Java代码布局,按钮添加点击事件》(点击打开链接)一样,利用Java代码生成一系列的组件。也可以配合画布Canvas与画笔Pa...
  • yongh701
  • yongh701
  • 2015年07月08日 10:34
  • 2437
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:自定义View中画布相关类及画布测量坐标系。
举报原因:
原因补充:

(最多只允许输入30个字)