paint属性详解 Path类详解

具体使用:

主要用来设置画笔的一些效果。


基本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);

效果:


public void setTextAlign(Align align)这个方法我现在分别给Align的值为LEFT,CENTER,RIGHT效果分别是:

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 起点  等同于moveTo0,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);
//        RectRectF似都是矩形域的相关类  RectFfloat  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行一段平移,正方向和XY方向一致(如果dx数则向右平移,反之向左平移;如果dy向下平移,
//反之向上平移)。
        path.offset(150,150,path);
        canvas.drawPath(path,paint);
//      置同一path制的形互相重应该如何        path.setFillType(Path.FillType.EVEN_ODD);

























   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值