绘制用于图形轴描述的文本

时间:2018-11-02 13:34:27

标签: skiasharp

我正在使用SkiaSharp绘制图形。现在,我想在X轴上添加轴描述(星期一,星期二,...)。

这里的重要代码是:

foreach(string key in surveyAnswers.Keys)
            {
                SKPath currentTextPath = new SKPath();
                currentTextPath.MoveTo((float)(info.Width * borderOffset + i * xStepSize - 70), (float)(info.Height * borderOffset + (answerPossibilitiesCount - 1) * yStepSize + 70));
                currentTextPath.RLineTo(70, -70);

                canvas.DrawTextOnPath(key, currentTextPath, 0, 0, paint);
                i++;
            }

它为我提供了正确定位的路径,在该路径上可以绘制文本。问题在于路径的长度是固定的。我将其设置为70高和宽,这会在较短的文本上留出空间,而将较长的文本剪掉。

可以找到一个示例here

我想过一些解决问题的方法,尽管没有用,因为它们需要不受支持的操作或我没有的信息。

如何使文本与图形对齐?

1 个答案:

答案 0 :(得分:0)

我已经使用pathLength变量解决了这个问题,该变量取决于字体大小和文本长度。

float pathLenght = (float)((key.Length * (17.0f/25.0f * textSize)) / Math.Sqrt(2));

17/25的比例似乎在许多字体大小上都很好。

只要有人需要,我都会用插入的解决方案发布上面的代码

foreach(string key in surveyAnswers.Keys)
            {
                float pathLenght = (float)((key.Length * (17.0f/25.0f * textSize)) / Math.Sqrt(2));
                SKPath currentTextPath = new SKPath();
                currentTextPath.MoveTo((float)(info.Width * borderOffset + i * xStepSize - pathLenght), (float)(info.Height * borderOffset + (answerPossibilitiesCount - 1) * yStepSize + pathLenght));
                currentTextPath.RLineTo(pathLenght, -pathLenght);

                canvas.DrawTextOnPath(key, currentTextPath, 0, 0, paint);
                i++;
            }