处理长绘图操作

时间:2014-07-22 19:49:15

标签: android graphics drawing xamarin.android

我的绘图操作有时会变慢。没有绕过那个。我看到的问题是,有时,应该在操作结束时绘制的文本不会出现。这似乎是相当随机的 - 从基本上相同的绘图操作,有时文本将显示,有时它不会,或者只有很小一部分字符会出现。有没有办法阻止这种行为?

如果重要的话,这是在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);
  }
}

0 个答案:

没有答案