内容简介:代码日志版权声明:翻译自:http://stackoverflow.com/questions/16656453/unwanted-warp-effect-drawing-text-on-path-android
我在路径上绘制文本做一些测试.我通过将位图设置为画布来制作了背景图片.然后,我在画布上绘制文字,按矩阵旋转.我必须缩短代码,我只会发布重要的部分,因为它太长了.下面显示的图像是用gimp剪裁的,所以不要因为不同的大小而烦恼.我的矩形,路径和矩阵对象:
RectF drawTextOval; Path drawTextPath; Matrix mDrawnMatrix;
现在,我正在做的是在圆形路径上绘制文字:
drawTextOval.set(drawTextPosX - drawTextArc, drawTextPosY - drawTextArc, drawTextPosX + drawTextArc, drawTextPosY + drawTextArc); drawTextPath.addArc(drawTextOval, 0, 360); drawTextPath.computeBounds(drawTextOval, true); mDrawnMatrix.postRotate(drawTextArcStart, (drawTextOval.right + drawTextOval.left) / 2, (drawTextOval.bottom + drawTextOval.top) / 2); drawTextPath.transform(mDrawnMatrix); patternCanvas.drawTextOnPath(drawText, drawTextPath, 0, 0, mFixedTextPaint);
直到这一点,一切看起来都很好:
但在保存整个屏幕后,旋转的文本在保存的.png图像上看起来扭曲.所有其他组件看起来不错.我做了一些其他图形文字,线性或角度,所有这些工作.甚至一些.png位图绘制到画布和背景图像…都正常看.但是,在圆形路径中绘制的文字如下所示:
我没有对位图进行缩放,只需保存画布图像:
FileOutputStream fos = new FileOutputStream(saveFile); this.setDrawingCacheQuality(View.DRAWING_CACHE_QUALITY_HIGH); Bitmap bitmap = this.getDrawingCache(); bitmap.compress(CompressFormat.PNG, 100, fos); fos.flush(); fos.close();
为什么文本看起来扭曲?有没有人看到我的错误?提前致谢….
编辑
我尝试了一些东西,发现设置anyDensity为false或禁用硬件加速在Manifest将显示在运行时的效果在保存之前.这对我来说,当使用getDrawingCache()保存位图时,缩放在此时被禁用.但为什么?
我发现最后一件事,曲率越低,文本缩放越低.如果文字只是有点弯曲,似乎很好.
我会尝试设置
this.setDrawingCacheQuality(View.DRAWING_CACHE_QUALITY_HIGH);
在绘制屏幕之前,因为较低的质量可能意味着文本的更简单的转换.这当然是猜测.目前,您只能在写入磁盘之前设置高品质.或者将其从写入磁盘方法中删除,以检查它是否影响文本的绘制方式.
代码日志版权声明:
翻译自:http://stackoverflow.com/questions/16656453/unwanted-warp-effect-drawing-text-on-path-android
以上所述就是小编给大家介绍的《不需要的变形效果在路径android上绘制文本》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- canvas学习笔记-绘制简单路径
- 深入解析Java绝对路径与相对路径
- C#/.NET 如何确认一个路径是否是合法的文件路径
- ViewGroup 默认顺序绘制子 View,如何修改?什么场景需要修改绘制顺序?
- GAC 与其物理路径
- 关键渲染路径优化
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
谷歌时代的柏拉图
[美] 丽贝卡·戈尔茨坦 / 李鹏程 / 中信出版集团·新思文化 / 2017-12-10 / 69.00元
我愿意用我所有的科技去换取和苏格拉底相处的一个下午。 ——史蒂夫•乔布斯 谷歌时代,科技昌明,众声喧哗,哲学提出的许多问题,科学似乎都已经给出了答案。若是如此,为什么我们今天还需要哲学?这个由古希腊城邦时代的哲人苏格拉底和柏拉图开创的学科,真的过时了吗? 已经2400岁 的柏拉图对此有话要说。哲学家兼小说家、美国国家人文奖章获得者戈尔茨坦史海钩沉,从经典著作中复活了柏拉图,让他来......一起来看看 《谷歌时代的柏拉图》 这本书的介绍吧!