android 绘图 简书,android text 绘制

一、Canvas 绘制文字相关api

1、canvas.drawText(String text, float x, float y, Paint paint)

注释:

text : 文字的内容

x,y:文字的坐标,y为文字的基线(baseline)位置,并非文字的左上角;

x的位置为所绘制文字的左边再往左一点点,因为字符的左右两边会留出一部分空隙,用于文字之间的间隔,以及文字和边框的间隔。所以绝大多数的字符,它们的宽度都是要略微大于显示的宽度的

paint:画笔

2、canvas.drawTextRun()

此方法对中国人没用,是在API 23 新加入的方法。他和drawText()一样都是绘制文字,但加入了俩项额外的设置——上下文和文字方向——用于辅助一些文字结构比较特殊的语言的绘制。

3、drawTextOnPath(String text,Path path,float hOffset,float vOffset,Paint paint)

功能:沿着一条Path来绘制文字

text:绘制文字内容

path:绘制路径

hOffset:文字相对于Path的水平偏移量

vOffset:文字相对于Path的竖直偏移量

二、StaticLayout

staticlayout是使用canvas来进行文字的绘制,不过并不是使用canvas的方法。Canvas.drawText()方法只能绘制单行的文字,而不能换行。其不能在view的边缘自动折行。也不能在换行符 \n处换行,其只是加了个空格和n无换行效果。如果需要绘制多行的文字,你必须自行把文字切断后分多次使用drawText来进行绘制。

StaticLayout为android.text.Layout的子类,其是纯粹用来绘制文字的,其支持换行,它既支持文字设置宽度上限来让文字自动换行,也会在\n处主动换行。

StaticLayout初始化方法:

StaticLayout(CharSequence source, TextPaint paint, int width, Layout.Alignment align, float spacingmult, float spacingadd, boolean includeadd)

width:文字区域的宽度,达到这个宽度后自动换行

align:文字的对其方式

spacingmult:行间距的倍数,通常设为1

spacingadd:行间距的额外增加值,通常情况设为0

includepad:是否在文字上下添加额外的空间,来避免某些过高的字符的绘制出现越界

String text = " This is the staticlayout sample to release the text line feed"

StaticLayout staticLayout = new StaticLayout(text,paint,500,LayoutAlignment.ALIGN_NORMAL,1,0,true);

staticLayout.draw(canvas);

三、Paint 对文字绘制的辅助

1、设置文字的大小

paint.setTextSize();

2、设置文字的字体

设置不同的Typeface就可以显示不同的字体

//设置系统自带的字体

paint.setTypeface(Typeface.DEFAULT);

paint.setTypeface(Typeface.SERIF);

//设置自定义的某套字体

paint.setTypeface(Typeface.createFromAsset(getContext().getAssets(),"Satisy-Regular.ttf"));

3、设置使用伪粗体

之所以叫伪粗体,因为它并不是通过选用更高weight的字体让文字变粗,而是通过程序在运行时把文字给描粗了。

paint.setFakeBoldText(true);

4、是否加删除线

paint.setStrikeThruText(true);

5、是否加下划线

paint.setUnderlineText(true);

6、设置文字横向错切角度即文字的倾斜度

paint.setTextSkewX(-0.5f);

7、设置文字横向缩放,即文字的胖瘦

paint.setTextScaleX(1.2f);

8、设置字符间间距,默认为0

paint.setLetterSpacing(0.2f);

9、用CSS的font-feature-settings的方式来设置文字

主要设置一些文字的次要属性,可以简单了解下

paint.setFontFeatureSettings("smcp");

10、设置文字的对齐方式

文字的对齐方式一共有三种:LEFT CENTER和RIGHT 默认值为LEFT

paint.setTextAlign(Paint.ALign.CENTER);

11、设置文字的地域

paint.setTextLocale(Locale.TAIWAN) //简体中文

paint.setTextLocale(Locale.JAPAN) //日语

12、是否启用字体的hinting(字体微调)

现在的 Android 设备大多数都是是用的矢量字体。矢量字体的原理是对每个字体给出一个字形的矢量描述,然后使用这一个矢量来对所有的尺寸的字体来生成对应的字形。由于不必为所有字号都设计它们的字体形状,所以在字号较大的时候,矢量字体也能够保持字体的圆润,这是矢量字体的优势。不过当文字的尺寸过小(比如高度小于 16 像素),有些文字会由于失去过多细节而变得不太好看。 hinting 技术就是为了解决这种问题的:通过向字体中加入 hinting 信息,让矢量字体在尺寸过小的时候得到针对性的修正,从而提高显示效果。

paint.setHinting(int mode)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值