Android的绘制和现实中的绘制相似,同样离不开画笔和画板,canvas就是Android绘制中的画板,提供了一系列的api用来绘制(点,线,图形,图片,阴影,文字等),而另一个就是画笔paint了,此篇文章结合最近项目对Android graphic的深度使用和理解对于paint的一些使用的整理和汇总,后续也会不停的进行补充,方便后续查询和参考。
- paint的基本使用
1.1. 设置样式
1.2. 设置颜色设置画笔的样式:通过mPaint.setStyle()来设置样式。 总共有三种画笔的样式 FILL:填充内容; STROKE:描边; FILL_AND_STROKE:填充内容并描边。
1.3. 设置绘制宽度paintTextWhite.setColor(Color.WHITE); paintTextWhite.setARGB(int a, int r, int g, int b); // ARGB方式设置画笔颜色 paintTextWhite.setAlpha(int a); // 设置画笔的透明度
1.4. 设置防锯齿paintTextWhite.setStrokeWidth(8) 需要注意的点:无论设置那种样式,此宽度必须设置,不然不会绘制 出来,方法名容易混淆
1.5. 设置防抖动paintTextBlack.setAntiAlias(true); 绘制图形文本边缘更平滑,不会出现锯齿 方法仅能作用于图形文案,图片不能控制,若图片防锯齿可以通过 canvas的api方法设置
paintTextBlack.setDither(true) 防抖动可以使图片绘制更清晰更饱满,不过防锯齿和防抖动的设计 会消耗性能
- paint的深入使用
2.1. 设置虚线
2.2. 设置画笔线帽paintWhite.setPathEffect(new DashPathEffect(new float[] {5f, 5f}, 0)); 参数解析:传入float数组,数组描述了虚线的样式及其虚线长度,虚 线即为一段实线一段虚线结合而成,数组参数控制了虚线的实虚样式 和每一段实线或者虚线的长度。 设置虚线其实是设置画笔的路径样式,除了虚线外还有其他的路径样式 其他路径样式参考下面的文章。
2.3. 设置画笔连接线样式通过mPaint.setStrokeCap来设置线帽,总共有三种线帽 BUTT:没有线帽,默认模式 ROUND:圆形 SQUARE:方形
2.4. 文本绘制常用设置api汇总使用setStrokeJoin方法来设置Join,Join有三种类型: BEVEL:直线 ROUND:圆角 MITER:锐角
paintTextWhite.setTextSize() //设置文本大小,需要注意的是绘制文本不能设置dp和sp,而是px //单位,需要涉及到换算 TextView存在设置文本大小的api,其可以指定对应文本大小的单位 ,即: setTextSize(TypedValue.COMPLEX_UNIT_PX,22); //22像素 setTextSize(TypedValue.COMPLEX_UNIT_SP,22); //22SP setTextSize(TypedValue.COMPLEX_UNIT_DIP,22);//22DIP paintTextWhite.setTextAlign(Paint.Align.CENTER) //设置文本对齐方式 paintTextWhite.setTypeface(Typeface.create( Typeface.DEFAULT, Typeface.BOLD)); //设置文本加粗 下面相似 mPaint.setTypeface(Typeface.BOLD); // Style Typeface.DEFAULT //常规字体类型 Typeface.DEFAULT_BOLD //黑体字体类型 Typeface.MONOSPACE //等宽字体类型 Typeface.SANS_SERIF //sans serif字体类型 Typeface.SERIF //serif字体类型 public static final int NORMAL = 0 ; //常规 public static final int BOLD = 1 ; //粗体 public static final int ITALIC = 2 ; //斜体 public static final int BOLD_ITALIC = 3 ; //粗斜体 //设置文本粗体: mp.setFakeBoldText ( true ); //true为粗体,false为非粗体 //设置字符间距: mPaint.setLetterSpacing(Typeface.BOLD); // 设置文本下划线 mPaint.setUnderlineText( true ); // 设置文本删除线 mPaint.setStrikeThruText( true ); // 设置文字倾斜 mPaint.setTextSkewX(- 0 .25f); 文字倾斜默认为0,官方推荐的-0.25f是斜体 float类型参数,负数表示右斜,整数左斜 // 计算制定长度的字符串 int breadText = mPaint.breakText(text, measureForwards, maxWidth, measuredWidth) // 加载自定义字体 Typeface.create(familyName, style)
网友评论