2016-01-12 6 views
2

Im пытается нарисовать график на экране телефона Android. Я создал классы, которые мне нужны в приложении форм Windows, чтобы сделать тестирование проще и быстрее. В моем приложении используется класс System.Drawingxamarin System.Drawing.Graphics

Когда я пытаюсь применить мой код в проекте xamarin android, класс System.Drawing, по-видимому, не содержит «Графика», «Шрифт», «Ручка» и «Кисти» "классы. Класс System.Drawing.Graphics задокументирован в xamarin android api, но все же я не могу заставить его работать.

Должен ли я импортировать diffrent-класс, чтобы иметь возможность использовать эти классы, или мне нужно изменить код, который я написал?

Моего класс Graph (только рисует й и ось 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

Вставьте код. Большинство из нас не будет тратить время, чтобы перейти по ссылке, которая может сломаться. Скопируйте и вставьте его. Также см. Stackoverflow.com/help/mcve для некоторой помощи о том, как включить –

+0

. Я добавил свой код, спасибо. – FrankK

+4

System.Drawing.Graphics привязан к W32 и GDI-системам, которые не существуют на Android.Вам нужно будет использовать API-интерфейсы для Android, чтобы выполнять аналогичные функции в Android, даже с Xamarin – Jason

ответ

0

Для моих проектов я имел то же requrement: использовать собственные графики в Android.

Я подошел с портирующим слоем. Она работает относительно быстро, но некоторые функции могут быть еще не реализованы:

https://github.com/cail/AndroidDrawing

-1

Вы должны использовать библиотеку, которая имеет поддержку кросс-платформенной. Xamarin была портирована Skia librery под названием SkiaSharp и теперь вы можете использовать его для андроид, прошивки и окно

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

0

Один из моих столкнулся среди коллег с той же проблемой, когда он буквально пытался копировать-вставить WinForms- код в Xamarin. Это печально.

Как вы упомянули System.Drawing существует, но это упрощено. Причина этого в том, что Xamarin Android работает на Mono (см. Mono docs) и, следовательно, не .NET. Причина, по которой вы пропускаете пакеты, проста, как некоторые из них упомянули здесь; эти пространства имен и классы просто не существуют. Как и многие другие, здесь есть альтернативы в виде пакетов nuget или Xamarin Components.

Хорошая отправная точка будет:

  1. Xamarin Component store
  2. NuGET (deeplink)

Пожалуйста, обратите внимание, что я советую вам использовать легко-доступные библиотеки. Из моего опыта пытаться воссоздать WinForms (или материал, который он делает) бесполезно, поскольку мобильные разработки работают совершенно по-другому. Я бы посоветовал вам найти графическую библиотеку, а не библиотеку рисования, но это всего лишь мой 0,02 евро.

Add-on: Если вы пытаетесь создать что-то, что работает на кроссплатформе, обязательно проверьте библиотеки кроссплатформенности (они работают в портативной библиотеке классов или в стандартной библиотеке .NET, если вам повезет). Это поможет вам начать работу с каждым типом мобильного проекта, вместо того, чтобы восстанавливать графики с разными библиотеками.

Смежные вопросы