文字

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);//只会将水平方向拉伸,高度不会变

下面是一些常见的效果:

1.绘图方式的区别:

  Paint paint1=new Paint();paint1.setStrokeWidth(5);paint1.setColor(Color.RED);paint1.setTextSize(80);paint1.setStyle(Paint.Style.STROKE);String msg="你说你有点难追";canvas.drawText(msg,50,100,paint1);paint1.setStyle(Paint.Style.FILL);canvas.drawText(msg,50,200,paint1);paint1.setStyle(Paint.Style.FILL_AND_STROKE);canvas.drawText(msg,50,300,paint1);

2.文字样式的设置以及正负倾斜区别

 paint1.setStyle(Paint.Style.FILL);//文字样式设置paint1.setUnderlineText(true);  //下划线paint1.setStrikeThruText(true);  //删除paint1.setFakeBoldText(true); //粗体//设置字体水平倾斜度,普通斜体字是-0.25,可见往左斜paint1.setTextSkewX((float)-0.25);canvas.drawText(msg,50,400,paint1);//设置字体水平倾斜度,普通斜体字是0.25,可见往右斜paint1.setTextSkewX((float)0.25);canvas.drawText(msg,50,500,paint1);

3.水平拉伸设置

//文字拉伸样式设置//未变字体canvas.drawText(msg,50,600,paint1);//在x轴方向拉伸paint1.setTextScaleX(2);canvas.drawText(msg,50,700,paint1);//重置字体paint1.setTextScaleX(1);canvas.drawText(msg,50,800,paint1);//在相同的位置换一种颜色显示字体  看看在x轴拉伸之后,是否会变形paint1.setTextScaleX(2);paint1.setColor(Color.YELLOW);canvas.drawText(msg,50,800,paint1);

看一下上述操作的效果:

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是可以利用spannableString来构造有图片的字符串的,那这里是不是可以画出带有图片的字符串来呢 ,实际证明,canvas画图是不支持Span替换的。所以这里的charSequence跟普通的String没有任何区别的。

 //绘制文字 char[]方式:字符数组、开始位置、长度、开始显示的横坐标、纵坐标、绘图的画笔char c[]={'K','o','b','e','B','r','y','a','n','t'};canvas.drawText(c,0,c.length,400,50,mPaint);//绘制文字//1.从某个位置显示指定长度的子字符串String msg="Kobe Bryant";canvas.drawText(msg,0,4,400,120,mPaint);//2.显示整个字符串String msg2="James";canvas.drawText(msg2,400,200,mPaint);//只要是实现CharSequence接口的类,都可以使用下面的方式绘制字符串StringBuffer sb=new StringBuffer();sb.append("Kobe");sb.append(" James");canvas.drawText(sb,0,sb.length(),400,300,mPaint);StringBuilder sb2=new StringBuilder();sb2.append("Jorden");sb2.append(" Malon");canvas.drawText(sb2,0,sb2.length(),400,400,mPaint);

2.指定每个文字的位置

void drawPosText (char[] text, int index, int count, float[] pos, Paint paint)
void drawPosText (String text, float[] pos, Paint paint)
        float []pt={50,900,50,1000,50,1100,50,1200};float []ptt={150,900,150,1000,150,1100,150,1200};canvas.drawPosText("我要快乐",pt,paint1);char []c={'我','要','快','乐'};canvas.drawPosText(c,0,4,ptt,paint1);

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)

这里需要 注意hOffset和vOffset这两个形参
hOffset:与路径起始点的偏移量
vOffset:与路径中心的垂直偏移量

   Path circlePath=new Path();Path circlePath2=new Path();circlePath.addCircle(500,1400,200, Path.Direction.CCW);circlePath2.addCircle(800,1400,200, Path.Direction.CCW);String msg2="你说你有点难追";canvas.drawPath(circlePath,paint1);canvas.drawPath(circlePath2,paint1);canvas.drawTextOnPath(msg2,circlePath,0,0,paint1);canvas.drawTextOnPath(msg2,circlePath2,30,30,paint1);

下一下效果:

字体样式设置
在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)//创建默认字体

1.使用系统字体

使用系统自带的字体有如下两种方式:

Typeface    defaultFromStyle(int style)//创建默认字体Typeface   create(String familyName, int style) //直接通过指定字体名来加载系统中自带的文字样式
 //使用defaultFromStyle这种方式Typeface f1=Typeface.defaultFromStyle(Typeface.BOLD);paint.setTypeface(f1);canvas.drawText("I love you",50,100,paint);//android系统默认支持三种字体,分别为:“sans”,“serif”,“monospace”。Typeface f2=Typeface.create("monospace",Typeface.NORMAL);paint.setTypeface(f2);canvas.drawText("I love you",50,200,paint);

2.自定义字体

自定义字体就是从外部文件中加载需要的字体,有如下3个构造函数:

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

一般都都是从asset下加载自定义字体文件,首先在Asset下建一个文件夹,命名为Fonts,然后将字体文件jian_luobo.ttf 放入其中。

//使用外部的自定义的字体AssetManager mgr=context.getAssets();//得到AssetManagerTypeface typeface=Typeface.createFromAsset(mgr, "font/jian_luobo.ttf");//根据路径得到Typefacepaint.setTypeface(typeface);canvas.drawText("菜鸟的Android",50,300, paint);//两个构造函数

