自定义View中画布相关类及画布测量坐标系。
2015-11-20 10:51
363 查看
canvas类介绍
Canvas这个类相当于一个画布,你可以在里面画很多东西;
我们可以把这个Canvas理解成系统提供给我们的一块内存区域(但实际上它只是一套画图的API,真正的内存是下面的Bitmap),而且它还提供了一整套对这个内存区域进行操作的方法,所有的这些操作都是画图API。也就是说在这种方式下我们已经能一笔一划或者使用Graphic来画我们所需要的东西了,要画什么要显示什么都由我们自己控制。
这种方式根据环境还分为两种:一种就是使用普通View的canvas画图,还有一种就是使用专门的SurfaceView的canvas来画图。两种的主要是区别就是可以在SurfaceView中定义一个专门的线程来完成画图工作,应用程序不需要等待View的刷图,提高性能。前面一种适合处理量比较小,帧率比较小的动画,比如说象棋游戏之类的;而后一种主要用在游戏,高品质动画方面的画图。
canvas常用方法:
其下方法中[b] Paint paint;表示画笔类。。其后讨论,[/b]
Paint类
想象成可变的一只笔
在绘图过程中起到了极其重要的作用,画笔主要保存了颜色,
* 样式等绘制信息,指定了如何绘制文本和图形,画笔对象有很多设置方法,
* 大体上可以分为两类,一类与图形绘制相关,一类与文本绘制相关。
Path类
表示一个路径轨迹
常用方法
相关实现博文链接: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最大为屏幕大小。
Canvas这个类相当于一个画布,你可以在里面画很多东西;
我们可以把这个Canvas理解成系统提供给我们的一块内存区域(但实际上它只是一套画图的API,真正的内存是下面的Bitmap),而且它还提供了一整套对这个内存区域进行操作的方法,所有的这些操作都是画图API。也就是说在这种方式下我们已经能一笔一划或者使用Graphic来画我们所需要的东西了,要画什么要显示什么都由我们自己控制。
这种方式根据环境还分为两种:一种就是使用普通View的canvas画图,还有一种就是使用专门的SurfaceView的canvas来画图。两种的主要是区别就是可以在SurfaceView中定义一个专门的线程来完成画图工作,应用程序不需要等待View的刷图,提高性能。前面一种适合处理量比较小,帧率比较小的动画,比如说象棋游戏之类的;而后一种主要用在游戏,高品质动画方面的画图。
canvas常用方法:
其下方法中[b] Paint paint;表示画笔类。。其后讨论,[/b]
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最大为屏幕大小。
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories