xamarin System.Drawing.Graphics

时间:2016-01-12 11:03:21

标签: c# android xamarin xamarin.android

我试图在Android手机屏幕上绘制图表。我已经在Windows窗体应用程序中创建了我需要的类,以使测试更容易,更快。我的应用程序使用System.Drawing类

当我试图在xamarin android项目中应用我的代码时,System.Drawing类显然不包含" Graphics"," Font",&#34 ;笔"和"画笔"类。 System.Drawing.Graphics类记录在xamarin android api中,但是我无法使它工作。

我是否必须导入一个不同的类才能使用这些类,或者我是否必须更改我写的代码?

我的图表类(仅绘制x和y轴+数字):Graph Class

//author Frank Keuning
using Android.Content;
using Android.Graphics.Drawables;
using Android.Graphics.Drawables.Shapes;
using Android.Views;
using System.Drawing;

namespace App2
{
    public class Graph
    {
        Graphics g;
        int height;
        int width;
        int step;
        int x;
        int y;

        Point yNumPoint;
        Point xNumPoint;
        Font font = new Font("Verdana", 7.5f);
        Pen pen = Pens.Black;

        public Graph(Graphics gph, int hght, int wdth, int stp, int xStart, int yStart)
        {
            g = gph;
            height = hght;
            width = wdth;
            step = stp;
            x = xStart;
            y = yStart;
        }

        public void draw(Graphics g)
        {
            g.DrawLine(pen, x, y, x, height);
            g.DrawLine(pen, x, height, width, height);
            drawNumbers(g);
        }

        void drawNumbers(Graphics g)
        {
            yNumPoint = new Point(0, height - y);
            xNumPoint = new Point(x, height + y);
            int yNumValue = 0;
            int xNumValue = 0;
            while (yNumValue <= height)
            {
                g.DrawString(yNumValue.ToString(), font, Brushes.Black, yNumPoint);
                yNumValue += step;
                yNumPoint.Y -= step;
            }

            while (xNumValue <= width)
            {
                g.DrawString(xNumValue.ToString(), font, Brushes.Black, xNumPoint);
                xNumValue += step;
                xNumPoint.X += step;
            }
        }
    }
}

3 个答案:

答案 0 :(得分:0)

对于我的项目,我有同样的要求:在Android中使用原生图形。

我想出了一个移植层。它运行速度相对较快,但某些功能可能尚未实现:

https://github.com/cail/AndroidDrawing

答案 1 :(得分:0)

当我试图将WinForms代码复制粘贴到Xamarin中时,我的一个同事遇到了同样的问题。遗憾的是,这并不容易。

正如您所提到的,System.Drawing存在,但它已经简化了。这背后的原因是Xamarin Android在Mono上运行(参见Mono docs),因此不是.NET。你丢失包裹的原因很简单,正如有些人在这里提到的那样;这些名称空间和类根本不存在。正如许多其他人指出的那样,还有nuget-packages或Xamarin Components等形式的替代品。

一个好的起点是:

  1. Xamarin Component store
  2. NuGET (deeplink)
  3. 请注意,我建议您使用随时可用的库。根据我的经验,尝试重新创建WinForms(或它所做的事情)是徒劳的,因为移动开发工作完全不同。我建议你找一个图表库而不是绘图库,但这只是我的€0,02。

    附加组件:如果您正在尝试构建可以跨平台工作的东西,请确保检查跨平台库(如果您很幸运,它们可以在可移植类库或.NET标准库中工作)。这将帮助您开始使用每个移动项目类型,而不必使用不同的库重新创建图形。

答案 2 :(得分:-1)

您需要使用具有跨平台支持的库。 Xamarin以SkiaSharp的名义移植了skia librery,你现在可以将它用于android,iOS和windows

https://developer.xamarin.com/guides/cross-platform/drawing/