Canvas上绘制几何图形
- public class DrawView extends View {
- public DrawView(Context context) {
- super(context);
- }
- @Override
- protected void onDraw(Canvas canvas) {
- super.onDraw(canvas);
- /*
- * 方法 说明 drawRect 绘制矩形 drawCircle 绘制圆形 drawOval 绘制椭圆 drawPath 绘制任意多边形
- * drawLine 绘制直线 drawPoin 绘制点
- */
- // 创建画笔
- Paint p = new Paint();
- p.setColor(Color.RED);// 设置红色
- canvas.drawText("画圆:", 10, 20, p);// 画文本
- canvas.drawCircle(60, 20, 10, p);// 小圆
- p.setAntiAlias(true);// 设置画笔的锯齿效果。 true是去除,大家一看效果就明白了
- canvas.drawCircle(120, 20, 20, p);// 大圆
- canvas.drawText("画线及弧线:", 10, 60, p);
- p.setColor(Color.GREEN);// 设置绿色
- canvas.drawLine(60, 40, 100, 40, p);// 画线
- canvas.drawLine(110, 40, 190, 80, p);// 斜线
- //画笑脸弧线
- p.setStyle(Paint.Style.STROKE);//设置空心
- RectF oval1=new RectF(150,20,180,40);
- canvas.drawArc(oval1, 180, 180, false, p);//小弧形
- oval1.set(190, 20, 220, 40);
- canvas.drawArc(oval1, 180, 180, false, p);//小弧形
- oval1.set(160, 30, 210, 60);
- canvas.drawArc(oval1, 0, 180, false, p);//小弧形
- canvas.drawText("画矩形:", 10, 80, p);
- p.setColor(Color.GRAY);// 设置灰色
- p.setStyle(Paint.Style.FILL);//设置填满
- canvas.drawRect(60, 60, 80, 80, p);// 正方形
- canvas.drawRect(60, 90, 160, 100, p);// 长方形
- canvas.drawText("画扇形和椭圆:", 10, 120, p);
- /* 设置渐变色 这个正方形的颜色是改变的 */
- Shader mShader = new LinearGradient(0, 0, 100, 100,
- new int[] { Color.RED, Color.GREEN, Color.BLUE, Color.YELLOW,
- Color.LTGRAY }, null, Shader.TileMode.REPEAT); // 一个材质,打造出一个线性梯度沿著一条线。
- p.setShader(mShader);
- // p.setColor(Color.BLUE);
- RectF oval2 = new RectF(60, 100, 200, 240);// 设置个新的长方形,扫描测量
- canvas.drawArc(oval2, 200, 130, true, p);
- // 画弧,第一个参数是RectF:该类是第二个参数是角度的开始,第三个参数是多少度,第四个参数是真的时候画扇形,是假的时候画弧线
- //画椭圆,把oval改一下
- oval2.set(210,100,250,130);
- canvas.drawOval(oval2, p);
- canvas.drawText("画三角形:", 10, 200, p);
- // 绘制这个三角形,你可以绘制任意多边形
- Path path = new Path();
- path.moveTo(80, 200);// 此点为多边形的起点
- path.lineTo(120, 250);
- path.lineTo(80, 250);
- path.close(); // 使这些点构成封闭的多边形
- canvas.drawPath(path, p);
- // 你可以绘制很多任意多边形,比如下面画六连形
- p.reset();//重置
- p.setColor(Color.LTGRAY);
- p.setStyle(Paint.Style.STROKE);//设置空心
- Path path1=new Path();
- path1.moveTo(180, 200);
- path1.lineTo(200, 200);
- path1.lineTo(210, 210);
- path1.lineTo(200, 220);
- path1.lineTo(180, 220);
- path1.lineTo(170, 210);
- path1.close();//封闭
- canvas.drawPath(path1, p);
- /*
- * Path类封装复合(多轮廓几何图形的路径
- * 由直线段*、二次曲线,和三次方曲线,也可画以油画。drawPath(路径、油漆),要么已填充的或抚摸
- * (基于油漆的风格),或者可以用于剪断或画画的文本在路径。
- */
- //画圆角矩形
- p.setStyle(Paint.Style.FILL);//充满
- p.setColor(Color.LTGRAY);
- p.setAntiAlias(true);// 设置画笔的锯齿效果
- canvas.drawText("画圆角矩形:", 10, 260, p);
- RectF oval3 = new RectF(80, 260, 200, 300);// 设置个新的长方形
- canvas.drawRoundRect(oval3, 20, 15, p);//第二个参数是x半径,第三个参数是y半径
- //画贝塞尔曲线
- canvas.drawText("画贝塞尔曲线:", 10, 310, p);
- p.reset();
- p.setStyle(Paint.Style.STROKE);
- p.setColor(Color.GREEN);
- Path path2=new Path();
- path2.moveTo(100, 320);//设置Path的起点
- path2.quadTo(150, 310, 170, 400); //设置贝塞尔曲线的控制点坐标和终点坐标
- canvas.drawPath(path2, p);//画出贝塞尔曲线
- //画点
- p.setStyle(Paint.Style.FILL);
- canvas.drawText("画点:", 10, 390, p);
- canvas.drawPoint(60, 390, p);//画一个点
- canvas.drawPoints(new float[]{60,400,65,400,70,400}, p);//画多个点
- //画图片,就是贴图
- Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);
- canvas.drawBitmap(bitmap, 250,360, p);
- }
- }
Canvas上绘制几何图形的更多相关文章
- 软件项目技术点(7)——在canvas上绘制自定义图形
AxeSlide软件项目梳理 canvas绘图系列知识点整理 图形种类 目前我们软件可以绘制出来的形状有如下这几种,作为开发者我们一直想支持用户可以拖拽的类似word里面图形库,但目前还没有找到比 ...
- 在<canvas>上绘制img(drawImage())时需要注意的事
<canvas>标签相当于是一个画布,css决定画布的样式(这块画布的背景颜色.大小等),脚本(一般使用JavaScript)就是画笔,我们可以在这个画布上绘制线条.形状.文字.图片等. ...
- Android 如何将Canvas上绘制的内容保存成本地图片(转)
效果如下图所示 保存在sd卡上的文件为 手机上显示效果为: 1>>在Manifest文件中增加相应权限 <!-- 在SDCard中创建与删除文件权限 --> <uses- ...
- 前端使用html2canvas截图,在canvas上绘制图片及保存图片
1.使用html2canvas 存在的问题: 不同的机型绘制位置不同的问题. 这个主要因为Html动态设置了html的dpr.(dpr可以解决屏幕显示不了1pxborder和无法显示小于12px的文字 ...
- 软件项目技术点(5)——在canvas上绘制动态网格线
AxeSlide软件项目梳理 canvas绘图系列知识点整理 grid类的实现 当鼠标在画布上缩放时,网格能跟着我的鼠标滚动而相应的有放大缩小的效果. 下面是具体实现的代码,draw函数里计算出大 ...
- HTML5实现绘制几何图形
HTML5新增了一个<canvas.../>属性.该元素自身并不绘制图形,只是相当于一张空画布.如果开发者需要向<canvas.../>上绘制图形则必须使用JavaScript ...
- Android中使用SurfaceView和Canvas来绘制动画
事实上每一个View中都有Canvas能够用来绘制动画.仅仅须要在这个View中重载onDraw()方法就能够,可是SurfaceView类是一个专门用来制动动画的类. Canvas(中文叫做&quo ...
- -_-#【Canvas】导出在<canvas>元素上绘制的图像
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- HTML5<canvas>标签:使用canvas元素在网页上绘制线条和圆(1)
什么是 Canvas? HTML5 的 canvas 元素使用 JavaScript 在网页上绘制图像. 画布是一个矩形区域,您可以控制其每一像素. canvas 拥有多种绘制路径.矩形.圆形.字符以 ...
随机推荐
- 基于visual Studio2013解决C语言竞赛题之0303最大数
题目 解决代码及点评 这道题考察对条件分支和赋值的灵活应用 正常思维 如果 a>b and a>c 那么a最大 如果b>c and b>a 那么b最大 如果c>a ...
- MFC基础类源码CPP实现文件
WinMain.CPP---->AfxWinMain() //近似可认为是WinMain()函数的入口 VIEWCORE.CPP---->CView DOCCORE.CPP----> ...
- 1410 - Consistent Verdicts(规律)
1410 - Consistent Verdicts PDF (English) Statistics Forum Time Limit: 5 second(s) Memory Limit: 32 ...
- nginx学习六 高级数据结构之双向链表ngx_queue_t
1 ngx_queue_t简单介绍 ngx_queue_t是nginx提供的一个轻量级的双向链表容器,它不负责存储数据,既不提供数据的内存分配.它仅仅有两个指针负责把数据链入链表.它跟stl提供的qu ...
- TCP/IP之三次握手、四次挥手
参照:http://www.cnblogs.com/hnrainll/archive/2011/10/14/2212415.html 在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建 ...
- C++拷贝构造函数详解
转自:http://blog.csdn.net/lwbeyond/article/details/6202256 对于一个空类,编译器默认生成四个成员函数:默认构造函数.析构函数.拷贝构造函数.赋值函 ...
- Python之路Day7
第7天主要是面向对象的内容. 学到现在越来越吃力了,从上节课开始博客就没时间写了,看看别人写的博客都那么棒.又想起了那句话比你牛逼的人都在努力,你却在放羊...唉,我写作业的效率有点低,以后得抓紧时间 ...
- hibernate主键自动生成
Entity类中,主键尽量使用可以为null值的类型,比如Integer,Long,String等,不要用int,long等.因为如果主键为null,则表示该实体类还没有保存到数据库,是一个临时状态( ...
- Solr4.7从数据库导数据
实际工程应用中,从数据库导出数据创建索引再常见不过了,现在实验一下从数据库导入数据创建索引. 一.版本说明 Solr版本:4.7.0 数据库:sqlserver2005 二.配置步骤 1. 准备的j ...
- 建立Go工作环境
最近在折腾Go语言,找了个开源项目nsq研究源代码.不过前两天不小心把系统搞挂了,这次又要重做一遍,记录一下,备忘. 准备: 1. vim+golang插件+ctags(新版本支持Go) 2. Go1 ...