效果图如下:

Canvas---文字的绘制相关推荐

  1. 小程序canvas文字信息绘制图片,模拟器正常保存图片,真机无法保存图片报错downloadFile:fail downloadFile protocol must be http or https

    最近做小程序有个需求是将文字信息生成图片保存到本地,在PC端模拟器,图片的地址是 可以正常保存,不报错 但是到了真机的时候就报错,并且图片地址也发生改变 解决办法: 先将图片上传到服务器util.up ...

  2. Canvas入门教学(3)图片与文字的绘制

    上节课跟大家讲解了基本的线条和多边形的绘制,主要的方法是stroke()和fill()方法.并且还封装了两个动态绘制线条和多边形的方法.这节课我们带领大家来认识一下文字以及图片的绘制,从而理解一下ca ...

  3. canvas 文字颜色_Canvas技术概述

    Canvas简介 在学习一项新技术之前,先了解这项技术的历史发展及成因会帮助我们更深刻的理解这项技术. 历史上,canvas最早是由Apple Inc. 提出的,在Mac OS X webkit中创建 ...

  4. Canvas 文字对齐方式

    Canvas 文字对齐方式 常用的画文字的方法 public void drawText (String text, float x, float y, Paint paint) x,y 并不是指定文 ...

  5. ae制h5文字动画_7款超华丽的HTML5 Canvas文字动画特效

    本文作者html5tricks,转载请注明出处 文字是网页中最为常见的元素之一,当然我们使用最多的就是调整文字的颜色.大小等基本属性.有时候我们在一些活动页面上需要展示特别样式的文字效果,这时候我们就 ...

  6. html5字体动画效果,7款超华丽的HTML5 Canvas文字动画特效

    原标题:7款超华丽的HTML5 Canvas文字动画特效 文字是网页中最为常见的元素之一,当然我们使用最多的就是调整文字的颜色.大小等基本属性.有时候我们在一些活动页面上需要展示特别样式的文字效果,这 ...

  7. H5canvas(绘制矩形,绘制圆形,绘制线段,绘制文字,绘制曲线)

    Canvas简介 canvas 最早由Apple引入WebKit,用于Mac OS X 的 Dashboard,后来又在Safari和Google Chrome被实现. 基于 Gecko 1.8的浏览 ...

  8. H5画布 canvas(一)canvas简介、绘制圆形矩形、案例饼状图绘制

    目录 1. canvas 简介 2. canvas 标签介绍 3. canvas 上下文 Context 4. 案例:在 canvas 画布中绘制表格 5. canvas 的 beginPath 状态 ...

  9. H5画布 canvas(一)canvas简介、绘制圆形/矩形、案例饼状图绘制

    目录 1. canvas 简介 2. canvas 标签介绍 3. canvas 上下文 Context 4. 案例:在 canvas 画布中绘制表格 5. canvas 的 beginPath 状态 ...

  10. Android Canvas.DrawText文本绘制

    更新时间:2022-01-23 文章目录 1. 先来一个简单的演示效果 1)MyDrawTextView.java 2)MainActivity.java 3)activity_main.xml 2. ...

最新文章

  1. HDU 5047 Sawtooth 高精度
  2. VDI序曲二 RemotoAPP晋级篇
  3. python中如何打开csv文件_在Python中从CSV文件读取数据
  4. 阿里云Centos系统使用密钥对登陆
  5. boost::container模块实现分配器参数的测试程序
  6. 【渝粤题库】广东开放大学 跨文化商务沟通 形成性考核
  7. Tomcat安装与环境变量的配置-Linux+windows
  8. mysql主从配置_MySQL主从配置详解
  9. nginx常见错误之(CreateFile() “D:\LCJ\下载\nginx/conf/nginx.conf“ failed (3: The system cannot find the path
  10. php border-style,border-style
  11. linux复制 cp -rf 会覆盖已经存在的文件吗_Linux笔记之目录管理命令2
  12. php之$_SESSION的理解
  13. 计算机自我鉴定范文7月,学员自我鉴定表7篇
  14. App Tamer for Mac(CPU优化电池管理工具)
  15. 【2023】DevOps、SRE、运维开发面试宝典之Redis相关面试题
  16. 看google如何招人
  17. 小白学习,歌词解析(全)
  18. get案例 爬取百度贴吧
  19. 升级K8S证书有效期为100年操作说明
  20. excel函数采集,截取特殊符号前面/后面数据

热门文章

  1. 云服务器部署斗地主(docker容器部署,上手容易)
  2. 墨修尧哪一章痊愈_第19章 偏心祖母是叶璃墨修尧最新更新章节-TXT全集下载-阅书阁手机阅读...
  3. 华为手机鸿蒙系统自带吗,内置鸿蒙系统的四款华为手机,实力都很强,可惜都有一点瑕疵!...
  4. 计算机网络命令dos命令大全,DOS命令大全:Ipconfig命令详解 – itShouce
  5. 如何提高在搜索引擎中的排名-百度排名-竞价排名-自然排名
  6. 使用Charles进行手机抓包
  7. 未能加载文件或程序集“Newtonsoft.Json, Version=4.5.0.0, Culture=neutral
  8. 非常有趣的的免费API接口,基本上很全了。
  9. matlab中文帮助_MATLAB数据及图像处理与机器学习培训
  10. WordPress博客里面放谷歌广告代码