具体使用:
主要用来设置画笔的一些效果。
基本api详解:
//设置画笔颜色,argb形式alpha,red,green,blue每个范围都是[0-255],
setARGB(int a, int r, int g, int b)//设置是否抖动,如果不设置感觉就会有一些僵硬的线条,如果设置图像就会看的更柔和一些,
setDither(boolean dither)//设置亚像素,是对文本的一种优化设置,可以让文字看起来更加清晰明显,可以参考一下PC端的控制面板-外观和个性化-调整ClearType文本
setSubpixelText(boolean subpixelText)mPaint.setColor(Color.RED);//设置画笔的颜色 mPaint.setTextSize(60);//设置文字大小 mPaint.setStrokeWidth(5);//设置画笔的宽度 mPaint.setAntiAlias(true);//设置抗锯齿功能 true表示抗锯齿 false则表示不需要这功能
mPaint.setStyle(Paint.Style.FILL); stroke
FILL_AND_STROKE
填充 中空 fill和fill_and_stroke 他们是有区别的 fill就直接限定我们要求的区间内
但是后者呢 在绘制的时候 会在我们之前设置的区域外 再加上我们设置的setStrokeWidth的宽度 所以显得更大 边缘绘制
//设置着色器,用来给图像着色的,绘制出各种渐变效果,有BitmapShader,ComposeShader,LinearGradient,RadialGradient,SweepGradient几种,这个以后再单独讲
setShader(Shader shader) 详见: https://www.cnblogs.com/tianzhijiexian/p/4298660.html
//设置画笔颜色过滤器,有ColorMatrixColorFilter,LightingColorFilter,PorterDuffColorFilter几种,这个以后再单独分析
setColorFilter(ColorFilter filter)
//设置图形重叠时的显示方式,下面来演示一下
setXfermode(Xfermode xfermode)//设置地理位置,比如显示中文,日文,韩文等,默认的显示Locale.getDefault()即可,
setTextLocale(Locale locale)//下面几个就是测量字体的长度了
measureText(char[] text, int index, int count),measureText(String text, int start, int end),measureText(String text),measureText(CharSequence text, int start, int end)//得到文本的边界,上下左右,提取到bounds中,可以通过这计算文本的宽和高
getTextBounds(String text, int start, int end, Rect bounds) ,getTextBounds(char[] text, int index, int count, Rect bounds)//设置行的间距,默认值是0,负值行间距会收缩
setLetterSpacing(float letterSpacing)public void setShadowLayer(float radius, float dx, float dy, int shadowColor) 设置添加阴影
参数说明:
radius 表示阴影的倾斜度
dx:水平方向位移的像素
dy:垂直方向位移的像素
shadowColor:设置阴影的颜色
mPaint.setShadowLayer(10,10,10,Color.RED); canvas.drawText("杭州西湖风景真好",200,200,mPaint);
效果:
canvas.drawText("我是中国人",100,100,paint);
注意这个基准点就是我们设置的 x y坐标 align对齐方式
表示的意思就是文字的左边和基准点对齐 文字的右边和基准点对齐 文字的中间和基准点对齐
paint.setAlpha(100);设置画笔颜色的透明度
public native void setTextScaleX(float scaleX)设置水平位置拉伸
public native void setFakeBoldText(boolean fakeBoldText);设置文字是否为粗体
public native void setStrikeThruText(boolean strikeThruText);设置是否带有删除线效果
public native void setUnderlineText(boolean underlineText);是否设置下划线
public native void setTextSkewX(float skewX);设置字体水平倾斜度,上面的注释表明默认为-0.25
public Typeface setTypeface(Typeface typeface);设置字体样式 类似于textview里面的textStyle
拓展:自定义字体格式:
Typefacecreate(String familyName, int style) //直接通过指定字体名来加载系统中自带的文字样式
create(Typeface family, int style) //通过其它Typeface变量来构建文字样式
createFromAsset(AssetManager mgr, String path) //通过从Asset中获取外部字体来显示字体样式
createFromFile(String path)//直接从路径创建
createFromFile(File path)//从外部路径来创建字体样式
defaultFromStyle(int style)//创建默认字体
Typeface typeFace = Typeface.defaultFromStyle(Typeface.BOLD); mPaint.setTypeface(typeFace);
path类在paint里面的简单使用:
Paint paint=new Paint();
paint.setColor(Color.BLUE);paint.setStyle(Style.STROKE);
paint.setStrokeWidth(10);
Path path = new Path();
path.moveTo(10, 10);
path.lineTo(10, 100);
path.lineTo(500, 100);
canvas.drawPath(path, paint);
public PathEffect setPathEffect(PathEffect effect)设置路径样式,我们看见要传递的参数Patheffect,
CornerPathEffect——圆形拐角效果 它的作用就是将Path的各个连接线段之间的夹角用一种更平滑的方式连接,类似于圆弧与切线的效果,我们初中学过外切圆,如图:
效果图:
DashPathEffect——虚线效果 将Path的线段虚线化 构造函数如下:
float[] intervals = {20,10,20,10,20,10,20,10};
DashPathEffect dashPathEffect = new DashPathEffect(intervals, 12f);
paint.setPathEffect(dashPathEffect);
参数说明:
intervals[]:表示组成虚线的各个线段的长度;整条虚线就是由intervals[]中这些基本线段循环组成的,这线段包含实线和虚线,虚线是看不见的,但它也占空间,所以intervals的数组的长度必须是大于等于2,而数组的长度必须是2的倍数,如果是奇数的话最后一个将不起作用,因为它是虚线啊,所以有和没有都没什么作用,
phase:开始绘制的偏移值
效果图:
DiscretePathEffect——离散路径效果,作用是打散Path的线段,使得在原来路径的基础上发生打散效果,它的构造函数如下:
public DiscretePathEffect(float segmentLength, float deviation)
参数说明:
segmentLength:表示将原来的路径切成多长的线段。如果值为2,那么这个路径就会被切成一段段由长度为2的小线段。所以这个值越小,所切成的小线段越多;这个值越大,所切成的小线段越少
deviation:表示被切成的每个小线段的可偏移距离。值越大,就表示每个线段的可偏移距离就越大,就显得越凌乱,值越小,每个线段的可偏移原位置的距离就越小
DiscretePathEffect discretePathEffect = new DiscretePathEffect(1, 15);paint.setPathEffect(discretePathEffect);
效果图:
PathDashPathEffect——这个类的作用是使用Path图形来填充当前的路径,这个不知道用什么名词来解释,还是直接看效果看好,它的构造函数如下:
PathDashPathEffect(Path shape, float advance, float phase,Style style)
参数说明:
Path shape:表示给路径添加的图形形状;
float advance:表示两个图形形状路径间的距离。
float phase:路径绘制偏移距离,
Style style:表示在遇到转角时,转角处以什么形式和其他的连接,它的值有三个:
PathDashPathEffect effect = new PathDashPathEffect(shape, 20, 15, PathDashPathEffect.Style.MORPH);paint.setPathEffect(effect);
属性详解:PathDashPathEffect.Style.MORPH 就是设置拐角位置的连接效果
其中ROTATE的情况下,线段连接处的图形转换以旋转到与下一段移动方向相一致的角度进行转转,MORPH时图形会以发生拉伸或压缩等变形的情况与下一段相连接,TRANSLATE时,图形会以位置平移的方式与下一段相连接
Path类: https://www.jianshu.com/p/2c19abde958c
Path path=new Path(); // 默认以0 0 为起点 等同于moveTo(0,0) path.lineTo(100,100); // 把上面的lineTo的参数修改为50 150了 path.setLastPoint(50,150); path.lineTo(200,200); // 表示空投到某一个点进行绘制 // path.moveTo(300,300); // 表示地面上移动到某一个点进行绘制 // path.lineTo(150,100); // 将图片端点连接起来形成一个闭合图形 // 注意:close的作用的封闭路径,如果连接最后一个点和最初一个点任然无法形成闭合的区域,那么close什么也不做。 path.close();
paint.setColor(0xff000000); paint.setStrokeWidth(10); // paint.setStyle(Paint.Style.FILL); 设置为实心的话会导致画path显示不出来 paint.setStyle(Paint.Style.STROKE); canvas.drawColor(0xfffe8b00); Path path=new Path(); // 二次贝塞尔曲线 前两个值是变化的位置点 后两个值表示的是贝赛尔曲线最后需要停止的终点位置。 // path.quadTo(1,3,300,300); // 三次贝塞尔曲线 其中(x1,y1) 为控制点,(x2,y2)为控制点,(x3,y3) 为结束点。 // path.cubicTo(100,100,150,250,300,300); // canvas.drawCircle(200,200,50,paint); // path.addCircle(200,200,200, Path.Direction.CCW); // Rect和RectF很类似都是矩形区域的相关类 RectF数据时float类型 Rect是整形数据 // RectF rect=new RectF(100,100,300,300); // path.addRect(rect, Path.Direction.CCW); RectF rectF=new RectF(100,100,200,200); // 椭圆 path.addOval(rectF, Path.Direction.CCW); // RectF rectF1=new RectF(100,300,200,500); // 圆角矩形 // path.addRoundRect(rectF1,15,15, Path.Direction.CCW); // RectF rectF2=new RectF(100,500,300,700); // 圆的边线 开始的位置 和旋转多少度 // path.addArc(rectF2,0,150); // addArc 添加一个圆弧到Path 直接添加一个圆弧到path中,和上一次操作点无关 // arcTo 添加一个圆弧到Path 添加一个圆弧到path中,如果圆弧的起点和上次操作点坐标不同就连接两个点 // 判断path是否为空的 // path.isEmpty(); // 为path赋值 // path.set(); // 判断是否为矩形 // path.isRect(); // 对Path进行一段平移,正方向和X轴,Y轴方向一致(如果dx为正数则向右平移,反之向左平移;如果dy为正则向下平移, //反之向上平移)。 path.offset(150,150,path); canvas.drawPath(path,paint); // 设置同一个path路径下绘制的图形互相重叠的时候 应该如何显示 path.setFillType(Path.FillType.EVEN_ODD);