Paint类相关属性:

  1. /**
  2. * Paint类介绍
  3. *
  4. * Paint即画笔,在绘图过程中起到了极其重要的作用,画笔主要保存了颜色,
  5. * 样式等绘制信息,指定了如何绘制文本和图形,画笔对象有很多设置方法,
  6. * 大体上可以分为两类,一类与图形绘制相关,一类与文本绘制相关。
  7. *
  8. * 1.图形绘制
  9. * setARGB(int a,int r,int g,int b);
  10. * 设置绘制的颜色,a代表透明度,r,g,b代表颜色值。
  11. *
  12. * setAlpha(int a);
  13. * 设置绘制图形的透明度。
  14. *
  15. * setColor(int color);
  16. * 设置绘制的颜色,使用颜色值来表示,该颜色值包括透明度和RGB颜色。
  17. *
  18. * setAntiAlias(boolean aa);
  19. * 设置是否使用抗锯齿功能,会消耗较大资源,绘制图形速度会变慢。
  20. *
  21. * setDither(boolean dither);
  22. * 设定是否使用图像抖动处理,会使绘制出来的图片颜色更加平滑和饱满,图像更加清晰
  23. *
  24. * setFilterBitmap(boolean filter);
  25. * 如果该项设置为true,则图像在动画进行中会滤掉对Bitmap图像的优化操作,加快显示
  26. * 速度,本设置项依赖于dither和xfermode的设置
  27. *
  28. * setMaskFilter(MaskFilter maskfilter);
  29. * 设置MaskFilter,可以用不同的MaskFilter实现滤镜的效果,如滤化,立体等 *
  30. * setColorFilter(ColorFilter colorfilter);
  31. * 设置颜色过滤器,可以在绘制颜色时实现不用颜色的变换效果
  32. *
  33. * setPathEffect(PathEffect effect);
  34. * 设置绘制路径的效果,如点画线等
  35. *
  36. * setShader(Shader shader);
  37. * 设置图像效果,使用Shader可以绘制出各种渐变效果
  38. *
  39. * setShadowLayer(float radius ,float dx,float dy,int color);
  40. * 在图形下面设置阴影层,产生阴影效果,radius为阴影的角度,dx和dy为阴影在x轴和y轴上的距离,color为阴影的颜色
  41. *
  42. * setStyle(Paint.Style style);
  43. * 设置画笔的样式,为FILL,FILL_OR_STROKE,或STROKE
  44. *
  45. * setStrokeCap(Paint.Cap cap);
  46. * 当画笔样式为STROKE或FILL_OR_STROKE时,设置笔刷的图形样式,如圆形样式
  47. * Cap.ROUND,或方形样式Cap.SQUARE
  48. *
  49. * setSrokeJoin(Paint.Join join);
  50. * 设置绘制时各图形的结合方式,如平滑效果等
  51. *
  52. * setStrokeWidth(float width);
  53. * 当画笔样式为STROKE或FILL_OR_STROKE时,设置笔刷的粗细度
  54. *
  55. * setXfermode(Xfermode xfermode);
  56. * 设置图形重叠时的处理方式,如合并,取交集或并集,经常用来制作橡皮的擦除效果
  57. *
  58. * 2.文本绘制
  59. * setFakeBoldText(boolean fakeBoldText);
  60. * 模拟实现粗体文字,设置在小字体上效果会非常差
  61. *
  62. * setSubpixelText(boolean subpixelText);
  63. * 设置该项为true,将有助于文本在LCD屏幕上的显示效果
  64. *
  65. * setTextAlign(Paint.Align align);
  66. * 设置绘制文字的对齐方向
  67. *
  68. * setTextScaleX(float scaleX);
  69. * 设置绘制文字x轴的缩放比例,可以实现文字的拉伸的效果
  70. *
  71. * setTextSize(float textSize);
  72. * 设置绘制文字的字号大小
  73. *
  74. * setTextSkewX(float skewX);
  75. * 设置斜体文字,skewX为倾斜弧度
  76. *
  77. * setTypeface(Typeface typeface);
  78. * 设置Typeface对象,即字体风格,包括粗体,斜体以及衬线体,非衬线体等
  79. *
  80. * setUnderlineText(boolean underlineText);
  81. * 设置带有下划线的文字效果
  82. *
  83. * setStrikeThruText(boolean strikeThruText);
  84. * 设置带有删除线的效果
  85. *
  86. */

