2016-05-07 3 views
0

Я работаю над Android-приложением, использующим xamarin и библиотеку oxyplot. Я столкнулся с проблемой, когда я не могу добавить несколько строк текста в TextAnnotation. Я попытался следующие варианты:Показать несколько строк текста в Oxyplot TextAnnotation

var sb = new StringBuilder(); 
    sb.Append("Line1"); 
    sb.AppendLine(); // which is equal to Append(Environment.NewLine); 
    sb.Append("\n"); 
    sb.Append("\r\n"); 
    sb.Append(System.Environment.NewLine); 
    sb.Append("Line2"); 

и добавить его как и к TextAnnotation текстового объекта:

 var textAnnotation1 = new TextAnnotation(); 
     textAnnotation1.Text = sb.ToString(); 
     textAnnotation1.Background = OxyColors.White; 
     textAnnotation1.TextColor = OxyColors.Black; 
     textAnnotation1.FontSize = 18; 
     textAnnotation1.TextPosition = new DataPoint(4,_vericalLineYaxis); 
     plotModel.Annotations.Add(textAnnotation1); 

, но все безрезультатно.

Моя цель состоит в том, чтобы текст выглядеть так:

Линия 1
Линия 2

В настоящее время он появляется как:

Линия 1 Line2

Любая помощь будет высоко оценена.

ответ

1

Многострочные аннотации не в настоящее время поддерживается на платформе Android.

OxyPlot вызывает Android.Canvas.DrawText, и эта функция не поддерживает перенос текста, это довольно низкоуровневая процедура примитивного рисования.

Если вы чувствуете, как mod'ing источник, это может быть сделано с помощью статической раскладки по сравнению с текущей canvas.DrawText.

Что-то, как это было, чтобы вы начали (но не тестировался):

public void DrawText (string text, float x, float y, Paint paint) 
{ 
    TextPaint textPaint = new TextPaint(); 
    StaticLayout textLayout = new StaticLayout(text, textPaint, canvas.getWidth(), Alignment.ALIGN_NORMAL, 1.0f, 0.0f, False); 
    canvas.Save(); 
    canvas.Translate(x, y); 
    textLayout.Draw(canvas); 
    canvas.Restore(); 
} 

FYI: SVG визуализатор Oxyplot вручную обрабатывает текст из нескольких строк струнный расщеплению на «\ г \ п» и рендеринга отдельный элемент для каждой строки, так то же самое можно было бы сделать для Android вместо использования StaticLayout (снижение производительности мудрой, но простой в моды/тест):

var lines = Regex.Split(text, "\r\n"); 
if (valign == VerticalAlignment.Bottom) 
{ 
    for (var i = lines.Length - 1; i >= 0; i--) 
    { 
     var line = lines[i]; 
     var size = this.MeasureText(line, fontFamily, fontSize, fontWeight); 
     this.w.WriteText(p, line, c, fontFamily, fontSize, fontWeight, rotate, halign, valign); 

     p += new ScreenVector(Math.Sin(rotate/180.0 * Math.PI) * size.Height, Math.Cos(rotate/180.0 * Math.PI) * size.Height); 
    } 
} 
+1

SushiHangover, я знаю, что вы пытаетесь помочь, но Я понятия не имею, что Вы только что сказали. Я чувствую, что вы ответили на другой вопрос. Все я понял, что многострочная аннотация еще не реализована. Честно говоря, спасибо, что заглянули в него. – user6304988

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