我试图在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;
}
}
}
}
答案 0 :(得分:0)
对于我的项目,我有同样的要求:在Android中使用原生图形。
我想出了一个移植层。它运行速度相对较快,但某些功能可能尚未实现:
答案 1 :(得分:0)
当我试图将WinForms代码复制粘贴到Xamarin中时,我的一个同事遇到了同样的问题。遗憾的是,这并不容易。
正如您所提到的,System.Drawing存在,但它已经简化了。这背后的原因是Xamarin Android在Mono上运行(参见Mono docs),因此不是.NET。你丢失包裹的原因很简单,正如有些人在这里提到的那样;这些名称空间和类根本不存在。正如许多其他人指出的那样,还有nuget-packages或Xamarin Components等形式的替代品。
一个好的起点是:
请注意,我建议您使用随时可用的库。根据我的经验,尝试重新创建WinForms(或它所做的事情)是徒劳的,因为移动开发工作完全不同。我建议你找一个图表库而不是绘图库,但这只是我的€0,02。
附加组件:如果您正在尝试构建可以跨平台工作的东西,请确保检查跨平台库(如果您很幸运,它们可以在可移植类库或.NET标准库中工作)。这将帮助您开始使用每个移动项目类型,而不必使用不同的库重新创建图形。
答案 2 :(得分:-1)
您需要使用具有跨平台支持的库。 Xamarin以SkiaSharp的名义移植了skia librery,你现在可以将它用于android,iOS和windows
https://developer.xamarin.com/guides/cross-platform/drawing/