andoird自定义view相关画法

  1. private class MyView2 extends View {
  2.  
  3. public MyView2(Context context) {
  4.  
  5. super(context);
  6.  
  7. }
  8.  
  9. @Override
  10. protected void onDraw(Canvas canvas)
  11.  
  12. {
  13.  
  14. super.onDraw(canvas);
  15.  
  16. canvas.drawColor(Color.WHITE);
  17.  
  18. Paint paint = new Paint();
  19.  
  20. paint.setAntiAlias(true);
  21.  
  22. paint.setColor(Color.RED);
  23.  
  24. paint.setStyle(Paint.Style.STROKE);//设置为空心
  25.  
  26. paint.setStrokeWidth(3);
  27.  
  28. canvas.drawCircle(40, 40, 30, paint);
  29.  
  30. canvas.drawRect(10, 90, 70, 150, paint);
  31.  
  32. canvas.drawRect(10, 170, 70, 200, paint);
  33.  
  34. canvas.drawOval(new RectF(10, 220, 70, 250), paint);
  35.  
  36. Path path = new Path();//三角形
  37.  
  38. path.moveTo(10, 330);
  39.  
  40. path.lineTo(70, 330);
  41.  
  42. path.lineTo(40, 270);
  43.  
  44. path.close();
  45.  
  46. canvas.drawPath(path, paint);
  47.  
  48. Path path1 = new Path();//梯形
  49.  
  50. path1.moveTo(10, 410);//绘画基点
  51.  
  52. path1.lineTo(70, 410);
  53.  
  54. path1.lineTo(55, 350);
  55.  
  56. path1.lineTo(25, 350);
  57.  
  58. path1.close();//把开始的点和最后的点连接在一起,构成一个封闭图形
  59. /*
  60. * 最重要的就是movtTo和close,如果是Style.FILL的话,不设置close,也没有区别,可是如果是STROKE模式,
  61. * 如果不设置close,图形不封闭。
  62. *
  63. * 当然,你也可以不设置close,再添加一条线,效果一样。
  64. */
  65. canvas.drawPath(path1, paint);
  66.  
  67. ///////////////////////////////////////第二列
  68.  
  69. paint.setColor(Color.BLUE);
  70.  
  71. paint.setStyle(Paint.Style.FILL);//设置实心
  72.  
  73. canvas.drawCircle(120, 40, 30, paint);
  74.  
  75. canvas.drawRect(90, 90, 150, 150, paint);
  76.  
  77. canvas.drawRect(90, 170, 150, 200, paint);
  78.  
  79. RectF re2 = new RectF(90, 220, 150, 250);
  80.  
  81. canvas.drawOval(re2, paint);
  82.  
  83. Path path2 = new Path();
  84.  
  85. path2.moveTo(90, 330);
  86.  
  87. path2.lineTo(150, 330);
  88.  
  89. path2.lineTo(120, 270);
  90.  
  91. path2.close();
  92.  
  93. canvas.drawPath(path2, paint);
  94.  
  95. Path path3 = new Path();
  96.  
  97. path3.moveTo(90, 410);
  98.  
  99. path3.lineTo(150, 410);
  100.  
  101. path3.lineTo(135, 350);
  102.  
  103. path3.lineTo(105, 350);
  104.  
  105. path3.close();
  106.  
  107. canvas.drawPath(path3, paint);
  108.  
  109. ////////////////////////////////////////////////////第三列
  110.  
  111. /*
  112. * LinearGradient shader = new LinearGradient(0, 0, endX, endY, new
  113. * int[]{startColor, midleColor, endColor},new float[]{0 , 0.5f,
  114. * 1.0f}, TileMode.MIRROR);
  115. * 参数一为渐变起初点坐标x位置,参数二为y轴位置,参数三和四分辨对应渐变终点
  116. * 其中参数new int[]{startColor, midleColor,endColor}是参与渐变效果的颜色集合,
  117. * 其中参数new float[]{0 , 0.5f, 1.0f}是定义每个颜色处于的渐变相对位置, 这个参数可以为null,如果为null表示所有的颜色按顺序均匀的分布
  118. */
  119. Shader mShader = new LinearGradient(0, 0, 100, 100,
  120.  
  121. new int[] { Color.RED, Color.GREEN, Color.BLUE, Color.YELLOW },
  122.  
  123. null, Shader.TileMode.REPEAT);
  124.  
  125. // Shader.TileMode三种模式
  126.  
  127. // REPEAT:沿着渐变方向循环重复
  128.  
  129. // CLAMP:如果在预先定义的范围外画的话,就重复边界的颜色
  130.  
  131. // MIRROR:与REPEAT一样都是循环重复,但这个会对称重复
  132.  
  133. paint.setShader(mShader);// 用Shader中定义定义的颜色来话
  134.  
  135. canvas.drawCircle(200, 40, 30, paint);
  136.  
  137. canvas.drawRect(170, 90, 230, 150, paint);
  138.  
  139. canvas.drawRect(170, 170, 230, 200, paint);
  140.  
  141. RectF re3 = new RectF(170, 220, 230, 250);
  142.  
  143. canvas.drawOval(re3, paint);
  144.  
  145. Path path4 = new Path();
  146.  
  147. path4.moveTo(170, 330);
  148.  
  149. path4.lineTo(230, 330);
  150.  
  151. path4.lineTo(200, 270);
  152.  
  153. path4.close();
  154.  
  155. canvas.drawPath(path4, paint);
  156.  
  157. Path path5 = new Path();
  158.  
  159. path5.moveTo(170, 410);
  160.  
  161. path5.lineTo(230, 410);
  162.  
  163. path5.lineTo(215, 350);
  164.  
  165. path5.lineTo(185, 350);
  166.  
  167. path5.close();
  168.  
  169. canvas.drawPath(path5, paint);
  170.  
  171. //////////////////////////////////第4列
  172.  
  173. paint.setTextSize(24);
  174.  
  175. canvas.drawText("圆形", 240, 50, paint);
  176.  
  177. canvas.drawText("正方形", 240, 120, paint);
  178.  
  179. canvas.drawText("长方形", 240, 190, paint);
  180.  
  181. canvas.drawText("椭圆形", 240, 250, paint);
  182.  
  183. canvas.drawText("三角形", 240, 320, paint);
  184.  
  185. canvas.drawText("梯形", 240, 390, paint);
  186.  
  187. }
  188.  
  189. }

