Я работаю над приложением Xamarin, в частности, над реализацией Android. Я не построил это первоначально. Я использую класс ModalDisplayImageAdapter, унаследованный от RecyclerView.Adapter. Изображения либо принимаются устройством, загружаются через приложение или загружаются из других источников (приложение iOS, сопровождающее веб-приложение) и загружаются в API. Все это работает без проблем.
Проблема в том, что приложение Android отображает изображение в перевернутой ориентации; он отображает ландшафтные изображения, как если бы они были портретными, и наоборот. Если я фотографирую на устройстве Android и загружаю его в API, оно корректно отображается на веб-сайте. Так что я знаю, что проблема не в механизме загрузки или самом изображении. Это просто приложение Android, которое отображает его неправильно. Если изображение в альбомной ориентации, RecyclerView растянет его в портретную рамку (пример внизу поста).
Модальное изображение XML находится здесь:
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:background="@color/black"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.RecyclerView
android:id="@+id/image_modal_recycler"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<ImageButton
android:id="@+id/download_image_button"
android:tint="@color/white"
android:background="@android:color/transparent"
android:layout_gravity="left"
style="@style/BadgeableImageButton"
android:src="@drawable/icon_of_download"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<ImageButton
android:id="@+id/image_modal_close"
android:tint="@color/white"
android:background="@android:color/transparent"
android:layout_gravity="right"
style="@style/BadgeableImageButton"
android:src="@drawable/icon_of_cross"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
Модал заполняется действием ImageModal. Метод OnCreate находится здесь:
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
SetupView();
ActionBar.Hide();
DataModel dataModel = _dataUtil.GetSelectedItem();
if (dataModel == null || !dataModel.EntryDataObject.HasFiles())
{
throw new ArgumentException("Item has no files");
}
_files = dataModel.EntryDataObject.Files.Where(file => file.HasThumbnail).ToList();
if (!_files.Any())
{
throw new ArgumentException("Item has no images to display");
}
_closeButton.Click += CloseButtonOnClick;
_downloadButton.Click += DownloadButtonOnClick;
int position = Intent.GetIntExtra(IntentConstants.IMAGE_MODAL_POSITION, 0);
LinearSnapHelper snapHelper = new LinearSnapHelper();
snapHelper.AttachToRecyclerView(_imageRecycler);
_layoutManager = new LinearLayoutManager(this, LinearLayoutManager.Horizontal, false);
_imageRecycler.SetLayoutManager(_layoutManager);
_imageRecycler.SetAdapter(new ModalDisplayImageAdapter(_files));
_layoutManager.ScrollToPosition(position);
}
Во время отладки я посмотрел на DataModel и увидел свойство EntryDataString, которое имеет следующее значение:
"{\"mobileId\":0,\"text\":\"landscape photo\",\"files\":[{\"IsMigrated\":false,\"mobileId\":0,\"Id\":5047,\"BlobId\":…"
Так выглядит, как на фотографии Идентифицируется и сохраняется на устройстве правильно. Я просто не могу понять, почему ориентация не правильная.
Есть идеи ...? (Примечание: я новичок в этой технологии и в этом приложении, поэтому, возможно, я что-то упустил. Если да, дайте мне сейчас, и я отредактирую вопрос. Спасибо.)
РЕДАКТИРОВАТЬ: Изображение 2