canvas教程

Android 文字绘制(DrawText)技术总结

字号+ 作者:H5之家 来源:H5之家 2017-08-31 18:02 我要评论( )

转载请注明出处: http://www.cnblogs.com/renhui/p/7453534.html 这里的绘制文字不是直接调用TextView.setText(String content)去展示文字内容。而是在View上面

转载请注明出处: 

 

这里的绘制文字不是直接调用TextView.setText(String content)去展示文字内容。而是在View上面通过 canvas.drawText(text, x, y,textPaint) 的方式直接进行文字的绘制。

 

一、基本的文字绘制方式

canvas.drawText的方式,需要我们计算好要绘制的文字的起始位置,并通过移动画布的来移动到指定的位置,绘制文字完成后然后再复原画布的位置。

canvas.translate(x, y); // 挪动canvas的坐标原点 canvas.drawText(text, x, y, tp); canvas.translate(-x, -y); // 恢复canvas的坐标原点

通过这段代码,就可以将文字绘制在指定的位置。

但是有时候我们发现,如果需要绘制的内容很多的时候,直接使用 canvas.drawText 存在很大的问题,列举其中几个问题如下:

那么怎么处理这个问题呢?Android 的API 里面 有一个非常棒的工具类 -- StaticLayout。通过StaticLayout,我们就能够实现了文本绘制换行处理

二、使用StaticLayout绘制文本 public void onDraw(Canvas canvas){   super.onDraw(canvas);   TextPaint tp = new TextPaint();   tp.setColor(Color.BLUE);   tp.setStyle(Style.FILL);   tp.setTextSize(50);   String message = "8月30日中午,法制晚报·看法新闻记者从中国电信、中国联通、中国移动获悉,三大运营商将从9月1日起全面取消手机国内长途费和漫游费(不含港澳台,下同),比原计划的10月1日提前一个月完成。用户无需申请,自动生效。";   StaticLayout myStaticLayout = new StaticLayout(message, tp, canvas.getWidth(), Alignment.ALIGN_NORMAL, 1.0f, 0.0f, false);   myStaticLayout.draw(canvas);   canvas.restore(); }

上面这段代码就是使用StaticLayout绘制文本的基本使用方式。运行后发现跟TextView的效果是一样的,通过阅读android源码可以发现,其实TextView也是调用StaticLayout来实现换行的。

StaticLayout的构造函数有三个:

public StaticLayout(CharSequence source, // 需要分行的字符串 TextPaint paint, width, // layout的宽度,字符串超出宽度时自动换行 Layout.Alignment align, spacingmult, spacingadd, includepad) bufstart, bufend, // 需要分行的字符串到哪里结束 TextPaint paint, outerwidth, // layout的宽度,字符串超出宽度时自动换行 Layout.Alignment align, spacingmult, spacingadd, includepad) bufstart, bufend, // 需要分行的字符串到哪里结束 TextPaint paint, outerwidth, // layout的宽度,字符串超出宽度时自动换行。 Layout.Alignment align, spacingmult, spacingadd, includepad, TextUtils.TruncateAt ellipsize, int ellipsizedWidth) 三、使用StaticLayout的情景

我们已经知道,使用StaticLayout可以很好的帮助我们处理文字绘制时的换行问题,那么什么地方我们能够用到StaticLayout呢?下面我可以列举几个例子:

1. 辅助图文混排的编辑器,生成图文一体的长图 -- 需要自定义View绘制的基础。

2. 音乐播放器类,桌面歌词滚动(可带颜色)

 

爱编程-编程爱好者经验分享平台

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • Android 2D绘图解析之 Canvas,Paint

    Android 2D绘图解析之 Canvas,Paint

    2017-09-01 08:03

  • Android小白的探索:2D绘图之Android简易版Microsoft Visio学习之路 一

    Android小白的探索:2D绘图之Android简易版Microsoft Visio学习之路

    2017-08-28 17:04

  • Android利用canvas画各种图形(点、直线、

    Android利用canvas画各种图形(点、直线、

    2017-08-25 15:00

  • Android 2D Graphics学习(二)、Canvas篇2、Canvas裁剪和Region、RegionIter

    Android 2D Graphics学习(二)、Canvas篇2、Canvas裁剪和Region、Re

    2017-08-20 10:10

网友点评
a