常用方法总结:

1、moveTo

moveTo 不会进行绘制,只用于移动移动画笔。
结合以下方法进行使用。

2、lineTo

lineTo 用于进行直线绘制。

  1. mPath.lineTo(300, 300);
  2. canvas.drawPath(mPath, mPaint);

默认从坐标(0,0)开始绘制。如图:

刚才我们不说了moveTo是用来移动画笔的吗?

  1. mPath.moveTo(100, 100);
  2. mPath.lineTo(300, 300);
  3. canvas.drawPath(mPath, mPaint);

把画笔移动(100,100)处开始绘制,效果如图:

3、quadTo

quadTo 用于绘制圆滑曲线,即贝塞尔曲线。

mPath.quadTo(x1, y1, x2, y2) (x1,y1) 为控制点,(x2,y2)为结束点。

同样地,我们还是得需要moveTo来协助控制。

  1. mPath.moveTo(100, 500);
  2. mPath.quadTo(300, 100, 600, 500);
  3. canvas.drawPath(mPath, mPaint);

效果如图:

4、cubicTo

cubicTo 同样是用来实现贝塞尔曲线的。

mPath.cubicTo(x1, y1, x2, y2, x3, y3) (x1,y1) 为控制点,(x2,y2)为控制点,(x3,y3) 为结束点。

那么,cubicTo 和 quadTo 有什么不一样呢?

官方是这么说的:

Same as cubicTo, but the coordinates are considered relative to the current point on this contour.

说白了,就是多了一个控制点而已。

然后,我们想绘制和上一个一样的曲线,应该怎么写呢?

  1. mPath.moveTo(100, 500);
  2. mPath.cubicTo(100, 500, 300, 100, 600, 500);

看看效果:

一模一样!

如果我们不加 moveTo 呢?

则以(0,0)为起点,(100,500)和(300,100)为控制点绘制贝塞尔曲线:

5、arcTo

arcTo 用于绘制弧线(实际是截取圆或椭圆的一部分)。

mPath.arcTo(ovalRectF, startAngle, sweepAngle) , ovalRectF为椭圆的矩形,startAngle 为开始角度,sweepAngle 为结束角度。

  1. mRectF = new RectF(10, 10, 600, 600);
  2. mPath.arcTo(mRectF, 0, 90);
  3. canvas.drawPath(mPath, mPaint);

由于new RectF(10, 10, 600, 600)为正方形,又截取 0 ~ 90 度 ,则所得曲线为四分之一圆的弧线。

效果如图:

