不需要的Warp效果在路径android上绘制文本

Opi*_*chs 18 geometry android path draw warp

我在路径上绘制文本做了一些测试.我通过将位图设置为画布来制作背景图片.然后,我在画布的路径上绘制文本,按矩阵旋转.我必须缩短代码,我只会发布重要的部分,因为它太长了.下面显示的图像是用gimp裁剪的,所以不要被不同的尺寸所激怒.我的Rect,Path和Matrix对象:

    RectF drawTextOval;
    Path drawTextPath;
    Matrix mDrawnMatrix;
Run Code Online (Sandbox Code Playgroud)

现在,这就是我在圆形路径上绘制文本的方法:

    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); 
Run Code Online (Sandbox Code Playgroud)

在此之前,一切看起来都很好:

在此输入图像描述

但保存整个屏幕后,旋转的文本在保存的.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();
Run Code Online (Sandbox Code Playgroud)

为什么文字会变形?有谁看到我的错误?提前致谢....

编辑

我尝试了一些东西并发现将anyDensity设置为false或禁用Manifest中的硬件加速将在保存之前在运行时显示效果.这对我来说,在使用getDrawingCache()保存位图时,此时会禁用缩放.但为什么?

我发现的最后一件事,曲率越低,文字缩放越低.如果文字只是略微弯曲,那似乎很好.

在此输入图像描述

erb*_*man 1

我会尝试设置

this.setDrawingCacheQuality(View.DRAWING_CACHE_QUALITY_HIGH);
Run Code Online (Sandbox Code Playgroud)

在绘制到屏幕之前,因为较低的质量可能意味着文本的转换更简单。当然这只是猜测。目前,您只能在写入磁盘之前设置高质量。或者只是将其从写入磁盘方法中删除,以检查它是否影响文本的绘制方式。