measuring text on scaled canvas

后端 未结 2 782
旧时难觅i
旧时难觅i 2021-02-09 04:51

I\'ve been struggling with text measuring and scaled canvases.

When the canvas is unscaled, getTextBounds and measureText deliver accurate results. However, when the ca

2条回答
  •  广开言路
    2021-02-09 05:52

    Using Mono for Android I had to use display metrics as shown here:

    public override System.Drawing.SizeF MeasureString(MyFont f, string text)
    {
      Rect r = new Rect();
    
      f.DrawingFont.GetTextBounds(text, 0, text.Length, r);
    
      //Manual scaling using DisplayMetrics due to Android
      //issues for compatibility with older versions
      Android.Util.DisplayMetrics metrics = new Android.Util.DisplayMetrics();
      GetDisplay.GetMetrics(metrics);
    
      return new System.Drawing.SizeF(r.Width(), r.Height() * metrics.Density);
    }
    

    Where f.DrawingFont is an Androdid.Text.TextPaint GetDisplay is:

    private Display GetDisplay()
    {
      return this.GetSystemService(Android.Content.Context.WindowService).JavaCast().DefaultDisplay;
    }
    

    And the same method in Java is:

    private Display getDisplay() {
        return ((WindowManager) getContext().getSystemService(
                Context.WINDOW_SERVICE)).getDefaultDisplay();
    }
    

提交回复
热议问题