Paint和TextPaint有什么区别?只能将TextPaint绘制到画布上吗?
我最近一直在研究如何在画布上绘制文字,这导致了我的TextPaint.然而,在阅读the source code时,我很惊讶地发现TextPaint并没有太多.实际上,您实际上并不需要它在画布上绘制文本.所以我正在添加这个Q& A,以使其更加清晰.
解决方法:
TextPaint
是Paint
的子类.但是,与您从这些名称中猜到的相反,在画布上绘制文本的繁重工作是由Paint完成的.因此,这
TextPaint textPaint = new TextPaint();
textPaint.setTextSize(50);
canvas.drawText("some text", 10, 100, textPaint);
还有这个
Paint paint = new Paint();
paint.setTextSize(50);
canvas.drawText("some text", 10, 100, paint);
实际上做同样的事情. TextPaint只是Paint周围的一个光包装,在绘制和测量文本时为Android提供了一些extra data.如果您阅读TextLine
class source code(此类绘制一行文本),您可以看到这一点.这显然是为什么在创建类似StaticLayout
的东西时必须传入TextPaint而不是Paint对象的原因.
TextPaint字段
关于“额外数据”在这里的说明是一个更全面的解释,文档非常稀少. (Disclamer:通过在TextPaint中更改这些值,我实际上无法影响我在测试中如何绘制文本的任何更改.所以请仔细阅读本节内容.)
> baselineShift
– 基线是文本底部的线.有关图像,请参见this answer.更改baselineShift会导致基线向上或向下移动,从而影响在线上绘制文本的高度.
> bgColor
– 这是文本背后的背景颜色.
> density
– 我认为这是屏幕密度,但我找不到它在任何源代码中使用.
> drawableState
– 除了PFLAG_DRAWABLE_STATE_DIRTY
标志外,我在源代码中找不到太多内容,这让我觉得这可以让对象知道何时需要重绘.
> linkColor
– 我只能假设这意味着它所说的链接的文字颜色.但是,我发现在任何源代码中都没有使用它.
笔记
> TextPaint
source code
> Paint
source code
>如果您有任何其他信息,请留言或更新此答案.
标签:android,text,canvas,paint 来源: https://codeday.me/bug/20190717/1487340.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。