我对在路径上绘制文本进行了一些测试。我通过将位图设置到画布来制作背景图片。然后,我在画布路径上绘制文本,按矩阵旋转。我必须缩短代码,我只会发布重要的部分,因为它太长了。下面显示的这张图片是用 gimp 裁剪的,所以不要被不同的尺寸激怒。我的 Rect、Path 和 Matrix 对象:
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();
为什么文字看起来扭曲?有人看到我的错误吗?提前致谢...
编辑
我尝试了一些东西,发现在 Manifest 中将任何密度设置为 false 或禁用硬件加速将在运行时显示效果,然后再保存。这向我表明,当使用 getDrawingCache() 保存位图时,此时禁用缩放。但为什么?
我发现的最后一件事是,曲率越低,文本缩放就越低。如果文字稍微弯曲一点,看起来还不错。