基本几何图形绘制和路径及文字

参考:https://blog.csdn.net/harvic880925/article/details/38875149

概述及基本几何图形绘制
一、Paint与Canvas

Paint的基本设置函数:

paint.setAntiAlias(true);//抗锯齿功能
paint.setColor(Color.RED);  //设置画笔颜色    
paint.setStyle(Style.FILL);//设置填充样式
Paint.Style.FILL    :填充内部
Paint.Style.FILL_AND_STROKE  :填充内部和描边(效果和Paint.Style.FILL相同)
Paint.Style.STROKE  :仅描边
paint.setStrokeWidth(30);//设置画笔宽度
paint.setShadowLayer(10, 15, 15, Color.GREEN);//设置阴影
    radius:阴影的倾斜度
    dx:水平位移
    dy:垂直位移
    color:阴影颜色

Canvas的基本设置函数:
//这两个功能一样,都是用来设置背景颜色的。
  canvas.drawColor(Color.BLUE);
  canvas.drawRGB(255, 255, 0);   
二、几何图形绘制

1、画直线

void drawLine (float startX, float startY, float stopX, float stopY, Paint paint)
参数:
    startX:开始点X坐标
    startY:开始点Y坐标
    stopX:结束点X坐标
    stopY:结束点Y坐标

2、多条直线

void drawLines (float[] pts, Paint paint)
void drawLines (float[] pts, int offset, int count, Paint paint)
参数:
    pts的组织方式为{x1,y1,x2,y2,x3,y3,……},每两个点形成一条直线,(x1,y1)到(x2,y2);(x3,y3)到(x4,y4)
    int offset:集合中跳过的数值个数,注意不是点的个数!一个点是两个数值;
    count:参与绘制的数值的个数,指pts[]里数值个数,而不是点的个数,因为一个点是两个数值

3、点

void drawPoint (float x, float y, Paint paint)
参数:
    float X:点的X坐标
    float Y:点的Y坐标

4、多个点

void drawPoints (float[] pts, Paint paint)
void drawPoints (float[] pts, int offset, int count, Paint paint)
参数:
    float[] pts:点的合集,与上面直线一直,样式为{x1,y1,x2,y2,x3,y3,……}
    int offset:集合中跳过的数值个数,注意不是点的个数!一个点是两个数值;
    count:参与绘制的数值的个数,指pts[]里数值个数,而不是点的个数,因为一个点是两个数值
如:跳过第一个点,画出后面两个点,第四个点不画
    float []pts={10,10,100,100,200,200,400,400};
    canvas.drawPoints(pts, 2, 4, paint);

5、矩形工具类RectF与Rect

void drawRect (float left, float top, float right, float bottom, Paint paint)
void drawRect (RectF rect, Paint paint)
void drawRect (Rect r, Paint paint)
参数:
    第一个的写法是直接传入矩形的四个点,画出矩形
    第二、三个构造函数是根据传入RectF或者Rect矩形变量来指定所画的矩形的

矩形工具类RectF与Rect

RectF:最常用的还是第二个,根据四个点构造出一个矩形;
    RectF()
    RectF(float left, float top, float right, float bottom)
    RectF(RectF r)
    RectF(Rect r)

Rect:最常用的是根据四个点来构造矩形
    Rect()
    Rect(int left, int top, int right, int bottom)
    Rect(Rect r)

6、圆角矩形

void drawRoundRect (RectF rect, float rx, float ry, Paint paint)
参数:
    RectF rect:要画的矩形
    float rx:生成圆角的椭圆的X轴半径
    float ry:生成圆角的椭圆的Y轴半径

7、圆形

void drawCircle (float cx, float cy, float radius, Paint paint)
参数:
    float cx:圆心点X轴坐标 
    float cy:圆心点Y轴坐标
    float radius:圆的半径

8、椭圆:椭圆是根据矩形生成的,以矩形的长为椭圆的X轴,矩形的宽为椭圆的Y轴,建立的椭圆图形

void drawOval (RectF oval, Paint paint)
参数:
    RectF oval:用来生成椭圆的矩形

9、弧:弧是椭圆的一部分,而椭圆是根据矩形来生成的,所以弧当然也是根据矩形来生成的;

void drawArc (RectF oval, float startAngle, float sweepAngle, boolean useCenter, Paint paint)
参数:
    RectF oval:生成椭圆的矩形
    float startAngle:弧开始的角度,以X轴正方向为0float sweepAngle:弧持续的角度
    boolean useCenter:是否有弧的两边,True,还两边,False,只有一条弧
路径及文字
一、绘制路径

1、直线路径

void moveTo (float x1, float y1):直线的开始点;即将直线路径的绘制点定在(x1,y1)的位置;
void lineTo (float x2, float y2):直线的结束点,又是下一次绘制直线路径的开始点;lineTo()可以一直用;
void close ():如果连续画了几条直线,但没有形成闭环,调用Close()会将路径首尾点连接起来,形成闭环;

利用canvas绘制路径:
    void drawPath (Path path, Paint paint)

2、矩形路径

void addRect (float left, float top, float right, float bottom, Path.Direction dir)
void addRect (RectF rect, Path.Direction dir)
参数:
    Path.Direction有两个值:
        Path.Direction.CCW:是counter-clockwise缩写,指创建逆时针方向的矩形路径;
        Path.Direction.CW:是clockwise的缩写,指创建顺时针方向的矩形路径;

3、圆角矩形路径