android中画图类的介绍Path的更多相关文章

  1. Android中View类OnClickListener和DialogInterface类OnClickListener冲突解决办法

    Android中View类OnClickListener和DialogInterface类OnClickListener冲突解决办法 如下面所示,同时导入这两个,会提示其中一个与另一个产生冲突. 1i ...

  2. android中Handle类的用法

    android中Handle类的用法 当我们在处理下载或是其他需要长时间执行的任务时,如果直接把处理函数放Activity的OnCreate或是OnStart中,会导致执行过程中整个Activity无 ...

  3. Android中一个类实现的接口数不能超过七个

    近期一段时间,在开发Android应用程序的过程中,发现Android中一个类实现的接口数超过七个的时候,常常会出现超过第7个之后的接口不能正常使用.

  4. Android中Cursor类的概念和用法[转]

    首页 > 程序开发 > 移动开发 > Android > 正文   Android中Cursor类的概念和用法 2011-09-07      0个评论       收藏    ...

  5. Android中Application类的详解:

    Android中Application类的详解: 我们在平时的开发中,有时候可能会须要一些全局数据.来让应用中的全部Activity和View都能訪问到.大家在遇到这样的情况时,可能首先会想到自定义一 ...

  6. Android中View和ViewGroup介绍

    1. 概念Android中的View与我们以前理解的“视图”不同.在Android中,View比视图具有更广的含义,它包含了用户交互和显示,更像Windows操作系统中的window. ViewGro ...

  7. Android中Application类总结

    本文出处: 炎之铠csdn博客:http://blog.csdn.net/totond 炎之铠邮箱:yanzhikai_yjk@qq.com 本文原创,转载请注明本出处! 前言 最近的开发中经常使用到 ...

  8. [转]Android中Application类的用法

    原文链接:http://www.cnblogs.com/renqingping/archive/2012/10/24/Application.html Application类 Application ...

  9. 【转】Android中Application类用法

    转自:http://www.cnblogs.com/renqingping/archive/2012/10/24/Application.html Application类 Application和A ...

随机推荐

  1. linux\mac 日常入门命令行使用——搜索文件\文件夹

    搜索文件或者文件夹,是一个常见的需求.我们可以用多种命令来实现我们的需求. find 命令实现搜索 find 是英文,寻找的意思.这个命令可以很方面的来搜索我们需要的内容. 标准命令如下: find ...

  2. 还没被玩坏的robobrowser(7)——表单操作

    背景 有一些站点是需要登录之后才能抓取内容的,另外做web测试的时候登录是家常便饭. 这一节里我们就以登陆testerhome为例,讲解一下robobrowser中form的操作. 预备知识 get_ ...

  3. maven依赖包冲突解决办法

    今天在写一个demo时报了以下错误 SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding /slf4j-lo ...

  4. Google Protocol Buffers介绍

    简要介绍和总结protobuf的一些关键点,从我之前做的ppt里摘录而成,希望能节省protobuf初学者的入门时间.这是一个简单的Demo. Protobuf 简介 Protobuf全称Google ...

  5. 在 Windows 7 中安装 .NET Framework 时遇到错误:无法建立到信任根颁发机构的证书链

    当全新安装 Windows 7 SP1 后,在未安装任何补丁,也未进行联网的状态下,安装 .NET Framework 4.6 或更高的版本时,应该会遇到错误提示:无法建立到信任根颁发机构的证书链. ...

  6. 如何获取 XAML 控件的模板代码

    有时候 .NET 自带提供的控件并不能满足我们的实际需求,需要进行修改,或者参考代码来建立新的控件. 可以在编辑器的文档大纲窗口中,找到所需的对象,然后在其上点右键,编辑模板,编辑副本 弹出创建 St ...

  7. Fluent UDF【7】:解释型UDF

    UDF宏有两种方式可以被Fluent所接受:编译和解释.其中有一些宏既可以被解释也可以被编译,而一些宏则只能被解释.有一些场合只接受编译后的UDF(如动网格中的一些宏),而有些场合既可以接受编译的UD ...

  8. ISO27001适用性-导图

    大图请戳这里

  9. linux命令(36):vimdiff文件对比

    启动方法 首先保证系统中的diff命令是可用的.Vim的diff模式是依赖于diff命令的.Vimdiff的基本用法就是: # vimdiff FILE_LEFT FILE_RIGHT 或者 # vi ...

  10. Android 编程下 TextView 添加链接的一种方式

    通过如下这种方式给 TextView 添加的链接支持链接样式.点击事件.href 样式,代码如下: package cn.sunzn.tlink; import android.app.Activit ...