Перейти к содержанию
Fire Monkey от А до Я
  • 0

[Андроид]не видно картинки


Anatoliy

Вопрос

//фрагмент цикла
TBitmap * PictureFood = new TBitmap();
#ifdef __ANDROID__
String path = System::Ioutils::TPath::Combine(System::Ioutils::TPath::GetSharedDownloadsPath(), image);
#elif _Windows
String path = System::Ioutils::TPath::Combine(GetCurrentDir(), image); //image = 1.jpg
#endif
PictureFood->LoadFromFile(path);
//MyImage имя объекта в ListView
reinterpret_cast<TListItemImage *>(item->Objects->FindDrawable(L"MyImage"))->Bitmap = PictureFood;

Как правильно загрузить из внешнего файла картинку в ListView (DynamicAppearance)? Код выше показывает загруженные картинки в Windows, все нормально.  А вот в андроиде вместо картинки пустота...

 

Ссылка на комментарий

Рекомендуемые сообщения

  • 0

Спасибо. Попробовал. Все нормально не вижу ShowMessage(L"No file"); Однако картинок нет. :(

//фрагмент цикла
TBitmap * PictureFood = new TBitmap();
		   #ifdef __ANDROID__
		   String path = System::Ioutils::TPath::Combine(System::Ioutils::TPath::GetSharedDownloadsPath(), image);
		   #elif _Windows
		   String path = System::Ioutils::TPath::Combine(GetCurrentDir(), image);
		   #endif
		   if(FileExists(path))
			{
			 PictureFood->LoadFromFile(path);
			 reinterpret_cast<TListItemImage *>(item->Objects->FindDrawable(L"MyImage"))->Bitmap = PictureFood;
			}
			else
				{
				 ShowMessage(L"No file");
				}

 

winand.jpg

Ссылка на комментарий
  • 0

Если на форму поставить Image1 сделать его невидимым и грузить сначала в него, а потом в ListView, то картинку на андроиде вижу, но почему-то во всех строках последняя картинка. Где ошибка?

//TForm1::FormShow
//name картинки Image1->ImageRAD
//фрагмент цикла
 TListViewItem * item = ListView1->Items->Add();
//***
if(FileExists(path))
			{
			 PictureFood->LoadFromFile(path);
			 ImageRAD->Bitmap = NULL;
			 ImageRAD->Bitmap = PictureFood;
			 reinterpret_cast<TListItemImage *>(item->Objects->FindDrawable(L"MyImage"))->Bitmap = ImageRAD->Bitmap;
			}
			else
				{
				 ShowMessage(L"No file");
				}

 

one.jpg

Изменено пользователем Anatoliy
Ссылка на комментарий
  • 0

очевидно потому что передается не битмап а сыслка на него, а по ссылке лежит то что последнее загружено.

возвращаясь к задаче, сделайте цикл на 3-4 загрузки в битмап и 3-4 TImage бросьте на форму

соответственно бимапы загружайте в Timage

так и узнаете, загрузка идет или нет

p.s. может не поздно еще С++ на delphi заменить?

Изменено пользователем krapotkin
Ссылка на комментарий
  • 1

в делфи делается так - 

                    li:= lv.Items.Add;
                    lii:=li.Objects.FindObjectT<TListItemImage>('Image');
                    lii.OwnsBitmap:=True;

далее можно грузить картинку, если в потоке то 

            TThread.Synchronize(TThread.CurrentThread, procedure()
            begin
               // присваивание битмапу картинки 

                        lii.Bitmap:= TBitmap.Create;
                        lii.Bitmap.SetSize(ItemBitmap.Width, ItemBitmap.Height);
                        lii.Bitmap.Clear(TAlphaColors.Null);
                        lii.Bitmap.CopyFromBitmap(ItemBitmap);

               
            end
            );

Изменено пользователем haword
Ссылка на комментарий
  • 0

haword, Вам надо присвоить 100 плюсов и сделать модератором! Все работает и в Windows и в Android! СПАСИБО!!!!

//фрагмент цикла
TBitmap * PictureFood = new TBitmap();
		   if(FileExists(path))
			{
			 PictureFood->LoadFromFile(path);
			 TListItemImage * img = dynamic_cast<TListItemImage *>(item->Objects->FindDrawable(L"MyImage"));
			 img->Bitmap = PictureFood;
			 img->OwnsBitmap = true;
			 if(dynamic_cast<TListItemImage *>(item->Objects->FindDrawable(L"MyImage"))->Bitmap == NULL)
			   {
				ShowMessage(L"Problem!");
			   }
			}
			else
				{
				 //image по умолчанию. Это логотип в случае если нет файла.
				 dynamic_cast<TListItemImage *>(item->Objects->FindDrawable(L"MyImage"))->Bitmap = ImageRAD->Bitmap;
				}

 

Изменено пользователем Anatoliy
Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...