我的绘图操作有时会变慢。没有绕过那个。我看到的问题是,有时,应该在操作结束时绘制的文本不会出现。这似乎是相当随机的 - 从基本上相同的绘图操作,有时文本将显示,有时它不会,或者只有很小一部分字符会出现。有没有办法阻止这种行为?
如果重要的话,这是在Xamarin下。
编辑:这是我的一些绘图回调。您通常会看到100个左右的DrawLine调用,然后是一些DrawText调用,接着是MoveTo / LineTo的1000个线段,偶尔会混入DrawPath,最后调用DrawText类型的东西数量较少。问题发生在最终DrawText调用的文本中。部分问题在于回调本身最终来自数学函数,其评估时间是不可预测的,因为函数本身是由用户输入的。但是,现在,即使使用简单的功能,问题仍然存在。也可能相关 - 该功能本身来自ANTLR。当我在静态函数中替换(绕过ANTLR)时,问题不会发生。
public override void DrawLine(float x1, float y1, float x2, float y2) {
Paint p = new Paint();
p.Color = _color;
p.StrokeWidth = this.StrokeWidth;
_canvas.DrawLine(x1, y1, x2, y2, p);
}
public override void MoveTo(float x, float y) {
this._path.MoveTo(x, y);
}
public override void LineTo(float x, float y) {
this._path.LineTo(x, y);
}
public override void DrawPath() {
if (!this._path.IsEmpty) {
using (Paint paint = new Paint()) {
float strokeWidth = this.StrokeWidth;
paint.StrokeWidth = strokeWidth;
paint.Color = _color;
paint.SetStyle(Paint.Style.Stroke);
this._canvas.DrawPath(this._path, paint);
this._path = new Android.Graphics.Path(); //we drew what we wanted, now we need to create a new path in which to draw more stuff
}
}
}
private void DrawSingleLineText(AttributedString attributedString, float x, float y) {
using (Paint p = new Paint()) {
p.SetARGB(attributedString.Color.A, attributedString.Color.R, attributedString.Color.G, attributedString.Color.B);
p.TextSize = attributedString.Font.PointSize;
_canvas.DrawText(attributedString.Text, x, y, p);
}
}