MonoTouch + MonoDroid: общие бизнес-объекты с изображениями

1

Я MonoDroid проект с Android и iOS клиентами с MonoTouch и MonoDroid. Общий проект бизнес-уровня содержит общие объекты домена.

У одного из них есть необходимость хранить изображение, имя и возраст. Изображение не загружается.

Возможно ли создать общий объект, который содержит фактические данные для PNG или JPG, но который как-то работает как в iOS и в Android?

///Simplified customer
class Customer {
   public Image???;
   public string Name;
   public Int Age;
}
  • 0
    Мм. Представлять изображение в виде байтового массива?
Теги:
xamarin.android
xamarin.ios
mono

2 ответа

4
Лучший ответ

Опции:

  1. представляют изображение как byte [] или MemoryStream/Stream
  2. остаться с собственным кодом конкретной платформы требует частичных классов и связывания общего класса в Customer.cs - связан через проекты, которые я называю этим методом split-n-link или link-n-split

    public partial class Customer {public string Name; public Int Age; public Int Age; } }

класс delta для монотота в проекте monotouch

public partial class Customer {
    public UIImage;
}

delta класс для mono для android в проекте m4a

public partial class Customer {
    public ImageView;
}

Таким образом, каждый проект будет содержать Customer.cs. Одна оригинальная/исходная и другая ссылка на него, которая зависит от предпочтений или общего знака-знаменателя при работе с Windows Phone (в настоящее время он имеет наименьший набор функций - лучше он более ограничительный), Помимо файла main/original/source Customer.cs, есть 2 (3, если WP) дельта с конкретными материалами платформы. Помните, что частичные классы являются "аддитивными", что означает, что вы можете добавлять атрибуты в другой файл cs, и они применяются, поэтому в этом классе дельта можно добавлять атрибуты, специфичные для платформы, и включать такие вещи, как привязка для iOS ad/or Android, если это необходимо. Из опыта Holisticware (Visual Studio ориентирован на 80% +, 20% или меньше на Mac) исходный проект Mono для Android, но он может быть обратным...

С link-n-spilled один заканчивается в основном с помощью POCO + delta, и этот POCO может использоваться для таргетинга на настольную платформу (WF, WPF), где все проще: отладка, модульное тестирование и т.д.

И есть преимущество, что каждый проект скомпилирован/построен с конфигурацией для этой платформы - поэтому ig ребята из Xamarin придумали еще одну яркую идею для построений, таких как оптимизация размеров, которые не должны влиять на проекты - перекомпилируйте и идите!

HTH mel

1

Я делаю этот тип совместного использования с использованием интерфейсов или абстрактных базовых классов с конкретными реализациями, внедренными во время выполнения.

Например, я мог бы установить некоторые интерфейсы, такие как:

 public interface IImage
 {
      int Height { get; }
      int Width { get; }
 }

 public interface IImageTools
 {
      IImage Load(string assetPath);
      void SaveToJPEG(IImage image, string savePath, int quality);
      IImage DuplicateAndResize(IImage original, int newHeight, int newWidth);
 } 

Моя бизнес-модель будет иметь некоторый способ получить ссылку на IImageTools - например, она может быть введена в конструктор или может быть доступна из некоторого контейнера (например, одиночного Single IoC)

Это позволяет мне вводить отдельные встроенные реализации во время выполнения для Droid, Touch, WP7, WinRT или NUnit.

В проектах пользовательского интерфейса, когда вам действительно нужно отображать изображение в пользовательском интерфейсе, я, как правило, передавал IImage в собственную реализацию, например TouchImage, которая затем содержала бы метод, позволяющий овладеть базовым UIImage


например, не совсем ваше требование к изображению, но вот что я делаю для изображений для операций Camera Capture: https://github.com/slodge/MvvmCross/tree/vnext/Cirrious/Plugins/PictureChooser

Ещё вопросы

Сообщество Overcoder
Наверх
Меню