void addRoundRect (RectF rect, float[] radii, Path.Direction dir)
void addRoundRect (RectF rect, float rx, float ry, Path.Direction dir)
参数:
    第一个构造函数:可以定制每个角的圆角大小:
        float[] radii:必须传入8个数值,分四组,分别对应每个角所使用的椭圆的横轴半径和纵轴半径,如{x1,y1,x2,y2,x3,y3,x4,y4},
        其中,x1,y1对应第一个角的(左上角)用来产生圆角的椭圆的横轴半径和纵轴半径,其它类推……
    第二个构造函数:只能构建统一圆角大小
        float rx:所产生圆角的椭圆的横轴半径;
        float ry:所产生圆角的椭圆的纵轴半径;

4、圆形路径

void addCircle (float x, float y, float radius, Path.Direction dir)
参数:
    float x:圆心X轴坐标 
    float y:圆心Y轴坐标
    float radius:圆半径

5、椭圆路径

void addOval (RectF oval, Path.Direction dir)
参数:
    RectF oval:生成椭圆所对应的矩形
    Path.Direction :生成方式,与矩形一样,分为顺时针与逆时针,意义完全相同,不再重复

6、弧形路径

void addArc (RectF oval, float startAngle, float sweepAngle)
参数:
    RectF oval:弧是椭圆的一部分,这个参数就是生成椭圆所对应的矩形;
    float startAngle:开始的角度,X轴正方向为0float sweepAngel:持续的度数;
二、文字

1、Paint相关设置

//普通设置
paint.setStrokeWidth (5);//设置画笔宽度
paint.setAntiAlias(true); //指定是否使用抗锯齿功能,如果使用,会使绘图速度变慢
paint.setStyle(Paint.Style.FILL);//绘图样式,对于设文字和几何图形都有效
paint.setTextAlign(Align.CENTER);//设置文字对齐方式,取值:align.CENTER、align.LEFT或align.RIGHT
paint.setTextSize(12);//设置文字大小

//样式设置
paint.setFakeBoldText(true);//设置是否为粗体文字
paint.setUnderlineText(true);//设置下划线
paint.setTextSkewX((float) -0.25);//设置字体水平倾斜度,普通斜体字是-0.25
paint.setStrikeThruText(true);//设置带有删除线效果

//其它设置
paint.setTextScaleX(2);//只会将水平方向拉伸,高度不会变

2、canvas绘图方式
(1)、普通水平绘制

void drawText (String text, float x, float y, Paint paint)
void drawText (CharSequence text, int start, int end, float x, float y, Paint paint)
void drawText (String text, int start, int end, float x, float y, Paint paint)
void drawText (char[] text, int index, int count, float x, float y, Paint paint)
说明:
    第一个构造函数:最普通简单的构造函数;
    第三、四个构造函数:实现截取一部分字体给图;
    第二个构造函数:最强大,因为传入的可以是charSequence类型字体,所以可以实现绘制带图片的扩展文字

(2)、指定部分文字位置

void drawPosText (char[] text, int index, int count, float[] pos, Paint paint)
void drawPosText (String text, float[] pos, Paint paint)
参数:
    char[] text:要绘制的文字数组
    int index::第一个要绘制的文字的索引
    int count:要绘制的文字的个数,用来算最后一个文字的位置,从第一个绘制的文字开始算起
    float[] pos:每个字体的位置,同样两两一组,如{x1,y1,x2,y2,x3,y3……}

(3)、沿路径绘制

void drawTextOnPath (String text, Path path, float hOffset, float vOffset, Paint paint)
void drawTextOnPath (char[] text, int index, int count, Path path, float hOffset, float vOffset, Paint paint)
参数:
    float hOffset  : 与路径起始点的水平偏移距离
    float vOffset  : 与路径中心的垂直偏移量

3、字体样式设置(Typeface)
在Paint中设置字体样式:

paint.setTypeface(typeface);

创建Typeface:

Typeface create(String familyName, int style) //直接通过指定字体名来加载系统中自带的文字样式
    Typeface create(Typeface family, int style)     //通过其它Typeface变量来构建文字样式
    Typeface createFromAsset(AssetManager mgr, String path) //通过从Asset中获取外部字体来显示字体样式
    Typeface createFromFile(String path)//直接从路径创建
    Typeface createFromFile(File path)//从外部路径来创建字体样式
    Typeface defaultFromStyle(int style)//创建默认字体
Style的枚举值如下:
    Typeface.NORMAL  //正常体
    Typeface.BOLD   //粗体
    Typeface.ITALIC //斜体
    Typeface.BOLD_ITALIC //粗斜体

(1)、使用系统中的字体

Typeface defaultFromStyle(int style)//创建默认字体
Typeface create(String familyName, int style) //直接通过指定字体名来加载系统中自带的文字样式
例如:
    String familyName = "宋体";
    Typeface font = Typeface.create(familyName,Typeface.NORMAL);
    paint.setTypeface(font);
    canvas.drawText("欢迎光临",10,100, paint);

自字义字体

Typeface createFromAsset(AssetManager mgr, String path) //通过从Asset中获取外部字体来显示字体样式
Typeface createFromFile(String path)//直接从路径创建
Typeface createFromFile(File path)//从外部路径来创建字体样式

例如:从Asset文件中加载
    首先在Asset下建一个文件夹,命名为Fonts,然后将字体文件jian_luobo.ttf 放入其中
    AssetManager mgr=m_context.getAssets();//得到AssetManager
    Typeface typeface=Typeface.createFromAsset(mgr, "fonts/jian_luobo.ttf");//根据路径得到Typeface
    paint.setTypeface(typeface);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值