2016-09-02 1 views
2

У меня есть функция, которая рисует текст на холсте с помощью drawTextOnPath. Я подсчитал, что все работает отлично, но я хочу нарисовать его определенным образом. В настоящее время смещение вращения текста равно смещению кругов. Я хочу повернуть текст на 90/45 градусов. Но я не могу понять, как это сделать.Как повернуть по горизонтали текст, созданный drawTextonPath в круге?

Пожалуйста, любые идеи.

private void drawLegend(Canvas canvas) { 
    canvas.save(Canvas.MATRIX_SAVE_FLAG); 
    canvas.rotate(-228, centerX, centerY); 

    Path circle = new Path(); 
    double halfCircumference = (radius * 2 * Math.PI) - ((radius * 2 * Math.PI)/8) * 2; 
    double increments = 5; 

    for (int i = 0; i <= this.mMaxSpeed; i += increments) { 
     circle.addCircle(centerX, centerY, radius, Path.Direction.CW); 
     canvas.drawTextOnPath(String.format("%d", i), 
       circle, 
       (float) (i * halfCircumference/this.mMaxSpeed), 
       -20f, 
       scalePaint); 
    } 
    canvas.restore(); 
} 

This is current mapping This is current mapping

Thi is how I wnat it to be displayed Thi is how I wnat it to be displayed

+0

То, как я это сделал, вычисляет положение холста, используя функцию для круга и рисуя текст таким образом. – eski

+0

@eski вы можете быть более конкретным, пожалуйста? Может быть, какой-то пример поможет. – Mikhail

ответ

3

Решение было не привлекать с помощью drawTextOnPath, но рисовать на холсте, используя drawText

 canvas.drawText(String.valueOf(0), (x - width/2) + 35, (y + height/2) - 25, scalePaint); 
     canvas.drawText(String.valueOf(5), (x - width/2) - 20, (y) + 8, scalePaint); 
     canvas.drawText(String.valueOf(10), (x - width/2) + 30, (y - height/2) + 40, scalePaint); 
     canvas.drawText(String.valueOf(15), (x), (y - height/2) - 18, scalePaint); 
     canvas.drawText(String.valueOf(20), (x + width/2) - 30, (y - height/2) + 40, scalePaint); 
     canvas.drawText(String.valueOf(25), (x + width/2) + 25, (y) + 8, scalePaint); 
     canvas.drawText(String.valueOf(30), (x + width/2) - 35, (y + height/2) - 25, scalePaint); 

UPDATE после 7 месяцев

Секрет в том, чтобы использовать sin и cos функции для расчета компенсировано x и y.

Смежные вопросы