Подтвердить что ты не робот

Пикассо загружает ресурсы с их URI

Я должен показать drawable из res в ImageView. В этом приложении я использую Пикассо по некоторым причинам.

В этом случае мне нужно загрузить drawable используя его URI, а не его идентификатор. Для этого вот мой код:

uri = Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE + "://"+context.getPackageName()+"/drawable/" + drawableName);

где drawableName используется здесь - это имена файлов, а не их идентификаторы ресурсов.

затем

Picasso.with(context).load(uri).into(imageView);

Я точно знаю, что нарисованное имя правильное, но Пикассо, похоже, не любит этот ури.

4b9b3361

Ответ 1

Нашел ответ. К сожалению, Picasso не разрешает переносимую загрузку через URI. Это входящая функция.

Ответ 2

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

Picasso.with(context).load(R.drawable.drawableName).into(imageView);

и picasso не загрузит его в Uri.

Ответ 3

  • Это если вы не хотите жестко кодировать изображение, которое вы собираетесь загрузить...

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

Тогда вы можете просто сделать:

Picasso.with(getContext()).load(imageResourceId)
.error(R.drawable.ic_launcher)
.into(imageView);

куда

ImageView

это вид, который вы хотите отобразить изображение. Например:

imageView = (ImageView) convertView
.findViewById(R.id.itemImage);

И где

imageResourceId

является целочисленным значением отрисовки. Вы можете получить это целочисленное значение следующим образом:

int productImageId = resources.getIdentifier(
productImageName, "drawable", context.getPackageName());

так же как

productImageName

имя рисованного элемента, который вы хотите нарисовать (т.е. "ic_launcher")

ЭТО МОЖЕТ БЫТЬ СДЕЛАНО ВНУТРИ АДАПТЕРА

Ответ 4

Как упоминалось в документации Picasso.

теперь они поддерживают загрузку изображения из URI, как показано ниже:

load(android.net.Uri uri) 

поэтому вам нужно сделать что-то вроде следующего:

Picasso.with(context).load(uri).into(imageView); 

точно так же, как вы уже делаете.

Хопетат помогает.

Ответ 5

Из Picasso v2+ здесь большая модификация. Новая версия очень полезна для управления данными кэша изображений. Это с помощью Singleton Instance.

Gradle

implementation 'com.squareup.picasso:picasso:2.71828'

Установить нарисованное изображение

Picasso.get()
    .load(url)
    .placeholder(R.drawable.user_placeholder)
    .error(R.drawable.user_placeholder_error)
    .into(imageView);

Бонус, получи отрисовку по имени:

public static int getDrawableIdFromFileName(Context context, String nameOfDrawable) {
        return context.getResources().getIdentifier(nameOfDrawable, "drawable", context.getPackageName());
}